diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-09-13 12:28:30 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-09-13 13:44:28 +0200 |
| commit | 8fb225feb4a10a916c239faaa130cf5aae164284 (patch) | |
| tree | e6caa005cd9a63bf69c1999c41a665b9adcdb234 /crates/typst-library | |
| parent | 8927f3d572100377f2feb466b81a8700f0ee3a28 (diff) | |
Fix box in 100% width block
Fixes #2128
Diffstat (limited to 'crates/typst-library')
| -rw-r--r-- | crates/typst-library/src/layout/mod.rs | 1 | ||||
| -rw-r--r-- | crates/typst-library/src/math/ctx.rs | 6 | ||||
| -rw-r--r-- | crates/typst-library/src/math/mod.rs | 14 |
3 files changed, 15 insertions, 6 deletions
diff --git a/crates/typst-library/src/layout/mod.rs b/crates/typst-library/src/layout/mod.rs index ace5cd6e..d9e8ec9a 100644 --- a/crates/typst-library/src/layout/mod.rs +++ b/crates/typst-library/src/layout/mod.rs @@ -266,6 +266,7 @@ fn realize_block<'a>( // These elements implement `Layout` but still require a flow for // proper layout. if content.can::<dyn Layout>() + && !content.is::<BoxElem>() && !content.is::<LineElem>() && !content.is::<RectElem>() && !content.is::<SquareElem>() diff --git a/crates/typst-library/src/math/ctx.rs b/crates/typst-library/src/math/ctx.rs index b9aef711..c992c0eb 100644 --- a/crates/typst-library/src/math/ctx.rs +++ b/crates/typst-library/src/math/ctx.rs @@ -149,6 +149,12 @@ impl<'a, 'b, 'v> MathContext<'a, 'b, 'v> { Ok(self.layout_fragment(elem)?.into_frame()) } + pub fn layout_box(&mut self, boxed: &BoxElem) -> SourceResult<Frame> { + Ok(boxed + .layout(self.vt, self.outer.chain(&self.local), self.regions)? + .into_frame()) + } + pub fn layout_content(&mut self, content: &Content) -> SourceResult<Frame> { Ok(content .layout(self.vt, self.outer.chain(&self.local), self.regions)? diff --git a/crates/typst-library/src/math/mod.rs b/crates/typst-library/src/math/mod.rs index 578064ba..3ae3f23a 100644 --- a/crates/typst-library/src/math/mod.rs +++ b/crates/typst-library/src/math/mod.rs @@ -457,18 +457,20 @@ impl LayoutMath for Content { return Ok(()); } + if let Some(boxed) = self.to::<BoxElem>() { + let frame = ctx.layout_box(boxed)?; + ctx.push(FrameFragment::new(ctx, frame).with_spaced(true)); + return Ok(()); + } + if let Some(elem) = self.with::<dyn LayoutMath>() { return elem.layout_math(ctx); } let mut frame = ctx.layout_content(self)?; if !frame.has_baseline() { - if self.is::<BoxElem>() { - frame.set_baseline(frame.height()); - } else { - let axis = scaled!(ctx, axis_height); - frame.set_baseline(frame.height() / 2.0 + axis); - } + let axis = scaled!(ctx, axis_height); + frame.set_baseline(frame.height() / 2.0 + axis); } ctx.push(FrameFragment::new(ctx, frame).with_spaced(true)); |
