diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-11-17 21:57:15 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-11-17 23:04:02 +0100 |
| commit | ddb617390cf7150042726742749806eab6b3dd54 (patch) | |
| tree | f102a8ad40e2127215c00c879c80e6432a3e26df /library/src/layout | |
| parent | cabd0908e230e451bd9f1394390f8c5deb17182e (diff) | |
Simplify layout_inline's signature
Diffstat (limited to 'library/src/layout')
| -rw-r--r-- | library/src/layout/container.rs | 7 | ||||
| -rw-r--r-- | library/src/layout/mod.rs | 11 | ||||
| -rw-r--r-- | library/src/layout/transform.rs | 35 |
3 files changed, 24 insertions, 29 deletions
diff --git a/library/src/layout/container.rs b/library/src/layout/container.rs index 20d80cba..eb899d54 100644 --- a/library/src/layout/container.rs +++ b/library/src/layout/container.rs @@ -26,7 +26,7 @@ impl LayoutInline for BoxNode { world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, - ) -> SourceResult<Vec<Frame>> { + ) -> SourceResult<Frame> { // The "pod" is the region into which the child will be layouted. let pod = { // Resolve the sizing to a concrete size. @@ -47,14 +47,13 @@ impl LayoutInline for BoxNode { }; // Layout the child. - let mut frames = self.child.layout_inline(world, &pod, styles)?; + let mut frame = self.child.layout_inline(world, &pod, styles)?; // Ensure frame size matches regions size if expansion is on. - let frame = &mut frames[0]; let target = regions.expand.select(regions.first, frame.size()); frame.resize(target, Align::LEFT_TOP); - Ok(frames) + Ok(frame) } } diff --git a/library/src/layout/mod.rs b/library/src/layout/mod.rs index f79da71c..605da3b2 100644 --- a/library/src/layout/mod.rs +++ b/library/src/layout/mod.rs @@ -112,7 +112,7 @@ pub trait LayoutInline: 'static + Sync + Send { world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, - ) -> SourceResult<Vec<Frame>>; + ) -> SourceResult<Frame>; } impl LayoutInline for Content { @@ -122,7 +122,10 @@ impl LayoutInline for Content { world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, - ) -> SourceResult<Vec<Frame>> { + ) -> SourceResult<Frame> { + assert!(regions.backlog.is_empty()); + assert!(regions.last.is_none()); + if !self.has::<dyn Show>() || !styles.applicable(self) { if let Some(node) = self.to::<dyn LayoutInline>() { let barrier = StyleEntry::Barrier(self.id()); @@ -133,7 +136,7 @@ impl LayoutInline for Content { if let Some(node) = self.to::<dyn LayoutBlock>() { let barrier = StyleEntry::Barrier(self.id()); let styles = barrier.chain(&styles); - return node.layout_block(world, regions, styles); + return Ok(node.layout_block(world, regions, styles)?.remove(0)); } } @@ -141,7 +144,7 @@ impl LayoutInline for Content { let mut builder = Builder::new(world, &scratch, false); builder.accept(self, styles)?; let (flow, shared) = builder.into_flow(styles)?; - flow.layout_block(world, regions, shared) + Ok(flow.layout_block(world, regions, shared)?.remove(0)) } } diff --git a/library/src/layout/transform.rs b/library/src/layout/transform.rs index 4e0b8ac2..c45aa165 100644 --- a/library/src/layout/transform.rs +++ b/library/src/layout/transform.rs @@ -30,16 +30,12 @@ impl LayoutInline for MoveNode { world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, - ) -> SourceResult<Vec<Frame>> { - let mut frames = self.child.layout_inline(world, regions, styles)?; - + ) -> SourceResult<Frame> { + let mut frame = self.child.layout_inline(world, regions, styles)?; let delta = self.delta.resolve(styles); - for frame in &mut frames { - let delta = delta.zip(frame.size()).map(|(d, s)| d.relative_to(s)); - frame.translate(delta.to_point()); - } - - Ok(frames) + let delta = delta.zip(frame.size()).map(|(d, s)| d.relative_to(s)); + frame.translate(delta.to_point()); + Ok(frame) } } @@ -88,20 +84,17 @@ impl<const T: TransformKind> LayoutInline for TransformNode<T> { world: Tracked<dyn World>, regions: &Regions, styles: StyleChain, - ) -> SourceResult<Vec<Frame>> { - let origin = styles.get(Self::ORIGIN).unwrap_or(Align::CENTER_HORIZON); - let mut frames = self.child.layout_inline(world, regions, styles)?; + ) -> SourceResult<Frame> { + let mut frame = self.child.layout_inline(world, regions, styles)?; - for frame in &mut frames { - let Axes { x, y } = origin.zip(frame.size()).map(|(o, s)| o.position(s)); - let transform = Transform::translate(x, y) - .pre_concat(self.transform) - .pre_concat(Transform::translate(-x, -y)); - - frame.transform(transform); - } + let origin = styles.get(Self::ORIGIN).unwrap_or(Align::CENTER_HORIZON); + let Axes { x, y } = origin.zip(frame.size()).map(|(o, s)| o.position(s)); + let transform = Transform::translate(x, y) + .pre_concat(self.transform) + .pre_concat(Transform::translate(-x, -y)); + frame.transform(transform); - Ok(frames) + Ok(frame) } } |
