From fa9e2c62379792c045288d1ab66f68c5a2e18c42 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 19 Jul 2023 12:59:34 +0200 Subject: [PATCH] Resolve `place` deltas relative to real container size --- crates/typst-library/src/layout/flow.rs | 11 ++++++++--- crates/typst-library/src/layout/place.rs | 9 +++------ tests/ref/layout/place-nested.png | Bin 6202 -> 6966 bytes tests/typ/layout/place-nested.typ | 7 +++++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/crates/typst-library/src/layout/flow.rs b/crates/typst-library/src/layout/flow.rs index 930857e75..4ce78c94e 100644 --- a/crates/typst-library/src/layout/flow.rs +++ b/crates/typst-library/src/layout/flow.rs @@ -134,6 +134,7 @@ enum FlowItem { frame: Frame, x_align: Align, y_align: Smart>, + delta: Axes>, float: bool, clearance: Abs, }, @@ -276,12 +277,13 @@ impl<'a> FlowLayouter<'a> { let float = placed.float(styles); let clearance = placed.clearance(styles); let alignment = placed.alignment(styles); + let delta = Axes::new(placed.dx(styles), placed.dy(styles)).resolve(styles); let x_align = alignment.map_or(Align::Center, |aligns| { aligns.x.unwrap_or(GenAlign::Start).resolve(styles) }); let y_align = alignment.map(|align| align.y.resolve(styles)); let frame = placed.layout(vt, styles, self.regions)?.into_frame(); - let item = FlowItem::Placed { frame, x_align, y_align, float, clearance }; + let item = FlowItem::Placed { frame, x_align, y_align, delta, float, clearance }; self.layout_item(vt, item) } @@ -508,7 +510,7 @@ impl<'a> FlowLayouter<'a> { offset += frame.height(); output.push_frame(pos, frame); } - FlowItem::Placed { frame, x_align, y_align, float, .. } => { + FlowItem::Placed { frame, x_align, y_align, delta, float, .. } => { let x = x_align.position(size.x - frame.width()); let y = if float { match y_align { @@ -534,7 +536,10 @@ impl<'a> FlowLayouter<'a> { } }; - output.push_frame(Point::new(x, y), frame); + let pos = Point::new(x, y) + + delta.zip(size).map(|(d, s)| d.relative_to(s)).to_point(); + + output.push_frame(pos, frame); } FlowItem::Footnote(frame) => { let y = size.y - footnote_height + footnote_offset; diff --git a/crates/typst-library/src/layout/place.rs b/crates/typst-library/src/layout/place.rs index 115e5107a..95c042ff4 100644 --- a/crates/typst-library/src/layout/place.rs +++ b/crates/typst-library/src/layout/place.rs @@ -115,12 +115,9 @@ impl Layout for PlaceElem { .at(self.span()); } - let child = self - .body() - .moved(Axes::new(self.dx(styles), self.dy(styles))) - .aligned( - alignment.unwrap_or_else(|| Axes::with_x(Some(Align::Center.into()))), - ); + let child = self.body().aligned( + alignment.unwrap_or_else(|| Axes::with_x(Some(Align::Center.into()))), + ); let pod = Regions::one(base, Axes::splat(false)); let frame = child.layout(vt, styles, pod)?.into_frame(); diff --git a/tests/ref/layout/place-nested.png b/tests/ref/layout/place-nested.png index ccd55ee4d200e19557b0bb95a96b0fe886f143e4..864830d85405c37f08e3c862a87390ef9bbe565c 100644 GIT binary patch literal 6966 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 literal 6202 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 a0@r(3Ho-0^3E)2g3aGM%Qjvm1@c#fVgu;vf diff --git a/tests/typ/layout/place-nested.typ b/tests/typ/layout/place-nested.typ index c979176a7..93006ff5e 100644 --- a/tests/typ/layout/place-nested.typ +++ b/tests/typ/layout/place-nested.typ @@ -31,3 +31,10 @@ How are \ you? ] + +--- +#box(fill: aqua)[ + #place(top + left, dx: 50%, dy: 50%)[Hi] + #v(30pt) + #line(length: 50pt) +]