summaryrefslogtreecommitdiff
path: root/src/layout/background.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-08-19 15:31:29 +0200
committerLaurenz <laurmaedje@gmail.com>2021-08-19 15:52:15 +0200
commita6f260ca39f70f82617eca87855789413715f47d (patch)
tree08141ae619bd21e0544d21433bce759aebc7ba83 /src/layout/background.rs
parentfdab7158c91c52a4ace211c804fdd8e9110f56de (diff)
Refactor layouting a bit
Notably: - Handle aspect ratio in fixed node - Inline constraint inflation into pad node
Diffstat (limited to 'src/layout/background.rs')
-rw-r--r--src/layout/background.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/layout/background.rs b/src/layout/background.rs
index 76ce431b..793782fd 100644
--- a/src/layout/background.rs
+++ b/src/layout/background.rs
@@ -26,9 +26,8 @@ impl Layout for BackgroundNode {
regions: &Regions,
) -> 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);
+ for Constrained { item: frame, .. } in &mut frames {
let (point, geometry) = match self.shape {
BackgroundShape::Rect => (Point::zero(), Geometry::Rect(frame.size)),
BackgroundShape::Ellipse => {
@@ -36,11 +35,15 @@ impl Layout for BackgroundNode {
}
};
- let prev = std::mem::take(&mut frame.item);
+ // Create a new frame with the background geometry and the child's
+ // frame.
+ let empty = Frame::new(frame.size, frame.baseline);
+ let prev = std::mem::replace(frame, Rc::new(empty));
+ let new = Rc::make_mut(frame);
new.push(point, Element::Geometry(geometry, self.fill));
new.push_frame(Point::zero(), prev);
- *Rc::make_mut(&mut frame.item) = new;
}
+
frames
}
}