diff options
author | Hal Canary <halcanary@google.com> | 2018-04-10 11:27:48 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-09 14:24:45 +0000 |
commit | 1c2bcd8b14e029a70e88b1e81acd29553cab0d1c (patch) | |
tree | 723a0c85100bcb59590bd2e46fc5eb5c10472406 /src/ports/SkFontHost_FreeType.cpp | |
parent | a2595f925596aca234d4ac4e35da689ef13cc27c (diff) |
SkAdvancedTypefaceMetrics: factor out GlyphToUnicode
Change-Id: Iedce8c1ea2c405d5ab64ccac353970d5cd2b9d63
Reviewed-on: https://skia-review.googlesource.com/126507
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src/ports/SkFontHost_FreeType.cpp')
-rw-r--r-- | src/ports/SkFontHost_FreeType.cpp | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index f1c1b555f2..3e8e9576dd 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -511,23 +511,6 @@ static bool canSubset(FT_Face face) { return (fsType & FT_FSTYPE_NO_SUBSETTING) == 0; } -static void populate_glyph_to_unicode(FT_Face& face, SkTDArray<SkUnichar>* glyphToUnicode) { - FT_Long numGlyphs = face->num_glyphs; - glyphToUnicode->setCount(SkToInt(numGlyphs)); - sk_bzero(glyphToUnicode->begin(), sizeof((*glyphToUnicode)[0]) * numGlyphs); - - FT_UInt glyphIndex; - SkUnichar charCode = FT_Get_First_Char(face, &glyphIndex); - while (glyphIndex) { - SkASSERT(glyphIndex < SkToUInt(numGlyphs)); - // Use the first character that maps to this glyphID. https://crbug.com/359065 - if (0 == (*glyphToUnicode)[glyphIndex]) { - (*glyphToUnicode)[glyphIndex] = charCode; - } - charCode = FT_Get_Next_Char(face, charCode, &glyphIndex); - } -} - static SkAdvancedTypefaceMetrics::FontType get_font_type(FT_Face face) { const char* fontType = FT_Get_X11_Font_Format(face); static struct { const char* s; SkAdvancedTypefaceMetrics::FontType t; } values[] = { @@ -602,17 +585,26 @@ std::unique_ptr<SkAdvancedTypefaceMetrics> SkTypeface_FreeType::onGetAdvancedMet } info->fBBox = SkIRect::MakeLTRB(face->bbox.xMin, face->bbox.yMax, face->bbox.xMax, face->bbox.yMin); + return info; +} - bool perGlyphInfo = FT_IS_SCALABLE(face); +void SkTypeface_FreeType::getGlyphToUnicodeMap(SkUnichar* dstArray) const { + SkASSERT(dstArray); + AutoFTAccess fta(this); + FT_Face face = fta.face(); + FT_Long numGlyphs = face->num_glyphs; + sk_bzero(dstArray, sizeof(SkUnichar) * numGlyphs); - if (perGlyphInfo && - info->fType != SkAdvancedTypefaceMetrics::kType1_Font && - face->num_charmaps) - { - populate_glyph_to_unicode(face, &(info->fGlyphToUnicode)); + FT_UInt glyphIndex; + SkUnichar charCode = FT_Get_First_Char(face, &glyphIndex); + while (glyphIndex) { + SkASSERT(glyphIndex < SkToUInt(numGlyphs)); + // Use the first character that maps to this glyphID. https://crbug.com/359065 + if (0 == dstArray[glyphIndex]) { + dstArray[glyphIndex] = charCode; + } + charCode = FT_Get_Next_Char(face, charCode, &glyphIndex); } - - return info; } void SkTypeface_FreeType::getPostScriptGlyphNames(SkString* dstArray) const { |