aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/ports/SkFontHost_mac.cpp2
-rw-r--r--src/ports/SkFontHost_win.cpp20
-rw-r--r--src/ports/SkTypeface_win_dw.cpp2
-rw-r--r--src/sfnt/SkOTUtils.cpp2
-rw-r--r--src/sfnt/SkOTUtils.h2
5 files changed, 19 insertions, 9 deletions
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index 5e753aebcf..ae46664ff6 100644
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -1521,7 +1521,7 @@ std::unique_ptr<SkAdvancedTypefaceMetrics> SkTypeface_Mac::onGetAdvancedMetrics(
offsetof(SkOTTableOS2_V4, fsType),
sizeof(fsType),
&fsType)) {
- SkOTUtils::SetAdvanvedTypefaceFlags(fsType, info.get());
+ SkOTUtils::SetAdvancedTypefaceFlags(fsType, info.get());
}
// If it's not a truetype font, mark it as 'other'. Assume that TrueType
diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp
index 3cf42fd39e..9094d7e2a4 100644
--- a/src/ports/SkFontHost_win.cpp
+++ b/src/ports/SkFontHost_win.cpp
@@ -20,6 +20,7 @@
#include "SkMaskGamma.h"
#include "SkMatrix22.h"
#include "SkOnce.h"
+#include "SkOTTable_OS_2.h"
#include "SkOTTable_maxp.h"
#include "SkOTTable_name.h"
#include "SkOTUtils.h"
@@ -1733,11 +1734,20 @@ std::unique_ptr<SkAdvancedTypefaceMetrics> LogFontTypeface::onGetAdvancedMetrics
info.reset(new SkAdvancedTypefaceMetrics);
tchar_to_skstring(lf.lfFaceName, &info->fFontName);
- // If bit 1 is set, the font may not be embedded in a document.
- // If bit 1 is clear, the font can be embedded.
- // If bit 2 is set, the embedding is read-only.
- if (otm.otmfsType & 0x1) {
- info->fFlags |= SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag;
+
+ SkOTTableOS2_V4::Type fsType;
+ if (sizeof(fsType) == this->getTableData(SkTEndian_SwapBE32(SkOTTableOS2::TAG),
+ offsetof(SkOTTableOS2_V4, fsType),
+ sizeof(fsType),
+ &fsType)) {
+ SkOTUtils::SetAdvancedTypefaceFlags(fsType, info.get());
+ } else {
+ // If bit 1 is set, the font may not be embedded in a document.
+ // If bit 1 is clear, the font can be embedded.
+ // If bit 2 is set, the embedding is read-only.
+ if (otm.otmfsType & 0x1) {
+ info->fFlags |= SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag;
+ }
}
populate_glyph_to_unicode(hdc, glyphCount, &(info->fGlyphToUnicode));
diff --git a/src/ports/SkTypeface_win_dw.cpp b/src/ports/SkTypeface_win_dw.cpp
index 3dcaa921c2..bec151ee3f 100644
--- a/src/ports/SkTypeface_win_dw.cpp
+++ b/src/ports/SkTypeface_win_dw.cpp
@@ -372,7 +372,7 @@ std::unique_ptr<SkAdvancedTypefaceMetrics> DWriteFontTypeface::onGetAdvancedMetr
return info;
}
- SkOTUtils::SetAdvanvedTypefaceFlags(os2Table->version.v4.fsType, info.get());
+ SkOTUtils::SetAdvancedTypefaceFlags(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.
diff --git a/src/sfnt/SkOTUtils.cpp b/src/sfnt/SkOTUtils.cpp
index 3a16dde8b0..f46f86c2c0 100644
--- a/src/sfnt/SkOTUtils.cpp
+++ b/src/sfnt/SkOTUtils.cpp
@@ -204,7 +204,7 @@ SkOTUtils::LocalizedStrings_NameTable::familyNameTypes[3] = {
SkOTTableName::Record::NameID::Predefined::WWSFamilyName,
};
-void SkOTUtils::SetAdvanvedTypefaceFlags(SkOTTableOS2_V4::Type fsType,
+void SkOTUtils::SetAdvancedTypefaceFlags(SkOTTableOS2_V4::Type fsType,
SkAdvancedTypefaceMetrics* info) {
SkASSERT(info);
// The logic should be identical to SkTypeface_FreeType::onGetAdvancedMetrics().
diff --git a/src/sfnt/SkOTUtils.h b/src/sfnt/SkOTUtils.h
index 26e6e61c21..64d3ae2501 100644
--- a/src/sfnt/SkOTUtils.h
+++ b/src/sfnt/SkOTUtils.h
@@ -89,7 +89,7 @@ struct SkOTUtils {
bool fHasNext;
};
- static void SetAdvanvedTypefaceFlags(SkOTTableOS2_V4::Type fsType,
+ static void SetAdvancedTypefaceFlags(SkOTTableOS2_V4::Type fsType,
SkAdvancedTypefaceMetrics* info);
};