summaryrefslogtreecommitdiff
path: root/library/src/layout/flow.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-08 18:44:31 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-08 19:03:23 +0100
commite6857f810e8868d95ebe78753568016b6dea12ca (patch)
tree1b33a10470b9dff1d3c5e36ea4fd81fdf6b114cf /library/src/layout/flow.rs
parent11c7ceb29e762f6dd1d093d9fdb57e9612a92df0 (diff)
Copyable regions
Diffstat (limited to 'library/src/layout/flow.rs')
-rw-r--r--library/src/layout/flow.rs15
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));
}