diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-08-19 15:31:29 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-08-19 15:52:15 +0200 |
| commit | a6f260ca39f70f82617eca87855789413715f47d (patch) | |
| tree | 08141ae619bd21e0544d21433bce759aebc7ba83 /src/layout/background.rs | |
| parent | fdab7158c91c52a4ace211c804fdd8e9110f56de (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.rs | 11 |
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 } } |
