summaryrefslogtreecommitdiff
path: root/src/layout/background.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/background.rs
parent7db78d83bedf62adea0d715c9a2a179ce23a1a48 (diff)
Ref count the frames
Diffstat (limited to 'src/layout/background.rs')
-rw-r--r--src/layout/background.rs13
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
}
}