summaryrefslogtreecommitdiff
path: root/src/library/align.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2019-12-13 23:59:01 +0100
committerLaurenz <laurmaedje@gmail.com>2019-12-13 23:59:01 +0100
commit665b4d2aca81af48b8e0eaca4e709ef2e7825844 (patch)
tree4ada33f607455f14b6a170fe4b7fbe173056567b /src/library/align.rs
parent971ff3a2dcff1e68bf7e19017113469aad5a30c2 (diff)
More consistent library code and functions 🎄
Diffstat (limited to 'src/library/align.rs')
-rw-r--r--src/library/align.rs52
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),
-}