diff --git a/src/algo.rs b/src/algo.rs index e22c2124..255d41b8 100644 --- a/src/algo.rs +++ b/src/algo.rs @@ -228,7 +228,7 @@ impl Forest { min_size: child_style.min_size.resolve(node_inner_size), max_size: child_style.max_size.resolve(node_inner_size), - position: child_style.position.map(|p| p.resolve(node_inner_size.width)), + position: child_style.position.zip_size(node_inner_size, |p, s| p.resolve(s)), margin: child_style.margin.map(|m| m.resolve(node_inner_size.width).or_else(0.0)), padding: child_style.padding.map(|p| p.resolve(node_inner_size.width).or_else(0.0)), border: child_style.border.map(|b| b.resolve(node_inner_size.width).or_else(0.0)), diff --git a/src/geometry.rs b/src/geometry.rs index f5471e4b..21c1206d 100644 --- a/src/geometry.rs +++ b/src/geometry.rs @@ -22,6 +22,18 @@ impl Rect { { Rect { start: f(self.start), end: f(self.end), top: f(self.top), bottom: f(self.bottom) } } + pub(crate) fn zip_size(self, size: Size, f: F) -> Rect + where + F: Fn(T, U) -> R, + U: Copy, + { + Rect { + start: f(self.start, size.width), + end: f(self.end, size.width), + top: f(self.top, size.height), + bottom: f(self.bottom, size.height), + } + } } impl Rect