Index: src/ports/SkFontHost_FreeType.cpp |
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp |
index 12edc49d9e8073aaf09fa97009570db5b643de66..6448beb89b2d265786bc15d19f6ad30b2cd54bfe 100644 |
--- a/src/ports/SkFontHost_FreeType.cpp |
+++ b/src/ports/SkFontHost_FreeType.cpp |
@@ -200,8 +200,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; |
virtual SkUnichar generateGlyphToChar(uint16_t glyph) SK_OVERRIDE; |
private: |
@@ -1372,22 +1371,16 @@ void SkScalerContext_FreeType::generatePath(const SkGlyph& glyph, |
} |
} |
-void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, |
- SkPaint::FontMetrics* my) { |
- if (NULL == mx && NULL == my) { |
+void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics) { |
+ if (NULL == metrics) { |
return; |
} |
- SkAutoMutexAcquire ac(gFTMutex); |
+ SkAutoMutexAcquire ac(gFTMutex); |
if (this->setupSize()) { |
ERROR: |
- if (mx) { |
- sk_bzero(mx, sizeof(SkPaint::FontMetrics)); |
- } |
- if (my) { |
- sk_bzero(my, sizeof(SkPaint::FontMetrics)); |
- } |
+ sk_bzero(metrics, sizeof(*metrics)); |
return; |
} |
@@ -1434,14 +1427,9 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, |
underlinePosition = -SkIntToScalar(face->underline_position + |
face->underline_thickness / 2) / upem; |
- if(mx) { |
- mx->fFlags |= SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag; |
- mx->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag; |
- } |
- if(my){ |
- my->fFlags |= SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag; |
- my->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag; |
- } |
+ metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag; |
+ metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag; |
+ |
// we may be able to synthesize x_height and cap_height from outline |
if (!x_height) { |
FT_BBox bbox; |
@@ -1469,14 +1457,8 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, |
underlineThickness = 0; |
underlinePosition = 0; |
- if(mx) { |
- mx->fFlags &= ~SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag; |
- mx->fFlags &= ~SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag; |
- } |
- if(my){ |
- my->fFlags &= ~SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag; |
- my->fFlags &= ~SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag; |
- } |
+ metrics->fFlags &= ~SkPaint::FontMetrics::kUnderlineThinknessIsValid_Flag; |
+ metrics->fFlags &= ~SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag; |
} else { |
goto ERROR; |
} |
@@ -1497,34 +1479,22 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, |
leading = 0.0f; |
} |
- if (mx) { |
- mx->fTop = ymax * mxy; |
- mx->fAscent = ascent * mxy; |
- mx->fDescent = descent * mxy; |
- mx->fBottom = ymin * mxy; |
- mx->fLeading = leading * mxy; |
- mx->fAvgCharWidth = avgCharWidth * mxy; |
- mx->fXMin = xmin; |
- mx->fXMax = xmax; |
- mx->fXHeight = x_height; |
- mx->fCapHeight = cap_height; |
- mx->fUnderlineThickness = underlineThickness * mxy; |
- mx->fUnderlinePosition = underlinePosition * mxy; |
- } |
- if (my) { |
- my->fTop = ymax * myy; |
- my->fAscent = ascent * myy; |
- my->fDescent = descent * myy; |
- my->fBottom = ymin * myy; |
- my->fLeading = leading * myy; |
- my->fAvgCharWidth = avgCharWidth * myy; |
- my->fXMin = xmin; |
- my->fXMax = xmax; |
- my->fXHeight = x_height; |
- my->fCapHeight = cap_height; |
- my->fUnderlineThickness = underlineThickness * myy; |
- my->fUnderlinePosition = underlinePosition * myy; |
- } |
+ 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; |
+ metrics->fXMax = xmax; |
+ metrics->fXHeight = x_height; |
+ metrics->fCapHeight = cap_height; |
+ metrics->fUnderlineThickness = underlineThickness * scale; |
+ metrics->fUnderlinePosition = underlinePosition * scale; |
} |
void SkScalerContext_FreeType::emboldenIfNeeded(FT_Face face, FT_GlyphSlot glyph) |