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/background.rs | |
| parent | 7db78d83bedf62adea0d715c9a2a179ce23a1a48 (diff) | |
Ref count the frames
Diffstat (limited to 'src/layout/background.rs')
| -rw-r--r-- | src/layout/background.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/layout/background.rs b/src/layout/background.rs index 41138bdf..8390a756 100644 --- a/src/layout/background.rs +++ b/src/layout/background.rs @@ -23,10 +23,11 @@ impl Layout for BackgroundNode { &self, ctx: &mut LayoutContext, regions: &Regions, - ) -> Vec<Constrained<Frame>> { + ) -> Vec<Constrained<Rc<Frame>>> { let mut frames = self.child.layout(ctx, regions); - for frame in &mut frames { + let mut new = Frame::new(frame.size, frame.baseline); + let (point, shape) = match self.shape { BackgroundShape::Rect => (Point::zero(), Shape::Rect(frame.size)), BackgroundShape::Ellipse => { @@ -35,9 +36,13 @@ impl Layout for BackgroundNode { }; let element = Element::Geometry(shape, self.fill); - frame.item.elements.insert(0, (point, element)); - } + new.push(point, element); + let prev = std::mem::take(&mut frame.item); + new.push_frame(Point::zero(), prev); + + *Rc::make_mut(&mut frame.item) = new; + } frames } } |
