aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkTypeface.cpp14
-rw-r--r--src/sfnt/SkOTTable_OS_2.h10
2 files changed, 11 insertions, 13 deletions
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp
index cda9b5ce5e..0c960d5915 100644
--- a/src/core/SkTypeface.cpp
+++ b/src/core/SkTypeface.cpp
@@ -291,16 +291,14 @@ SkAdvancedTypefaceMetrics* SkTypeface::getAdvancedTypefaceMetrics(
SkAdvancedTypefaceMetrics* result =
this->onGetAdvancedTypefaceMetrics(info, glyphIDs, glyphIDsCount);
if (result && result->fType == SkAdvancedTypefaceMetrics::kTrueType_Font) {
- struct SkOTTableOS2 os2table;
- if (this->getTableData(SkTEndian_SwapBE32(SkOTTableOS2::TAG), 0,
- sizeof(os2table), &os2table) > 0) {
- if (os2table.version.v2.fsType.field.Bitmap ||
- (os2table.version.v2.fsType.field.Restricted &&
- !(os2table.version.v2.fsType.field.PreviewPrint ||
- os2table.version.v2.fsType.field.Editable))) {
+ SkOTTableOS2::Version::V2::Type::Field fsType;
+ constexpr SkFontTableTag os2Tag = SkTEndian_SwapBE32(SkOTTableOS2::TAG);
+ constexpr size_t fsTypeOffset = offsetof(SkOTTableOS2::Version::V2, fsType);
+ if (this->getTableData(os2Tag, fsTypeOffset, sizeof(fsType), &fsType) == sizeof(fsType)) {
+ if (fsType.Bitmap || (fsType.Restricted && !(fsType.PreviewPrint || fsType.Editable))) {
result->fFlags |= SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag;
}
- if (os2table.version.v2.fsType.field.NoSubsetting) {
+ if (fsType.NoSubsetting) {
result->fFlags |= SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag;
}
}
diff --git a/src/sfnt/SkOTTable_OS_2.h b/src/sfnt/SkOTTable_OS_2.h
index 4a09a78605..438257805c 100644
--- a/src/sfnt/SkOTTable_OS_2.h
+++ b/src/sfnt/SkOTTable_OS_2.h
@@ -18,11 +18,11 @@
#pragma pack(push, 1)
struct SkOTTableOS2 {
- static const SK_OT_CHAR TAG0 = 'O';
- static const SK_OT_CHAR TAG1 = 'S';
- static const SK_OT_CHAR TAG2 = '/';
- static const SK_OT_CHAR TAG3 = '2';
- static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableOS2>::value;
+ static constexpr SK_OT_CHAR TAG0 = 'O';
+ static constexpr SK_OT_CHAR TAG1 = 'S';
+ static constexpr SK_OT_CHAR TAG2 = '/';
+ static constexpr SK_OT_CHAR TAG3 = '2';
+ static constexpr SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableOS2>::value;
union Version {
SK_OT_USHORT version;