summaryrefslogtreecommitdiff
path: root/src/eval/ops.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-11-26 16:32:06 +0100
committerLaurenz <laurmaedje@gmail.com>2021-11-26 16:32:06 +0100
commit3a15922d2ffc041c3523edb479f008a9034fd400 (patch)
tree988fe103c0752696c1fade2123142a8db5361ab7 /src/eval/ops.rs
parent393d74f9bb0d4c71a69108d5be261103c39f47f3 (diff)
X/Y abstractions
Diffstat (limited to 'src/eval/ops.rs')
-rw-r--r--src/eval/ops.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/eval/ops.rs b/src/eval/ops.rs
index 6fac354d..ede1230f 100644
--- a/src/eval/ops.rs
+++ b/src/eval/ops.rs
@@ -3,7 +3,7 @@ use std::convert::TryFrom;
use super::{Dynamic, Value};
use crate::diag::StrResult;
-use crate::geom::{Align, Get, Spec};
+use crate::geom::{Align, Spec, SpecAxis};
use crate::util::EcoString;
use Value::*;
@@ -94,14 +94,18 @@ pub fn add(lhs: Value, rhs: Value) -> StrResult<Value> {
if let (Some(&a), Some(&b)) =
(a.downcast::<Align>(), b.downcast::<Align>())
{
- if a.axis() == b.axis() {
- return Err(format!("cannot add two {:?} alignments", a.axis()));
+ dynamic! {
+ Spec<Align>: "2d alignment",
}
- let mut aligns = Spec::default();
- aligns.set(a.axis(), Some(a));
- aligns.set(b.axis(), Some(b));
- return Ok(Dyn(Dynamic::new(aligns)));
+ return if a.axis() != b.axis() {
+ Ok(Dyn(Dynamic::new(match a.axis() {
+ SpecAxis::Horizontal => Spec { x: a, y: b },
+ SpecAxis::Vertical => Spec { x: b, y: a },
+ })))
+ } else {
+ Err(format!("cannot add two {:?} alignments", a.axis()))
+ };
}
}