summaryrefslogtreecommitdiff
path: root/src/layout/pad.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout/pad.rs')
-rw-r--r--src/layout/pad.rs44
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)
+ }
+}