aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports/SkFontHost_FreeType.cpp
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2018-02-20 09:57:58 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-20 20:40:23 +0000
commit5423f1f0c59b43b09ac216966b6af12f08955be7 (patch)
tree2cfa18baf8e61a4e849c235e29ae7e561bd4a29c /src/ports/SkFontHost_FreeType.cpp
parentee78dbe529d91d002b5b6f3889867791860736ba (diff)
Correct font metrics, bitmap glyph metrics and underline.
Correct ScaleFontMetrics to scale all of the metrics. Also update the test fonts, since they were created with the previously unscaled metrics. Fix the ascent, descent, and underline position for bitmap glyphs with FreeType. Change-Id: I8c2f6e9d6a7e86b0bb08dc619f62ffcce4ad2df2 Reviewed-on: https://skia-review.googlesource.com/108600 Commit-Queue: Ben Wagner <bungeman@google.com> Reviewed-by: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/ports/SkFontHost_FreeType.cpp')
-rw-r--r--src/ports/SkFontHost_FreeType.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index e5c6afb14f..b00634d1a8 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -1360,13 +1360,20 @@ void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics
leading = (SkIntToScalar(face->size->metrics.height) / (yppem * 64.0f)) + ascent - descent;
xmin = 0.0f;
xmax = SkIntToScalar(face->available_sizes[fStrikeIndex].width) / xppem;
- ymin = descent + leading;
- ymax = ascent - descent;
+ ymin = descent;
+ ymax = ascent;
underlineThickness = 0;
underlinePosition = 0;
-
metrics->fFlags &= ~SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
metrics->fFlags &= ~SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+
+ TT_Postscript* post = (TT_Postscript*) FT_Get_Sfnt_Table(face, ft_sfnt_post);
+ if (post) {
+ underlineThickness = SkIntToScalar(post->underlineThickness) / upem;
+ underlinePosition = -SkIntToScalar(post->underlinePosition) / upem;
+ metrics->fFlags |= SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag;
+ metrics->fFlags |= SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag;
+ }
} else {
sk_bzero(metrics, sizeof(*metrics));
return;