diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-11-22 20:15:00 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-11-22 20:15:00 +0100 |
| commit | 6ff60bc3688d8ae2caa3ea18bc23963d25ab5daa (patch) | |
| tree | 51f4abdee9bfdda98f8d865d45a30c94556d004b /src/library | |
| parent | 4ab7ec6a9a1159bdf1e22eccb56d6d827aaf5b23 (diff) | |
Fix secondary non-origin alignment 🚧
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/axes.rs | 20 | ||||
| -rw-r--r-- | src/library/boxed.rs | 20 |
2 files changed, 37 insertions, 3 deletions
diff --git a/src/library/axes.rs b/src/library/axes.rs index 09c2f7d2..29b624ab 100644 --- a/src/library/axes.rs +++ b/src/library/axes.rs @@ -4,6 +4,8 @@ use crate::func::prelude::*; #[derive(Debug, PartialEq)] pub struct Align { body: Option<SyntaxTree>, + positional_1: Option<AlignSpecifier>, + positional_2: Option<AlignSpecifier>, primary: Option<AlignSpecifier>, secondary: Option<AlignSpecifier>, horizontal: Option<AlignSpecifier>, @@ -29,6 +31,8 @@ function! { let mut align = Align { body, + positional_1: None, + positional_2: None, primary: None, secondary: None, horizontal: None, @@ -36,7 +40,11 @@ function! { }; if let Some(arg) = args.get_pos_opt::<ArgIdent>()? { - align.primary = Some(parse_align_specifier(arg)?); + align.positional_1 = Some(parse_align_specifier(arg)?); + } + + if let Some(arg) = args.get_pos_opt::<ArgIdent>()? { + align.positional_2 = Some(parse_align_specifier(arg)?); } let mut parse_arg = |axis, target: &mut Option<AlignSpecifier>| { @@ -92,6 +100,16 @@ function! { Ok(()) }; + if let Some(spec) = this.positional_1 { + let positional = generic_alignment(spec, primary_horizontal).is_ok(); + set_axis(positional, this.positional_1)?; + } + + if let Some(spec) = this.positional_2 { + let positional = generic_alignment(spec, primary_horizontal).is_ok(); + set_axis(positional, this.positional_2)?; + } + set_axis(true, this.primary)?; set_axis(false, this.secondary)?; set_axis(primary_horizontal, this.horizontal)?; diff --git a/src/library/boxed.rs b/src/library/boxed.rs index e8debca4..1cc4e020 100644 --- a/src/library/boxed.rs +++ b/src/library/boxed.rs @@ -4,18 +4,34 @@ use crate::func::prelude::*; #[derive(Debug, PartialEq)] pub struct Boxed { body: SyntaxTree, + width: Option<Size>, + height: Option<Size>, } function! { data: Boxed, parse(args, body, ctx) { + let width = args.get_key_opt::<ArgSize>("width")?.map(|a| a.val); + let height = args.get_key_opt::<ArgSize>("height")?.map(|a| a.val); args.done()?; + let body = parse!(required: body, ctx); - Ok(Boxed { body }) + Ok(Boxed { + body, + width, + height, + }) } - layout(this, ctx) { + layout(this, mut ctx) { + if let Some(width) = this.width { + ctx.spaces[0].dimensions.x = width; + } + if let Some(height) = this.height { + ctx.spaces[0].dimensions.y = height; + } + Ok(commands![AddMultiple(layout_tree(&this.body, ctx)?)]) } } |
