diff options
Diffstat (limited to 'src/layout/pad.rs')
| -rw-r--r-- | src/layout/pad.rs | 44 |
1 files changed, 18 insertions, 26 deletions
diff --git a/src/layout/pad.rs b/src/layout/pad.rs index d24ca654..7ceb3d1b 100644 --- a/src/layout/pad.rs +++ b/src/layout/pad.rs @@ -11,37 +11,23 @@ pub struct PadNode { impl Layout for PadNode { fn layout(&self, ctx: &mut LayoutContext, areas: &Areas) -> Vec<Frame> { - let areas = shrink(areas, self.padding); + let areas = areas.map(|size| size - self.padding.resolve(size).size()); + let mut frames = self.child.layout(ctx, &areas); for frame in &mut frames { - pad(frame, self.padding); - } - frames - } -} + let padded = solve(self.padding, frame.size); + let padding = self.padding.resolve(padded); + let origin = Point::new(padding.left, padding.top); -impl From<PadNode> for AnyNode { - fn from(pad: PadNode) -> Self { - Self::new(pad) - } -} + frame.size = padded; + frame.baseline += origin.y; -/// Shrink all areas by the padding. -fn shrink(areas: &Areas, padding: Sides<Linear>) -> Areas { - areas.map(|size| size - padding.resolve(size).size()) -} - -/// Pad the frame and move all elements inwards. -fn pad(frame: &mut Frame, padding: Sides<Linear>) { - let padded = solve(padding, frame.size); - let padding = padding.resolve(padded); - let origin = Point::new(padding.left, padding.top); - - frame.size = padded; - frame.baseline += origin.y; + for (point, _) in &mut frame.elements { + *point += origin; + } + } - for (point, _) in &mut frame.elements { - *point += origin; + frames } } @@ -57,3 +43,9 @@ fn solve(padding: Sides<Linear>, size: Size) -> Size { solve_axis(size.height, padding.top + padding.bottom), ) } + +impl From<PadNode> for AnyNode { + fn from(pad: PadNode) -> Self { + Self::new(pad) + } +} |
