| Index: src/ports/SkFontHost_FreeType.cpp
|
| diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
|
| index cb7ce8028dccd4e92d81b1e8ce63fc3b08c4b438..fce8259a39ce40e8affbd1b5ec1189ddf338555d 100644
|
| --- a/src/ports/SkFontHost_FreeType.cpp
|
| +++ b/src/ports/SkFontHost_FreeType.cpp
|
| @@ -1390,6 +1390,7 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx,
|
|
|
| // pull from format-specific metrics as needed
|
| SkScalar ascent, descent, leading, xmin, xmax, ymin, ymax;
|
| + SkScalar underlineThickness, underlinePosition;
|
| if (face->face_flags & FT_FACE_FLAG_SCALABLE) { // scalable outline font
|
| ascent = -SkIntToScalar(face->ascender) / upem;
|
| descent = -SkIntToScalar(face->descender) / upem;
|
| @@ -1398,6 +1399,17 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx,
|
| xmax = SkIntToScalar(face->bbox.xMax) / upem;
|
| ymin = -SkIntToScalar(face->bbox.yMin) / upem;
|
| ymax = -SkIntToScalar(face->bbox.yMax) / upem;
|
| + underlineThickness = SkIntToScalar(face->underline_thickness) / upem;
|
| + underlinePosition = -SkIntToScalar(face->underline_position) / 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;
|
| + }
|
| // we may be able to synthesize x_height and cap_height from outline
|
| if (!x_height) {
|
| FT_BBox bbox;
|
| @@ -1422,6 +1434,17 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx,
|
| xmax = SkIntToScalar(face->available_sizes[fStrikeIndex].width) / xppem;
|
| ymin = descent + leading;
|
| ymax = ascent - descent;
|
| + 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;
|
| + }
|
| } else {
|
| goto ERROR;
|
| }
|
| @@ -1453,6 +1476,8 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx,
|
| mx->fXMax = xmax;
|
| mx->fXHeight = x_height;
|
| mx->fCapHeight = cap_height;
|
| + mx->fUnderlineThickness = underlineThickness;
|
| + mx->fUnderlinePosition = underlinePosition;
|
| }
|
| if (my) {
|
| my->fTop = ymax * myy;
|
| @@ -1465,6 +1490,8 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* mx,
|
| my->fXMax = xmax;
|
| my->fXHeight = x_height;
|
| my->fCapHeight = cap_height;
|
| + my->fUnderlineThickness = underlineThickness;
|
| + my->fUnderlinePosition = underlinePosition;
|
| }
|
| }
|
|
|
|
|