| Index: src/ports/SkFontHost_win.cpp
|
| diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
|
| index a6ccf4d2ee37f0f90f024fe46d2ac2d021e878da..e4aab81b150aa73f2bec05c2c71316bb7b3fcec6 100755
|
| --- a/src/ports/SkFontHost_win.cpp
|
| +++ b/src/ports/SkFontHost_win.cpp
|
| @@ -559,8 +559,7 @@ protected:
|
| virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
|
| virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
|
| virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
|
| - virtual void generateFontMetrics(SkPaint::FontMetrics* mX,
|
| - SkPaint::FontMetrics* mY) SK_OVERRIDE;
|
| + virtual void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
|
|
|
| private:
|
| DWORD getGDIGlyphPath(const SkGlyph& glyph, UINT flags,
|
| @@ -978,43 +977,27 @@ void SkScalerContext_GDI::generateMetrics(SkGlyph* glyph) {
|
| }
|
|
|
| static const MAT2 gMat2Identity = {{0, 1}, {0, 0}, {0, 0}, {0, 1}};
|
| -void SkScalerContext_GDI::generateFontMetrics(SkPaint::FontMetrics* mx, SkPaint::FontMetrics* my) {
|
| - if (!(mx || my)) {
|
| - return;
|
| - }
|
| -
|
| - if (mx) {
|
| - sk_bzero(mx, sizeof(*mx));
|
| - }
|
| - if (my) {
|
| - sk_bzero(my, sizeof(*my));
|
| +void SkScalerContext_GDI::generateFontMetrics(SkPaint::FontMetrics* metrics) {
|
| + if (NULL == metrics) {
|
| + return;
|
| }
|
| + sk_bzero(metrics, sizeof(*metrics));
|
|
|
| SkASSERT(fDDC);
|
|
|
| #ifndef SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS
|
| if (fType == SkScalerContext_GDI::kBitmap_Type || fType == SkScalerContext_GDI::kLine_Type) {
|
| #endif
|
| - if (mx) {
|
| - mx->fTop = SkIntToScalar(-fTM.tmAscent);
|
| - mx->fAscent = SkIntToScalar(-fTM.tmAscent);
|
| - mx->fDescent = SkIntToScalar(fTM.tmDescent);
|
| - mx->fBottom = SkIntToScalar(fTM.tmDescent);
|
| - mx->fLeading = SkIntToScalar(fTM.tmExternalLeading);
|
| - }
|
| -
|
| - if (my) {
|
| - my->fTop = SkIntToScalar(-fTM.tmAscent);
|
| - my->fAscent = SkIntToScalar(-fTM.tmAscent);
|
| - my->fDescent = SkIntToScalar(fTM.tmDescent);
|
| - my->fBottom = SkIntToScalar(fTM.tmDescent);
|
| - my->fLeading = SkIntToScalar(fTM.tmExternalLeading);
|
| - my->fAvgCharWidth = SkIntToScalar(fTM.tmAveCharWidth);
|
| - my->fMaxCharWidth = SkIntToScalar(fTM.tmMaxCharWidth);
|
| - my->fXMin = 0;
|
| - my->fXMax = my->fMaxCharWidth;
|
| - //my->fXHeight = 0;
|
| - }
|
| + metrics->fTop = SkIntToScalar(-fTM.tmAscent);
|
| + metrics->fAscent = SkIntToScalar(-fTM.tmAscent);
|
| + metrics->fDescent = SkIntToScalar(fTM.tmDescent);
|
| + metrics->fBottom = SkIntToScalar(fTM.tmDescent);
|
| + metrics->fLeading = SkIntToScalar(fTM.tmExternalLeading);
|
| + metrics->fAvgCharWidth = SkIntToScalar(fTM.tmAveCharWidth);
|
| + metrics->fMaxCharWidth = SkIntToScalar(fTM.tmMaxCharWidth);
|
| + metrics->fXMin = 0;
|
| + metrics->fXMax = metrics->fMaxCharWidth;
|
| + //metrics->fXHeight = 0;
|
| #ifndef SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS
|
| return;
|
| }
|
| @@ -1031,45 +1014,29 @@ void SkScalerContext_GDI::generateFontMetrics(SkPaint::FontMetrics* mx, SkPaint:
|
| return;
|
| }
|
|
|
| - if (mx) {
|
| - mx->fTop = SkIntToScalar(-otm.otmrcFontBox.left);
|
| - mx->fAscent = SkIntToScalar(-otm.otmAscent);
|
| - mx->fDescent = SkIntToScalar(-otm.otmDescent);
|
| - mx->fBottom = SkIntToScalar(otm.otmrcFontBox.right);
|
| - mx->fLeading = SkIntToScalar(otm.otmLineGap);
|
| - mx->fUnderlineThickness = SkIntToScalar(otm.otmsUnderscoreSize);
|
| - mx->fUnderlinePosition = -SkIntToScalar(otm.otmsUnderscorePosition);
|
| -
|
| - mx->fFlags |= SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag;
|
| - mx->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
|
| - }
|
| -
|
| - if (my) {
|
| #ifndef SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS
|
| - my->fTop = SkIntToScalar(-otm.otmrcFontBox.top);
|
| - my->fAscent = SkIntToScalar(-otm.otmAscent);
|
| - my->fDescent = SkIntToScalar(-otm.otmDescent);
|
| - my->fBottom = SkIntToScalar(-otm.otmrcFontBox.bottom);
|
| - my->fLeading = SkIntToScalar(otm.otmLineGap);
|
| - my->fAvgCharWidth = SkIntToScalar(otm.otmTextMetrics.tmAveCharWidth);
|
| - my->fMaxCharWidth = SkIntToScalar(otm.otmTextMetrics.tmMaxCharWidth);
|
| - my->fXMin = SkIntToScalar(otm.otmrcFontBox.left);
|
| - my->fXMax = SkIntToScalar(otm.otmrcFontBox.right);
|
| + metrics->fTop = SkIntToScalar(-otm.otmrcFontBox.top);
|
| + metrics->fAscent = SkIntToScalar(-otm.otmAscent);
|
| + metrics->fDescent = SkIntToScalar(-otm.otmDescent);
|
| + metrics->fBottom = SkIntToScalar(-otm.otmrcFontBox.bottom);
|
| + metrics->fLeading = SkIntToScalar(otm.otmLineGap);
|
| + metrics->fAvgCharWidth = SkIntToScalar(otm.otmTextMetrics.tmAveCharWidth);
|
| + metrics->fMaxCharWidth = SkIntToScalar(otm.otmTextMetrics.tmMaxCharWidth);
|
| + metrics->fXMin = SkIntToScalar(otm.otmrcFontBox.left);
|
| + metrics->fXMax = SkIntToScalar(otm.otmrcFontBox.right);
|
| #endif
|
| - my->fUnderlineThickness = SkIntToScalar(otm.otmsUnderscoreSize);
|
| - my->fUnderlinePosition = -SkIntToScalar(otm.otmsUnderscorePosition);
|
| -
|
| - my->fFlags |= SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag;
|
| - my->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
|
| + metrics->fUnderlineThickness = SkIntToScalar(otm.otmsUnderscoreSize);
|
| + metrics->fUnderlinePosition = -SkIntToScalar(otm.otmsUnderscorePosition);
|
|
|
| - my->fXHeight = SkIntToScalar(otm.otmsXHeight);
|
| + metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag;
|
| + metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
|
|
|
| - GLYPHMETRICS gm;
|
| - sk_bzero(&gm, sizeof(gm));
|
| - DWORD len = GetGlyphOutlineW(fDDC, 'x', GGO_METRICS, &gm, 0, 0, &gMat2Identity);
|
| - if (len != GDI_ERROR && gm.gmBlackBoxY > 0) {
|
| - my->fXHeight = SkIntToScalar(gm.gmBlackBoxY);
|
| - }
|
| + metrics->fXHeight = SkIntToScalar(otm.otmsXHeight);
|
| + GLYPHMETRICS gm;
|
| + sk_bzero(&gm, sizeof(gm));
|
| + DWORD len = GetGlyphOutlineW(fDDC, 'x', GGO_METRICS, &gm, 0, 0, &gMat2Identity);
|
| + if (len != GDI_ERROR && gm.gmBlackBoxY > 0) {
|
| + metrics->fXHeight = SkIntToScalar(gm.gmBlackBoxY);
|
| }
|
| }
|
|
|
| @@ -2409,7 +2376,8 @@ void LogFontTypeface::onFilterRec(SkScalerContextRec* rec) const {
|
| rec->fFlags |= SkScalerContext::kGenA8FromLCD_Flag;
|
| }
|
|
|
| - unsigned flagsWeDontSupport = SkScalerContext::kDevKernText_Flag |
|
| + unsigned flagsWeDontSupport = SkScalerContext::kVertical_Flag |
|
| + SkScalerContext::kDevKernText_Flag |
|
| SkScalerContext::kForceAutohinting_Flag |
|
| SkScalerContext::kEmbeddedBitmapText_Flag |
|
| SkScalerContext::kEmbolden_Flag |
|
|
|