diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-12-13 23:59:01 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-12-13 23:59:01 +0100 |
| commit | 665b4d2aca81af48b8e0eaca4e709ef2e7825844 (patch) | |
| tree | 4ada33f607455f14b6a170fe4b7fbe173056567b /src/library/align.rs | |
| parent | 971ff3a2dcff1e68bf7e19017113469aad5a30c2 (diff) | |
More consistent library code and functions 🎄
Diffstat (limited to 'src/library/align.rs')
| -rw-r--r-- | src/library/align.rs | 52 |
1 files changed, 11 insertions, 41 deletions
diff --git a/src/library/align.rs b/src/library/align.rs index e6952dc2..524ada61 100644 --- a/src/library/align.rs +++ b/src/library/align.rs @@ -1,64 +1,34 @@ use crate::func::prelude::*; -use super::maps::ConsistentMap; -use super::keys::{AxisKey, AlignmentKey}; +use super::maps::{PosAxisMap, AlignmentKey}; function! { /// `align`: Aligns content along the layouting axes. #[derive(Debug, PartialEq)] pub struct Align { body: Option<SyntaxTree>, - map: ConsistentMap<Key, AlignmentKey>, + map: PosAxisMap<AlignmentKey>, } parse(args, body, ctx) { - let mut map = ConsistentMap::new(); - - map.add_opt(Key::First, args.get_pos_opt::<AlignmentKey>()?)?; - map.add_opt(Key::Second, args.get_pos_opt::<AlignmentKey>()?)?; - - for arg in args.keys() { - let axis = AxisKey::from_ident(&arg.v.key)?; - let value = AlignmentKey::from_expr(arg.v.value)?; - - map.add(Key::Axis(axis), value)?; - } - Align { body: parse!(optional: body, ctx), - map, + map: PosAxisMap::new(&mut args)?, } } layout(self, mut ctx) { - let axes = ctx.axes; + ctx.base = ctx.spaces[0].dimensions; - let map = self.map.dedup(|key, alignment| { - let axis = match key { - Key::First => alignment.axis(axes, Primary), - Key::Second => alignment.axis(axes, Secondary), - Key::Axis(AxisKey::Primary) => Primary, - Key::Axis(AxisKey::Secondary) => Secondary, - Key::Axis(AxisKey::Horizontal) => Horizontal.to_generic(axes), - Key::Axis(AxisKey::Vertical) => Vertical.to_generic(axes), - }; - - let alignment = alignment.to_generic(axes, axis)?; - Ok((axis, alignment)) - })?; - - map.with(Primary, |&val| ctx.alignment.primary = val); - map.with(Secondary, |&val| ctx.alignment.secondary = val); + let map = self.map.dedup(ctx.axes, |alignment| alignment.axis(ctx.axes))?; + for &axis in &[Primary, Secondary] { + if let Some(alignment) = map.get(axis) { + *ctx.alignment.get_mut(axis) = alignment.to_generic(ctx.axes, axis)?; + } + } match &self.body { - Some(body) => vec![AddMultiple(layout_tree(&body, ctx)?)], + Some(body) => vec![AddMultiple(layout(&body, ctx)?)], None => vec![Command::SetAlignment(ctx.alignment)], } } } - -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] -enum Key { - First, - Second, - Axis(AxisKey), -} |
