From 665b4d2aca81af48b8e0eaca4e709ef2e7825844 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 13 Dec 2019 23:59:01 +0100 Subject: =?UTF-8?q?More=20consistent=20library=20code=20and=20functions=20?= =?UTF-8?q?=F0=9F=8E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/library/align.rs | 52 +++++++++++----------------------------------------- 1 file changed, 11 insertions(+), 41 deletions(-) (limited to 'src/library/align.rs') 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, - map: ConsistentMap, + map: PosAxisMap, } parse(args, body, ctx) { - let mut map = ConsistentMap::new(); - - map.add_opt(Key::First, args.get_pos_opt::()?)?; - map.add_opt(Key::Second, args.get_pos_opt::()?)?; - - 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), -} -- cgit v1.2.3