summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2022-05-01 13:21:07 +0200
committerMartin Haug <mhaug@live.de>2022-05-01 14:56:07 +0200
commit84a4961a5dd03072b0e94c715957475d4ae21e4f (patch)
treef23f7b2917943079c12a218de3dd649ef6e590b7 /src/model
parent5f1499d380e223e7e1b2a8a96eb99e3ec95a56ac (diff)
Outset; fix folding
Diffstat (limited to 'src/model')
-rw-r--r--src/model/styles.rs23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/model/styles.rs b/src/model/styles.rs
index 2e752625..00d1df0f 100644
--- a/src/model/styles.rs
+++ b/src/model/styles.rs
@@ -8,7 +8,7 @@ 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::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,17 +459,30 @@ where
}
}
-impl<T> Fold for Sides<Option<T>>
+impl<T> Fold for Sides<T>
where
- T: Default,
+ T: Fold,
{
- type Output = Sides<T>;
+ type Output = Sides<T::Output>;
+
+ fn fold(self, outer: Self::Output) -> Self::Output {
+ Sides {
+ left: self.left.fold(outer.left),
+ top: self.top.fold(outer.top),
+ right: self.right.fold(outer.right),
+ bottom: self.bottom.fold(outer.bottom),
+ }
+ }
+}
+
+impl Fold for Sides<Option<Relative<Length>>> {
+ type Output = Sides<Relative<Length>>;
fn fold(self, outer: Self::Output) -> Self::Output {
Sides {
left: self.left.unwrap_or(outer.left),
- right: self.right.unwrap_or(outer.right),
top: self.top.unwrap_or(outer.top),
+ right: self.right.unwrap_or(outer.right),
bottom: self.bottom.unwrap_or(outer.bottom),
}
}