summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2019-11-22 20:15:00 +0100
committerLaurenz <laurmaedje@gmail.com>2019-11-22 20:15:00 +0100
commit6ff60bc3688d8ae2caa3ea18bc23963d25ab5daa (patch)
tree51f4abdee9bfdda98f8d865d45a30c94556d004b /src/library
parent4ab7ec6a9a1159bdf1e22eccb56d6d827aaf5b23 (diff)
Fix secondary non-origin alignment 🚧
Diffstat (limited to 'src/library')
-rw-r--r--src/library/axes.rs20
-rw-r--r--src/library/boxed.rs20
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)?)])
}
}