Index: src/ports/SkFontHost_FreeType.cpp |
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp |
index 134cc052be52291b83c6ec957e38425a494d495f..fd87a66dc6a8f8d9da40fb993c459e8d4e52a966 100644 |
--- a/src/ports/SkFontHost_FreeType.cpp |
+++ b/src/ports/SkFontHost_FreeType.cpp |
@@ -411,20 +411,6 @@ static bool canEmbed(FT_Face face) { |
#endif |
} |
-static bool canSubset(FT_Face face) { |
-#ifdef FT_FSTYPE_NO_SUBSETTING |
- FT_UShort fsType = FT_Get_FSType_Flags(face); |
- return (fsType & FT_FSTYPE_NO_SUBSETTING) == 0; |
-#else |
- // No subset is 0x100. |
- TT_OS2* os2_table; |
- if ((os2_table = (TT_OS2*)FT_Get_Sfnt_Table(face, ft_sfnt_os2)) != NULL) { |
- return (os2_table->fsType & 0x100) == 0; |
- } |
- return false; // We tried, fail safe. |
-#endif |
-} |
- |
static bool GetLetterCBox(FT_Face face, char letter, FT_BBox* bbox) { |
const FT_UInt glyph_id = FT_Get_Char_Index(face, letter); |
if (!glyph_id) |
@@ -509,21 +495,7 @@ SkAdvancedTypefaceMetrics* SkTypeface_FreeType::onGetAdvancedTypefaceMetrics( |
SkAdvancedTypefaceMetrics* info = new SkAdvancedTypefaceMetrics; |
info->fFontName.set(FT_Get_Postscript_Name(face)); |
- info->fFlags = SkAdvancedTypefaceMetrics::kEmpty_FontFlag; |
- if (FT_HAS_MULTIPLE_MASTERS(face)) { |
- info->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>( |
- info->fFlags, SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag); |
- } |
- if (!canEmbed(face)) { |
- info->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>( |
- info->fFlags, |
- SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag); |
- } |
- if (!canSubset(face)) { |
- info->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>( |
- info->fFlags, |
- SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag); |
- } |
+ info->fMultiMaster = FT_HAS_MULTIPLE_MASTERS(face); |
info->fLastGlyphID = face->num_glyphs - 1; |
info->fEmSize = 1000; |
@@ -616,7 +588,8 @@ SkAdvancedTypefaceMetrics* SkTypeface_FreeType::onGetAdvancedTypefaceMetrics( |
info->fBBox = SkIRect::MakeLTRB(face->bbox.xMin, face->bbox.yMax, |
face->bbox.xMax, face->bbox.yMin); |
- if (!FT_IS_SCALABLE(face)) { |
+ if (!canEmbed(face) || !FT_IS_SCALABLE(face) || |
+ info->fType == SkAdvancedTypefaceMetrics::kOther_Font) { |
perGlyphInfo = SkAdvancedTypefaceMetrics::kNo_PerGlyphInfo; |
} |
@@ -679,6 +652,9 @@ SkAdvancedTypefaceMetrics* SkTypeface_FreeType::onGetAdvancedTypefaceMetrics( |
populate_glyph_to_unicode(face, &(info->fGlyphToUnicode)); |
} |
+ if (!canEmbed(face)) |
+ info->fType = SkAdvancedTypefaceMetrics::kNotEmbeddable_Font; |
+ |
return info; |
#endif |
} |