Bug 1293210 - get cap height from DirectWrite backend. draft
authorJeremy Chen <jeremychen@mozilla.com>
Thu, 18 Aug 2016 17:43:54 +0800
changeset 402510 31b7bdf2c96ab250aad70e3a3f5381372560f17c
parent 402509 6bbcafc1ae49f453cffd6182023791bc37f2b825
child 402511 30c3a4ce688551cf6578cc4efc76a349d9304329
push id26677
push userjichen@mozilla.com
push dateThu, 18 Aug 2016 09:44:38 +0000
bugs1293210
milestone51.0a1
Bug 1293210 - get cap height from DirectWrite backend. MozReview-Commit-ID: KC45V4pZZU1
gfx/thebes/gfxDWriteFonts.cpp
--- a/gfx/thebes/gfxDWriteFonts.cpp
+++ b/gfx/thebes/gfxDWriteFonts.cpp
@@ -211,16 +211,17 @@ gfxDWriteFont::ComputeMetrics(AntialiasO
     }
 
     mMetrics = new gfxFont::Metrics;
     ::memset(mMetrics, 0, sizeof(*mMetrics));
 
     mFUnitsConvFactor = float(mAdjustedSize / fontMetrics.designUnitsPerEm);
 
     mMetrics->xHeight = fontMetrics.xHeight * mFUnitsConvFactor;
+    mMetrics->capHeight = fontMetrics.capHeight * mFUnitsConvFactor;
 
     mMetrics->maxAscent = ceil(fontMetrics.ascent * mFUnitsConvFactor);
     mMetrics->maxDescent = ceil(fontMetrics.descent * mFUnitsConvFactor);
     mMetrics->maxHeight = mMetrics->maxAscent + mMetrics->maxDescent;
 
     mMetrics->emHeight = mAdjustedSize;
     mMetrics->emAscent = mMetrics->emHeight *
         mMetrics->maxAscent / mMetrics->maxHeight;
@@ -306,18 +307,19 @@ gfxDWriteFont::ComputeMetrics(AntialiasO
     SanitizeMetrics(mMetrics, GetFontEntry()->mIsBadUnderlineFont);
 
 #if 0
     printf("Font: %p (%s) size: %f\n", this,
            NS_ConvertUTF16toUTF8(GetName()).get(), mStyle.size);
     printf("    emHeight: %f emAscent: %f emDescent: %f\n", mMetrics->emHeight, mMetrics->emAscent, mMetrics->emDescent);
     printf("    maxAscent: %f maxDescent: %f maxAdvance: %f\n", mMetrics->maxAscent, mMetrics->maxDescent, mMetrics->maxAdvance);
     printf("    internalLeading: %f externalLeading: %f\n", mMetrics->internalLeading, mMetrics->externalLeading);
-    printf("    spaceWidth: %f aveCharWidth: %f zeroOrAve: %f xHeight: %f\n",
-           mMetrics->spaceWidth, mMetrics->aveCharWidth, mMetrics->zeroOrAveCharWidth, mMetrics->xHeight);
+    printf("    spaceWidth: %f aveCharWidth: %f zeroOrAve: %f\n",
+           mMetrics->spaceWidth, mMetrics->aveCharWidth, mMetrics->zeroOrAveCharWidth);
+    printf("    xHeight: %f capHeight: %f\n", mMetrics->xHeight, mMetrics->capHeight);
     printf("    uOff: %f uSize: %f stOff: %f stSize: %f\n",
            mMetrics->underlineOffset, mMetrics->underlineSize, mMetrics->strikeoutOffset, mMetrics->strikeoutSize);
 #endif
 }
 
 using namespace mozilla; // for AutoSwap_* types
 
 struct EBLCHeader {