diff options
Diffstat (limited to 'components/layout/inline.rs')
-rw-r--r-- | components/layout/inline.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/components/layout/inline.rs b/components/layout/inline.rs index d20fb2224a1..1516fd636eb 100644 --- a/components/layout/inline.rs +++ b/components/layout/inline.rs @@ -1928,9 +1928,14 @@ impl InlineMetrics { #[inline] pub fn from_font_metrics(font_metrics: &FontMetrics, line_height: Au) -> InlineMetrics { let leading = line_height - (font_metrics.ascent + font_metrics.descent); + // Calculating the half leading here and then using leading - half_leading + // below ensure that we don't introduce any rounding accuracy issues here. + // The invariant is that the resulting total line height must exactly + // equal the requested line_height. + let half_leading = leading.scale_by(0.5); InlineMetrics { - block_size_above_baseline: font_metrics.ascent + leading.scale_by(0.5), - depth_below_baseline: font_metrics.descent + leading.scale_by(0.5), + block_size_above_baseline: font_metrics.ascent + half_leading, + depth_below_baseline: font_metrics.descent + leading - half_leading, ascent: font_metrics.ascent, } } |