summaryrefslogtreecommitdiff
path: root/library/src/layout
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-11-17 21:57:15 +0100
committerLaurenz <laurmaedje@gmail.com>2022-11-17 23:04:02 +0100
commitddb617390cf7150042726742749806eab6b3dd54 (patch)
treef102a8ad40e2127215c00c879c80e6432a3e26df /library/src/layout
parentcabd0908e230e451bd9f1394390f8c5deb17182e (diff)
Simplify layout_inline's signature
Diffstat (limited to 'library/src/layout')
-rw-r--r--library/src/layout/container.rs7
-rw-r--r--library/src/layout/mod.rs11
-rw-r--r--library/src/layout/transform.rs35
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)
}
}