Index: src/ports/SkFontHost_FreeType.cpp |
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp |
index 45e4eaead8616a4d34c4db6997fdf8cf29804af8..2780a32d09e973b76dd951047b477c5c49c54d0d 100644 |
--- a/src/ports/SkFontHost_FreeType.cpp |
+++ b/src/ports/SkFontHost_FreeType.cpp |
@@ -1315,10 +1315,6 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics |
} |
FT_Face face = fFace; |
- SkScalar scaleX = fScale.x(); |
- SkScalar scaleY = fScale.y(); |
- SkScalar mxy = -fMatrix22Scalar.getSkewX() * scaleY; |
- SkScalar myy = fMatrix22Scalar.getScaleY() * scaleY; |
// fetch units/EM from "head" table if needed (ie for bitmap fonts) |
SkScalar upem = SkIntToScalar(face->units_per_EM); |
@@ -1335,10 +1331,10 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics |
SkScalar cap_height = 0.0f; |
TT_OS2* os2 = (TT_OS2*) FT_Get_Sfnt_Table(face, ft_sfnt_os2); |
if (os2) { |
- x_height = scaleX * SkIntToScalar(os2->sxHeight) / upem; |
+ x_height = SkIntToScalar(os2->sxHeight) / upem * fScale.y(); |
avgCharWidth = SkIntToScalar(os2->xAvgCharWidth) / upem; |
if (os2->version != 0xFFFF && os2->version >= 2) { |
- cap_height = scaleX * SkIntToScalar(os2->sCapHeight) / upem; |
+ cap_height = SkIntToScalar(os2->sCapHeight) / upem * fScale.y(); |
} |
} |
@@ -1389,8 +1385,7 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics |
SkScalar yppem = SkIntToScalar(face->size->metrics.y_ppem); |
ascent = -SkIntToScalar(face->size->metrics.ascender) / (yppem * 64.0f); |
descent = -SkIntToScalar(face->size->metrics.descender) / (yppem * 64.0f); |
- leading = (SkIntToScalar(face->size->metrics.height) / (yppem * 64.0f)) |
- + ascent - descent; |
+ leading = (SkIntToScalar(face->size->metrics.height) / (yppem * 64.0f)) + ascent - descent; |
xmin = 0.0f; |
xmax = SkIntToScalar(face->available_sizes[fStrikeIndex].width) / xppem; |
ymin = descent + leading; |
@@ -1407,13 +1402,13 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics |
// synthesize elements that were not provided by the os/2 table or format-specific metrics |
if (!x_height) { |
- x_height = -ascent; |
+ x_height = -ascent * fScale.y(); |
} |
if (!avgCharWidth) { |
avgCharWidth = xmax - xmin; |
} |
if (!cap_height) { |
- cap_height = -ascent; |
+ cap_height = -ascent * fScale.y(); |
} |
// disallow negative linespacing |
@@ -1421,22 +1416,18 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics |
leading = 0.0f; |
} |
- SkScalar scale = myy; |
- if (this->isVertical()) { |
- scale = mxy; |
- } |
- metrics->fTop = ymax * scale; |
- metrics->fAscent = ascent * scale; |
- metrics->fDescent = descent * scale; |
- metrics->fBottom = ymin * scale; |
- metrics->fLeading = leading * scale; |
- metrics->fAvgCharWidth = avgCharWidth * scale; |
- metrics->fXMin = xmin * scale; |
- metrics->fXMax = xmax * scale; |
+ metrics->fTop = ymax * fScale.y(); |
+ metrics->fAscent = ascent * fScale.y(); |
+ metrics->fDescent = descent * fScale.y(); |
+ metrics->fBottom = ymin * fScale.y(); |
+ metrics->fLeading = leading * fScale.y(); |
+ metrics->fAvgCharWidth = avgCharWidth * fScale.y(); |
+ metrics->fXMin = xmin * fScale.y(); |
+ metrics->fXMax = xmax * fScale.y(); |
metrics->fXHeight = x_height; |
metrics->fCapHeight = cap_height; |
- metrics->fUnderlineThickness = underlineThickness * scale; |
- metrics->fUnderlinePosition = underlinePosition * scale; |
+ metrics->fUnderlineThickness = underlineThickness * fScale.y(); |
+ metrics->fUnderlinePosition = underlinePosition * fScale.y(); |
} |
/////////////////////////////////////////////////////////////////////////////// |