diff options
| author | Martin <mhaug@live.de> | 2021-06-18 13:01:55 +0200 |
|---|---|---|
| committer | Martin <mhaug@live.de> | 2021-06-18 13:01:55 +0200 |
| commit | 80a9b300d1acb8821ac0600aad3d2135ad9587bd (patch) | |
| tree | 6626ba8891fa4db4e3a1cb13f7f4b27fc05989bf /src/layout/pad.rs | |
| parent | 7db78d83bedf62adea0d715c9a2a179ce23a1a48 (diff) | |
Ref count the frames
Diffstat (limited to 'src/layout/pad.rs')
| -rw-r--r-- | src/layout/pad.rs | 14 |
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, ®ions); + 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 } } |
