From ed0c80401782a6c42173f0bb123731b798a2cfe1 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 27 Sep 2021 15:11:56 +0200 Subject: Add spacing capabilities to stack function - Named argument `spacing` controls spacing between any two template arguments - Arbitrary linears in the list can produce arbitrary spacing --- src/library/layout.rs | 98 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 35 deletions(-) (limited to 'src/library/layout.rs') diff --git a/src/library/layout.rs b/src/library/layout.rs index e958f3a3..87cedd99 100644 --- a/src/library/layout.rs +++ b/src/library/layout.rs @@ -188,8 +188,22 @@ pub fn pad(_: &mut EvalContext, args: &mut Args) -> TypResult { /// `stack`: Stack children along an axis. pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult { + enum Child { + Spacing(Linear), + Any(Template), + } + + castable! { + Child: "linear or template", + Value::Length(v) => Self::Spacing(v.into()), + Value::Relative(v) => Self::Spacing(v.into()), + Value::Linear(v) => Self::Spacing(v), + Value::Template(v) => Self::Any(v), + } + let dir = args.named("dir")?; - let children: Vec