diff options
author | Ben Wagner <bungeman@google.com> | 2017-07-17 15:32:25 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-21 18:59:05 +0000 |
commit | 219f3622ba32a1cb6380212a2ec1947513fbfeb9 (patch) | |
tree | 3af322eac2f0c6250fd9f5169358f14d6f033e85 /src/ports/SkFontHost_FreeType.cpp | |
parent | f19421961c59ceabfb88a5c5cdf7c7e31a95b015 (diff) |
Add strikeout font metrics.
This also updates create_test_font so that it can be built, compiles,
and uses SkFontStyle instead of SkTypeface::Style.
BUG=b/63669723
Change-Id: I6eb0f851853f4721cf8e5052255b5b6750c3257f
Reviewed-on: https://skia-review.googlesource.com/24740
Reviewed-by: Cary Clark <caryclark@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src/ports/SkFontHost_FreeType.cpp')
-rw-r--r-- | src/ports/SkFontHost_FreeType.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index ad9746e157..5af6190d91 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -1289,6 +1289,7 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics } FT_Face face = fFace; + metrics->fFlags = 0; // fetch units/EM from "head" table if needed (ie for bitmap fonts) SkScalar upem = SkIntToScalar(face->units_per_EM); @@ -1303,10 +1304,15 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics SkScalar x_height = 0.0f; SkScalar avgCharWidth = 0.0f; SkScalar cap_height = 0.0f; + SkScalar strikeoutThickness, strikeoutPosition; TT_OS2* os2 = (TT_OS2*) FT_Get_Sfnt_Table(face, ft_sfnt_os2); if (os2) { x_height = SkIntToScalar(os2->sxHeight) / upem * fScale.y(); avgCharWidth = SkIntToScalar(os2->xAvgCharWidth) / upem; + strikeoutThickness = SkIntToScalar(os2->yStrikeoutSize) / upem; + strikeoutPosition = -SkIntToScalar(os2->yStrikeoutPosition) / upem; + metrics->fFlags |= SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag; + metrics->fFlags |= SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag; if (os2->version != 0xFFFF && os2->version >= 2) { cap_height = SkIntToScalar(os2->sCapHeight) / upem * fScale.y(); } @@ -1398,10 +1404,13 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics metrics->fAvgCharWidth = avgCharWidth * fScale.y(); metrics->fXMin = xmin * fScale.y(); metrics->fXMax = xmax * fScale.y(); + metrics->fMaxCharWidth = metrics->fXMax - metrics->fXMin; metrics->fXHeight = x_height; metrics->fCapHeight = cap_height; metrics->fUnderlineThickness = underlineThickness * fScale.y(); metrics->fUnderlinePosition = underlinePosition * fScale.y(); + metrics->fStrikeoutThickness = strikeoutThickness * fScale.y(); + metrics->fStrikeoutPosition = strikeoutPosition * fScale.y(); } /////////////////////////////////////////////////////////////////////////////// |