From 8fb225feb4a10a916c239faaa130cf5aae164284 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 13 Sep 2023 12:28:30 +0200 Subject: [PATCH] Fix box in 100% width block Fixes #2128 --- crates/typst-library/src/layout/mod.rs | 1 + crates/typst-library/src/math/ctx.rs | 6 ++++++ crates/typst-library/src/math/mod.rs | 14 ++++++++------ tests/ref/bugs/block-width-box.png | Bin 0 -> 1683 bytes tests/typ/bugs/block-width-box.typ | 6 ++++++ 5 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 tests/ref/bugs/block-width-box.png create mode 100644 tests/typ/bugs/block-width-box.typ diff --git a/crates/typst-library/src/layout/mod.rs b/crates/typst-library/src/layout/mod.rs index ace5cd6e2..d9e8ec9aa 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::() + && !content.is::() && !content.is::() && !content.is::() && !content.is::() diff --git a/crates/typst-library/src/math/ctx.rs b/crates/typst-library/src/math/ctx.rs index b9aef711c..c992c0ebf 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 { + Ok(boxed + .layout(self.vt, self.outer.chain(&self.local), self.regions)? + .into_frame()) + } + pub fn layout_content(&mut self, content: &Content) -> SourceResult { 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 578064bae..3ae3f23aa 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::() { + let frame = ctx.layout_box(boxed)?; + ctx.push(FrameFragment::new(ctx, frame).with_spaced(true)); + return Ok(()); + } + if let Some(elem) = self.with::() { return elem.layout_math(ctx); } let mut frame = ctx.layout_content(self)?; if !frame.has_baseline() { - if self.is::() { - 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)); diff --git a/tests/ref/bugs/block-width-box.png b/tests/ref/bugs/block-width-box.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb27a5defdcf3959c9f3a731826aaaee1896b03 GIT binary patch literal 1683 zcmZ{jX;9M#0>yLZPws?-gd~ugBqSWUxNm|LZPhAU=;#8q99Anux(?E+8!d7LtJ^L% z3Rt1la0p^KL=hn>Xq!NQ7-&%_8g8L-2m+yHZD)7JFZ<=qZ{Ei@zn8yb+gn%^9R&h` zu+f{@}wW(AT-#U0MeMK`cAoj)~gX*jQg*x7+QjtE-EPi}UmIv$L}^Gc!|D zQ+0&NtE;Q3swyihD=I4VdVN`0SxHGr zadELur_*Y+1qB89`T03HIUC_Ve}t)i4^yp&sqCSuwNT|ssPa{aaydk~6ry+;qF4-8 z%m*vxg5@uQJX(ms{6S0(LHNzF=0w^Gujl$ewfqeAkN!aX4&;YWr0LxuYT zxqGKv+#wg=my7Sp#0HtDT_$St7Txg{wR($Myo9&Bgg3o}&7Q&=o^DN^ZVeu8^&WyB zJOtN01a(ruHL0Lh%CC{~uS)pU5`LA0Un$|~-Fa8sd6(UJ-;25BVs4q3dr8FkR>Zj| z;*^RwB|=WIkbPdr*1562abp*`vHmS!eJx=9OW=Bz?|O#s`X%4BkmsW1x#aU)^0>@g zF7pcx<0OZ1g2T|T8UJK6j428IhLVTA@+)gHJBNMhd61F(v zqe=M9B>Y<>d=wF!n+0GYc5D5Btv^qTI z$l&agUt-_+fQFbmcrn?edlM9m)8=cgwrlGf2Eplg1q`ABV}b2ux|zQ5L2v(iB1Su&3GE^01RMUJ-kmEHyh z&VYBtgevZG+s7JRb^FtyB^QSe!ItmLYDXR9ZMcwt#Af;`HhiCg6Wz?Q)t<}D18Xcb z+C$ef%&=EA!Y>Pwoq*!|?As4}79wPL&9|JbzZsfG-iNKNXP;%4%rE4KbHVAy*0Qde zfLhio8#Vi-F>G3&1}Z;=>>2;~h2>1Z*1{2e8nWD~O36-4)EO8w!7^y`JCJm5#I0B{ ziRTxeReWUMP%%l=5r&4-{@({0G^o z)r#g?$65sOgm(9Pg(GB=qS=ZE;(Nmno^DMW+D#^l9J=k%bZ z+Y(ZF(s7q7c+k;~kG1E|a{uACw8LmWB^+6piR($bnHpjDkJh(cdrl)ZRYlINoILlT z+D{{Xwuw>PUBUuoVB1gc|4|8C95)1fcfjG4bDZ<_on^XI*XjCtt`xb&%3g=V!1 zui@F2)|yDX6)ml{-aY