From 6ff60bc3688d8ae2caa3ea18bc23963d25ab5daa Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 22 Nov 2019 20:15:00 +0100 Subject: =?UTF-8?q?Fix=20secondary=20non-origin=20alignment=20=F0=9F=9A=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/library/axes.rs | 20 +++++++++++++++++++- src/library/boxed.rs | 20 ++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) (limited to 'src/library') 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, + positional_1: Option, + positional_2: Option, primary: Option, secondary: Option, horizontal: Option, @@ -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::()? { - align.primary = Some(parse_align_specifier(arg)?); + align.positional_1 = Some(parse_align_specifier(arg)?); + } + + if let Some(arg) = args.get_pos_opt::()? { + align.positional_2 = Some(parse_align_specifier(arg)?); } let mut parse_arg = |axis, target: &mut Option| { @@ -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, + height: Option, } function! { data: Boxed, parse(args, body, ctx) { + let width = args.get_key_opt::("width")?.map(|a| a.val); + let height = args.get_key_opt::("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)?)]) } } -- cgit v1.2.3