Commit f62e2a94 authored by Xidorn Quan's avatar Xidorn Quan
Browse files

Bug 1406552 - Only update max ascent / descent with em ones when ascent and...

Bug 1406552 - Only update max ascent / descent with em ones when ascent and descent are zero. r=jfkthame

The original code was added in bug 385263 for fixing bug 279032 that a
single font provides zero for max ascent / descent in its HHEA table
which caused Firefox to crash.

Unconditionally picking the maximum of max ascent / descent and their
em correspondents doesn't seem to be essential for working around that
case, so this patch changes it to just use the em ascent / descent when
both max ascent and descent are zero.

This fixes a webcompat problem related to Roboto font on Linux (and
presumably also Android given it uses FreeType backend as well).

MozReview-Commit-ID: EpKrfiOwnZt

--HG--
extra : rebase_source : 0619abf992fb1e1a1f3068ab172880913ebff1f1
parent 735caca3
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -317,18 +317,14 @@ gfxFT2FontBase::InitMetrics()
        // If the OS/2 fsSelection USE_TYPO_METRICS bit is set,
        // set maxAscent/Descent from the sTypo* fields instead of hhea.
        const uint16_t kUseTypoMetricsMask = 1 << 7;
        if (os2->fsSelection & kUseTypoMetricsMask) {
            mMetrics.maxAscent = NS_round(mMetrics.emAscent);
            mMetrics.maxDescent = NS_round(mMetrics.emDescent);
        } else {
        if ((os2->fsSelection & kUseTypoMetricsMask) ||
            // maxAscent/maxDescent get used for frame heights, and some fonts
            // don't have the HHEA table ascent/descent set (bug 279032).
	    (mMetrics.maxAscent == 0.0 && mMetrics.maxDescent == 0.0)) {
            // We use NS_round here to parallel the pixel-rounded values that
            // freetype gives us for ftMetrics.ascender/descender.
            mMetrics.maxAscent =
                std::max(mMetrics.maxAscent, NS_round(mMetrics.emAscent));
            mMetrics.maxDescent =
                std::max(mMetrics.maxDescent, NS_round(mMetrics.emDescent));
            mMetrics.maxAscent = NS_round(mMetrics.emAscent);
            mMetrics.maxDescent = NS_round(mMetrics.emDescent);
        }
    } else {
        mMetrics.emAscent = mMetrics.maxAscent;
+1 −1
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ load 486974-1.html
# Tests for bug 523717
== underline-offset-change-1.html underline-offset-change-1-ref.html
== underline-offset-change-2.html underline-offset-change-2-ref.html
fails-if(cocoaWidget||winWidget) != underline-offset-change-1-ref.html underline-offset-change-2-ref.html # Bug 534132
fails != underline-offset-change-1-ref.html underline-offset-change-2-ref.html # Bug 534132

!= 534352-1-extra-cmap-sentinel.html 534352-1-extra-cmap-sentinel-ref.html
== bug533251.html bug533251-ref.html
+0 −2
Original line number Diff line number Diff line
[padding-em-inherit-001.xht]
  expected: FAIL