summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-06-13 14:06:41 +0200
committerLaurenz <laurmaedje@gmail.com>2022-06-13 14:07:48 +0200
commit2fe549c1ec40681829b59f95a5a2f5db335ec3af (patch)
treee8ba3877342e62f458d4668acf3f2f721d534986
parent7660978ee5d842648e244e2972273264d94ca37b (diff)
Fix inline math formula frame size
-rw-r--r--src/eval/raw.rs6
-rw-r--r--src/library/math/mod.rs2
-rw-r--r--src/library/math/rex.rs15
-rw-r--r--src/model/layout.rs5
-rw-r--r--tests/ref/math/basic.pngbin6554 -> 6554 bytes
-rw-r--r--tests/ref/text/par.pngbin30191 -> 30131 bytes
6 files changed, 19 insertions, 9 deletions
diff --git a/src/eval/raw.rs b/src/eval/raw.rs
index 6545ea5a..ee64b8c4 100644
--- a/src/eval/raw.rs
+++ b/src/eval/raw.rs
@@ -43,6 +43,12 @@ impl RawAlign {
}
}
+impl From<Align> for RawAlign {
+ fn from(align: Align) -> Self {
+ Self::Specific(align)
+ }
+}
+
impl Debug for RawAlign {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
match self {
diff --git a/src/library/math/mod.rs b/src/library/math/mod.rs
index 6ed759b7..1eed89b1 100644
--- a/src/library/math/mod.rs
+++ b/src/library/math/mod.rs
@@ -56,7 +56,7 @@ impl Show for MathNode {
};
Ok(if self.display {
- Content::block(node)
+ Content::block(node.pack().aligned(Spec::with_x(Some(Align::Center.into()))))
} else {
Content::inline(node)
})
diff --git a/src/library/math/rex.rs b/src/library/math/rex.rs
index a8dbd764..a1777372 100644
--- a/src/library/math/rex.rs
+++ b/src/library/math/rex.rs
@@ -58,19 +58,24 @@ impl Layout for RexNode {
// Determine the metrics.
let (x0, y0, x1, y1) = renderer.size(&layout);
let width = Length::pt(x1 - x0);
- let height = Length::pt(y1 - y0);
- let size = Size::new(width, height);
- let baseline = Length::pt(y1);
+ let mut top = Length::pt(y1);
+ let mut bottom = Length::pt(-y0);
+ if !self.display {
+ let metrics = face.metrics();
+ top = styles.get(TextNode::TOP_EDGE).resolve(styles, metrics);
+ bottom = -styles.get(TextNode::BOTTOM_EDGE).resolve(styles, metrics);
+ };
// Prepare a frame rendering backend.
+ let size = Size::new(width, top + bottom);
let mut backend = FrameBackend {
frame: {
let mut frame = Frame::new(size);
- frame.set_baseline(baseline);
+ frame.set_baseline(top);
frame.apply_role(Role::Formula);
frame
},
- baseline,
+ baseline: top,
face_id,
fill: styles.get(TextNode::FILL),
lang: styles.get(TextNode::LANG),
diff --git a/src/model/layout.rs b/src/model/layout.rs
index 22797b48..4fa3fe20 100644
--- a/src/model/layout.rs
+++ b/src/model/layout.rs
@@ -19,10 +19,9 @@ use crate::Context;
/// A node that can be layouted into a sequence of regions.
///
-/// Layout return one frame per used region alongside constraints that define
-/// whether the result is reusable in other regions.
+/// Layouting return one frame per used region.
pub trait Layout: 'static {
- /// Layout this node into the given regions, producing constrained frames.
+ /// Layout this node into the given regions, producing frames.
fn layout(
&self,
ctx: &mut Context,
diff --git a/tests/ref/math/basic.png b/tests/ref/math/basic.png
index ce959662..902354df 100644
--- a/tests/ref/math/basic.png
+++ b/tests/ref/math/basic.png
Binary files differ
diff --git a/tests/ref/text/par.png b/tests/ref/text/par.png
index 18908448..471437a0 100644
--- a/tests/ref/text/par.png
+++ b/tests/ref/text/par.png
Binary files differ