From 47bb32809a28325d85ed4eb4d1c8750a6baf4121 Mon Sep 17 00:00:00 2001 From: Leedehai <18319900+Leedehai@users.noreply.github.com> Date: Mon, 18 Dec 2023 04:19:55 -0800 Subject: [PATCH] Expand the AttachElement frame so it encompasses its child center_frame (#2968) --- crates/typst/src/layout/frame.rs | 8 ++++---- crates/typst/src/math/attach.rs | 18 +++++++++++------- tests/ref/math/attach-p1.png | Bin 13779 -> 14112 bytes tests/ref/visualize/gradient-math.png | Bin 38184 -> 38218 bytes tests/typ/math/attach-p1.typ | 6 +++++- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/crates/typst/src/layout/frame.rs b/crates/typst/src/layout/frame.rs index d06cd23da..af1fd5d1a 100644 --- a/crates/typst/src/layout/frame.rs +++ b/crates/typst/src/layout/frame.rs @@ -365,13 +365,13 @@ impl Frame { /// Tools for debugging. impl Frame { /// Add a full size aqua background and a red baseline for debugging. - pub fn debug(mut self) -> Self { - self.debug_in_place(); + pub fn mark_box(mut self) -> Self { + self.mark_box_in_place(); self } - /// Debug in place. - pub fn debug_in_place(&mut self) { + /// Debug in place. Add a full size aqua background and a red baseline for debugging. + pub fn mark_box_in_place(&mut self) { self.insert( 0, Point::zero(), diff --git a/crates/typst/src/math/attach.rs b/crates/typst/src/math/attach.rs index 71074edcb..b641c878d 100644 --- a/crates/typst/src/math/attach.rs +++ b/crates/typst/src/math/attach.rs @@ -243,12 +243,12 @@ fn layout_attachments( (base.width(), base.ascent(), base.descent()); let base_class = base.class().unwrap_or(MathClass::Normal); - let ascent = base_ascent + let mut ascent = base_ascent .max(shift_up + measure!(tr, ascent)) .max(shift_up + measure!(tl, ascent)) .max(shift_up + measure!(t, height)); - let descent = base_descent + let mut descent = base_descent .max(shift_down + measure!(br, descent)) .max(shift_down + measure!(bl, descent)) .max(shift_down + measure!(b, height)); @@ -257,23 +257,27 @@ fn layout_attachments( let pre_sub_width = measure!(bl, width); let pre_width_dif = pre_sup_width - pre_sub_width; // Could be negative. let pre_width_max = pre_sup_width.max(pre_sub_width); - let post_max_width = + let post_width_max = (sup_delta + measure!(tr, width)).max(sub_delta + measure!(br, width)); let (center_frame, base_offset) = attach_top_and_bottom(ctx, base, t, b); - let base_pos = - Point::new(sup_delta + pre_width_max, ascent - base_ascent - base_offset); if [&tl, &bl, &tr, &br].iter().all(|&e| e.is_none()) { ctx.push(FrameFragment::new(ctx, center_frame).with_class(base_class)); return Ok(()); } + ascent.set_max(center_frame.ascent()); + descent.set_max(center_frame.descent()); + let mut frame = Frame::soft(Size::new( - pre_width_max + base_width + post_max_width + scaled!(ctx, space_after_script), + pre_width_max + base_width + post_width_max + scaled!(ctx, space_after_script), ascent + descent, )); frame.set_baseline(ascent); - frame.push_frame(base_pos, center_frame); + frame.push_frame( + Point::new(sup_delta + pre_width_max, frame.ascent() - base_ascent - base_offset), + center_frame, + ); if let Some(tl) = tl { let pos = diff --git a/tests/ref/math/attach-p1.png b/tests/ref/math/attach-p1.png index 41be1313389f49ef761323869fa4e43a15bf82be..fa610729288c94eb01e98719913fc2c5ed859e52 100644 GIT binary patch literal 14112 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 KP$y>{`M&^lWN#<{ diff --git a/tests/ref/visualize/gradient-math.png b/tests/ref/visualize/gradient-math.png index 825bfc15b97d38380070cef13cdde25aa66515ee..6d9173b59ef82b8fcceff31fcf081734d1c6a032 100644 GIT binary patch delta 12428 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 delta 12440 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 nRwkqnEHM