diff options
author | Ben Wagner <bungeman@google.com> | 2018-03-29 11:18:06 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-04-05 22:37:33 +0000 |
commit | 5ddb30862509967eca24ba3831cc11ed5396eee7 (patch) | |
tree | 85e8919cee2be60a66581b137ef861d783c583f4 /src/ports/SkFontHost_FreeType.cpp | |
parent | b45aac961db511e805525c6d32125e8958983ab4 (diff) |
Distinguish between glyphs with empty path and no path.
BUG=skia:4904
Change-Id: I065e3b4d8596b415ddaf094d7f9a4b65da64d4d4
Reviewed-on: https://skia-review.googlesource.com/117280
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'src/ports/SkFontHost_FreeType.cpp')
-rw-r--r-- | src/ports/SkFontHost_FreeType.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index ddb9c13aa5..4c4c6d4f65 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -460,7 +460,7 @@ protected: void generateAdvance(SkGlyph* glyph) override; void generateMetrics(SkGlyph* glyph) override; void generateImage(const SkGlyph& glyph) override; - void generatePath(SkGlyphID glyphID, SkPath* path) override; + bool generatePath(SkGlyphID glyphID, SkPath* path) override; void generateFontMetrics(SkPaint::FontMetrics*) override; SkUnichar generateGlyphToChar(uint16_t glyph) override; @@ -1232,14 +1232,14 @@ void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) { } -void SkScalerContext_FreeType::generatePath(SkGlyphID glyphID, SkPath* path) { - SkAutoMutexAcquire ac(gFTMutex); - +bool SkScalerContext_FreeType::generatePath(SkGlyphID glyphID, SkPath* path) { SkASSERT(path); + SkAutoMutexAcquire ac(gFTMutex); + if (this->setupSize()) { path->reset(); - return; + return false; } uint32_t flags = fLoadGlyphFlags; @@ -1247,16 +1247,16 @@ void SkScalerContext_FreeType::generatePath(SkGlyphID glyphID, SkPath* path) { flags &= ~FT_LOAD_RENDER; // don't scan convert (we just want the outline) FT_Error err = FT_Load_Glyph(fFace, glyphID, flags); - if (err != 0) { - SK_TRACEFTR(err, "SkScalerContext_FreeType::generatePath: FT_Load_Glyph(glyph:%d " - "flags:%d) failed.", glyphID, flags); path->reset(); - return; + return false; } emboldenIfNeeded(fFace, fFace->glyph, glyphID); - generateGlyphPath(fFace, path); + if (!generateGlyphPath(fFace, path)) { + path->reset(); + return false; + } // The path's origin from FreeType is always the horizontal layout origin. // Offset the path so that it is relative to the vertical origin if needed. @@ -1267,6 +1267,7 @@ void SkScalerContext_FreeType::generatePath(SkGlyphID glyphID, SkPath* path) { FT_Vector_Transform(&vector, &fMatrix22); path->offset(SkFDot6ToScalar(vector.x), -SkFDot6ToScalar(vector.y)); } + return true; } void SkScalerContext_FreeType::generateFontMetrics(SkPaint::FontMetrics* metrics) { |