diff options
author | Hal Canary <halcanary@google.com> | 2017-11-09 11:09:34 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-11-09 20:54:37 +0000 |
commit | 4a851ca334caac5e60606dbeb9ef6de77b34e24d (patch) | |
tree | 3422da4bc9a6ad97064503811ba65162309f5746 /src | |
parent | f0da70699891bd3c6948d821fa43e0f48983e39e (diff) |
SkTypeface_win_dw, SkTypeface_Mac: set NotEmbeddable_FontFlag
BUG=skia:7275
BUG=skia:7276
Change-Id: I5376c39ddc3e9fcb1c8cb76001f3969b84bb2c96
Reviewed-on: https://skia-review.googlesource.com/69360
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/ports/SkFontHost_mac.cpp | 8 | ||||
-rw-r--r-- | src/ports/SkTypeface_win_dw.cpp | 2 | ||||
-rw-r--r-- | src/sfnt/SkOTUtils.cpp | 24 | ||||
-rw-r--r-- | src/sfnt/SkOTUtils.h | 5 |
4 files changed, 35 insertions, 4 deletions
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp index 57a37a11f7..5e753aebcf 100644 --- a/src/ports/SkFontHost_mac.cpp +++ b/src/ports/SkFontHost_mac.cpp @@ -1516,6 +1516,14 @@ std::unique_ptr<SkAdvancedTypefaceMetrics> SkTypeface_Mac::onGetAdvancedMetrics( populate_glyph_to_unicode(ctFont.get(), glyphCount, &info->fGlyphToUnicode); + SkOTTableOS2_V4::Type fsType; + if (sizeof(fsType) == this->getTableData(SkTEndian_SwapBE32(SkOTTableOS2::TAG), + offsetof(SkOTTableOS2_V4, fsType), + sizeof(fsType), + &fsType)) { + SkOTUtils::SetAdvanvedTypefaceFlags(fsType, info.get()); + } + // If it's not a truetype font, mark it as 'other'. Assume that TrueType // fonts always have both glyf and loca tables. At the least, this is what // sfntly needs to subset the font. CTFontCopyAttribute() does not always diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp index 02f02d678f..3dcaa921c2 100644 --- a/src/ports/SkTypeface_win_dw.cpp +++ b/src/ports/SkTypeface_win_dw.cpp @@ -372,6 +372,8 @@ std::unique_ptr<SkAdvancedTypefaceMetrics> DWriteFontTypeface::onGetAdvancedMetr return info; } + SkOTUtils::SetAdvanvedTypefaceFlags(os2Table->version.v4.fsType, info.get()); + // There are versions of DirectWrite which support named instances for system variation fonts, // but no means to indicate that such a typeface is a variation. AutoTDWriteTable<SkOTTableFontVariations> fvarTable(fDWriteFontFace.get()); diff --git a/src/sfnt/SkOTUtils.cpp b/src/sfnt/SkOTUtils.cpp index 4d8c023ea4..3a16dde8b0 100644 --- a/src/sfnt/SkOTUtils.cpp +++ b/src/sfnt/SkOTUtils.cpp @@ -5,14 +5,16 @@ * found in the LICENSE file. */ +#include "SkOTUtils.h" + +#include "SkAdvancedTypefaceMetrics.h" #include "SkData.h" #include "SkEndian.h" -#include "SkSFNTHeader.h" -#include "SkStream.h" +#include "SkOTTableTypes.h" #include "SkOTTable_head.h" #include "SkOTTable_name.h" -#include "SkOTTableTypes.h" -#include "SkOTUtils.h" +#include "SkSFNTHeader.h" +#include "SkStream.h" extern const uint8_t SK_OT_GlyphData_NoOutline[] = { 0x0,0x0, //SkOTTableGlyphData::numberOfContours @@ -201,3 +203,17 @@ SkOTUtils::LocalizedStrings_NameTable::familyNameTypes[3] = { SkOTTableName::Record::NameID::Predefined::PreferredFamily, SkOTTableName::Record::NameID::Predefined::WWSFamilyName, }; + +void SkOTUtils::SetAdvanvedTypefaceFlags(SkOTTableOS2_V4::Type fsType, + SkAdvancedTypefaceMetrics* info) { + SkASSERT(info); + // The logic should be identical to SkTypeface_FreeType::onGetAdvancedMetrics(). + if (fsType.raw.value != 0) { + if (SkToBool(fsType.field.Restricted) || SkToBool(fsType.field.Bitmap)) { + info->fFlags |= SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag; + } + if (SkToBool(fsType.field.NoSubsetting)) { + info->fFlags |= SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag; + } + } +} diff --git a/src/sfnt/SkOTUtils.h b/src/sfnt/SkOTUtils.h index 4708a7bb78..26e6e61c21 100644 --- a/src/sfnt/SkOTUtils.h +++ b/src/sfnt/SkOTUtils.h @@ -9,11 +9,13 @@ #define SkOTUtils_DEFINED #include "SkOTTableTypes.h" +#include "SkOTTable_OS_2_V4.h" #include "SkOTTable_name.h" #include "SkTypeface.h" class SkData; class SkStream; +struct SkAdvancedTypefaceMetrics; struct SkOTUtils { /** @@ -86,6 +88,9 @@ struct SkOTUtils { SkString fLanguage; bool fHasNext; }; + + static void SetAdvanvedTypefaceFlags(SkOTTableOS2_V4::Type fsType, + SkAdvancedTypefaceMetrics* info); }; #endif |