diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-12-08 18:44:31 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-12-08 19:03:23 +0100 |
| commit | e6857f810e8868d95ebe78753568016b6dea12ca (patch) | |
| tree | 1b33a10470b9dff1d3c5e36ea4fd81fdf6b114cf /library/src/layout/flow.rs | |
| parent | 11c7ceb29e762f6dd1d093d9fdb57e9612a92df0 (diff) | |
Copyable regions
Diffstat (limited to 'library/src/layout/flow.rs')
| -rw-r--r-- | library/src/layout/flow.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/library/src/layout/flow.rs b/library/src/layout/flow.rs index 2994d9c6..0b6454a0 100644 --- a/library/src/layout/flow.rs +++ b/library/src/layout/flow.rs @@ -22,7 +22,7 @@ impl Layout for FlowNode { &self, vt: &mut Vt, styles: StyleChain, - regions: &Regions, + regions: Regions, ) -> SourceResult<Fragment> { let mut layouter = FlowLayouter::new(regions, self.1); @@ -55,11 +55,11 @@ impl Debug for FlowNode { } /// Performs flow layout. -struct FlowLayouter { +struct FlowLayouter<'a> { /// Whether this is a root page-level flow. root: bool, /// The regions to layout children into. - regions: Regions, + regions: Regions<'a>, /// Whether the flow should expand to fill the region. expand: Axes<bool>, /// The full size of `regions.size` that was available before we started @@ -88,14 +88,13 @@ enum FlowItem { Placed(Frame), } -impl FlowLayouter { +impl<'a> FlowLayouter<'a> { /// Create a new flow layouter. - fn new(regions: &Regions, root: bool) -> Self { + fn new(mut regions: Regions<'a>, root: bool) -> Self { let expand = regions.expand; let full = regions.first; // Disable vertical expansion for children. - let mut regions = regions.clone(); regions.expand.y = false; Self { @@ -166,7 +165,7 @@ impl FlowLayouter { // aligned later. if let Some(placed) = block.to::<PlaceNode>() { if placed.out_of_flow() { - let frame = block.layout(vt, styles, &self.regions)?.into_frame(); + let frame = block.layout(vt, styles, self.regions)?.into_frame(); self.layout_item(FlowItem::Placed(frame)); return Ok(()); } @@ -187,7 +186,7 @@ impl FlowLayouter { // Layout the block itself. let sticky = styles.get(BlockNode::STICKY); - let fragment = block.layout(vt, styles, &self.regions)?; + let fragment = block.layout(vt, styles, self.regions)?; for frame in fragment { self.layout_item(FlowItem::Frame(frame, aligns, sticky)); } |
