From 286130b051430045d43d8a5917cb36f2f8f9b8cf Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Wed, 17 Feb 2016 09:42:21 +1000 Subject: [PATCH] Ensure when calculating font metrics that the total line height matches requested line height. This fixes rounding accuracy issues that could result in layout producing results off by a small number of Au. --- components/layout/inline.rs | 9 +++++++-- .../html/transform-input-017.htm.ini | 5 ----- .../html/transform-input-018.htm.ini | 4 +++- .../css21_dev/html4/position-relative-035.htm.ini | 4 +++- 4 files changed, 13 insertions(+), 9 deletions(-) delete mode 100644 tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-017.htm.ini 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, } } diff --git a/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-017.htm.ini b/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-017.htm.ini deleted file mode 100644 index 2fbc2d5d73d..00000000000 --- a/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-017.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[transform-input-017.htm] - type: reftest - expected: - if os == "linux": PASS - FAIL diff --git a/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-018.htm.ini b/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-018.htm.ini index 23299ad9e96..1c005ae8a57 100644 --- a/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-018.htm.ini +++ b/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-input-018.htm.ini @@ -1,3 +1,5 @@ [transform-input-018.htm] type: reftest - expected: FAIL + expected: + if os == "mac": PASS + FAIL diff --git a/tests/wpt/metadata-css/css21_dev/html4/position-relative-035.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/position-relative-035.htm.ini index 9cb4b4c28f7..5587e47e1bc 100644 --- a/tests/wpt/metadata-css/css21_dev/html4/position-relative-035.htm.ini +++ b/tests/wpt/metadata-css/css21_dev/html4/position-relative-035.htm.ini @@ -1,3 +1,5 @@ [position-relative-035.htm] type: reftest - expected: FAIL + expected: + if os == "linux": PASS + FAIL