| Index: skia/ports/SkFontHost_FreeType.cpp
|
| diff --git a/skia/ports/SkFontHost_FreeType.cpp b/skia/ports/SkFontHost_FreeType.cpp
|
| index 43b6295efdaa2c93685ce149b79da8c4262c5123..3011811778b7a8e6b4f1eb868034f212df8056da 100644
|
| --- a/skia/ports/SkFontHost_FreeType.cpp
|
| +++ b/skia/ports/SkFontHost_FreeType.cpp
|
| @@ -785,8 +785,8 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, SkP
|
| return;
|
| }
|
|
|
| - SkPoint pts[6];
|
| - SkFixed ys[6];
|
| + SkPoint pts[7];
|
| + SkFixed ys[7];
|
| FT_Face face = fFace;
|
| int upem = face->units_per_EM;
|
| SkFixed scaleY = fScaleY;
|
| @@ -797,15 +797,20 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, SkP
|
| if (leading < 0)
|
| leading = 0;
|
|
|
| + // Try to get the OS/2 table from the font. This contains the specific
|
| + // average font width metrics which Windows uses.
|
| + TT_OS2* os2 = (TT_OS2*) FT_Get_Sfnt_Table(face, ft_sfnt_os2);
|
| +
|
| ys[0] = -face->bbox.yMax;
|
| ys[1] = -face->ascender;
|
| ys[2] = -face->descender;
|
| ys[3] = -face->bbox.yMin;
|
| ys[4] = leading;
|
| ys[5] = face->height;
|
| + ys[6] = os2 ? os2->xAvgCharWidth : 0;
|
|
|
| // convert upem-y values into scalar points
|
| - for (int i = 0; i < 6; i++)
|
| + for (int i = 0; i < 7; i++)
|
| {
|
| SkFixed y = SkMulDiv(scaleY, ys[i], upem);
|
| SkFixed x = SkFixedMul(mxy, y);
|
| @@ -821,6 +826,7 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, SkP
|
| mx->fBottom = pts[3].fX;
|
| mx->fLeading = pts[4].fX;
|
| mx->fHeight = pts[5].fX;
|
| + mx->fAvgCharWidth = pts[6].fX;
|
|
|
| // The VDMX metrics only make sense in the horizontal direction
|
| // I believe
|
| @@ -834,6 +840,7 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx, SkP
|
| my->fBottom = pts[3].fY;
|
| my->fLeading = pts[4].fY;
|
| my->fHeight = pts[5].fY;
|
| + my->fAvgCharWidth = pts[6].fY;
|
| my->fVDMXMetricsValid = false;
|
|
|
| // Attempt to parse the VDMX table to get exact metrics
|
|
|