summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-05-03 23:56:57 +0200
committerGitHub <noreply@github.com>2022-05-03 23:56:57 +0200
commitaa10ea8470763afe98d5ff558381f0a0beb0c017 (patch)
tree938f58a8e0faa4f5216920fc3e82d86301d2f094 /src/model
parentf9e115daf54c29358f890b137f50a33a781af680 (diff)
parent51d0de09c6f7e2af4db3b65c3fe9595c501b82c9 (diff)
Merge pull request #69 from typst/shapeees
Advanced shapes
Diffstat (limited to 'src/model')
-rw-r--r--src/model/layout.rs6
-rw-r--r--src/model/styles.rs31
2 files changed, 33 insertions, 4 deletions
diff --git a/src/model/layout.rs b/src/model/layout.rs
index 51154286..3b82ddc2 100644
--- a/src/model/layout.rs
+++ b/src/model/layout.rs
@@ -8,8 +8,10 @@ use std::sync::Arc;
use super::{Barrier, NodeId, Resolve, StyleChain, StyleEntry};
use crate::diag::TypResult;
use crate::eval::{RawAlign, RawLength};
-use crate::frame::{Element, Frame, Geometry};
-use crate::geom::{Align, Length, Paint, Point, Relative, Sides, Size, Spec, Stroke};
+use crate::frame::{Element, Frame};
+use crate::geom::{
+ Align, Geometry, Length, Paint, Point, Relative, Sides, Size, Spec, Stroke,
+};
use crate::library::graphics::MoveNode;
use crate::library::layout::{AlignNode, PadNode};
use crate::util::Prehashed;
diff --git a/src/model/styles.rs b/src/model/styles.rs
index eb7a7053..ae4c1586 100644
--- a/src/model/styles.rs
+++ b/src/model/styles.rs
@@ -7,8 +7,8 @@ use std::sync::Arc;
use super::{Content, Show, ShowNode};
use crate::diag::{At, TypResult};
-use crate::eval::{Args, Func, Node, Smart, Value};
-use crate::geom::{Numeric, Relative, Sides, Spec};
+use crate::eval::{Args, Func, Node, RawLength, Smart, Value};
+use crate::geom::{Length, Numeric, Relative, Sides, Spec};
use crate::library::layout::PageNode;
use crate::library::structure::{EnumNode, ListNode};
use crate::library::text::{FontFamily, ParNode, TextNode};
@@ -459,6 +459,33 @@ where
}
}
+impl<T> Fold for Sides<T>
+where
+ T: Fold,
+{
+ type Output = Sides<T::Output>;
+
+ fn fold(self, outer: Self::Output) -> Self::Output {
+ self.zip(outer, |inner, outer, _| inner.fold(outer))
+ }
+}
+
+impl Fold for Sides<Option<Relative<Length>>> {
+ type Output = Sides<Relative<Length>>;
+
+ fn fold(self, outer: Self::Output) -> Self::Output {
+ self.zip(outer, |inner, outer, _| inner.unwrap_or(outer))
+ }
+}
+
+impl Fold for Sides<Option<Smart<Relative<RawLength>>>> {
+ type Output = Sides<Smart<Relative<RawLength>>>;
+
+ fn fold(self, outer: Self::Output) -> Self::Output {
+ self.zip(outer, |inner, outer, _| inner.unwrap_or(outer))
+ }
+}
+
/// A scoped property barrier.
///
/// Barriers interact with [scoped](StyleMap::scoped) styles: A scoped style