aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports/SkFontHost_FreeType.cpp
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2017-07-17 15:32:25 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-21 18:59:05 +0000
commit219f3622ba32a1cb6380212a2ec1947513fbfeb9 (patch)
tree3af322eac2f0c6250fd9f5169358f14d6f033e85 /src/ports/SkFontHost_FreeType.cpp
parentf19421961c59ceabfb88a5c5cdf7c7e31a95b015 (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.cpp9
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();
}
///////////////////////////////////////////////////////////////////////////////