summaryrefslogtreecommitdiff
path: root/src/layout/pad.rs
diff options
context:
space:
mode:
authorMartin <mhaug@live.de>2021-06-18 13:01:55 +0200
committerMartin <mhaug@live.de>2021-06-18 13:01:55 +0200
commit80a9b300d1acb8821ac0600aad3d2135ad9587bd (patch)
tree6626ba8891fa4db4e3a1cb13f7f4b27fc05989bf /src/layout/pad.rs
parent7db78d83bedf62adea0d715c9a2a179ce23a1a48 (diff)
Ref count the frames
Diffstat (limited to 'src/layout/pad.rs')
-rw-r--r--src/layout/pad.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/layout/pad.rs b/src/layout/pad.rs
index c212ec8a..9d432e79 100644
--- a/src/layout/pad.rs
+++ b/src/layout/pad.rs
@@ -14,21 +14,19 @@ impl Layout for PadNode {
&self,
ctx: &mut LayoutContext,
regions: &Regions,
- ) -> Vec<Constrained<Frame>> {
+ ) -> Vec<Constrained<Rc<Frame>>> {
let mut regions = regions.map(|size| size - self.padding.resolve(size).size());
let mut frames = self.child.layout(ctx, &regions);
+
for frame in &mut frames {
let padded = solve(self.padding, frame.size);
let padding = self.padding.resolve(padded);
let origin = Point::new(padding.left, padding.top);
- frame.item.size = padded;
- frame.item.baseline += origin.y;
-
- for (point, _) in &mut frame.item.elements {
- *point += origin;
- }
+ let mut new = Frame::new(padded, frame.baseline + origin.y);
+ let prev = std::mem::take(&mut frame.item);
+ new.push_frame(origin, prev);
frame.constraints.mutate(padding.size() * -1.0);
@@ -40,8 +38,8 @@ impl Layout for PadNode {
}
regions.next();
+ *Rc::make_mut(&mut frame.item) = new;
}
-
frames
}
}