12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkSFNTHeader_DEFINED
- #define SkSFNTHeader_DEFINED
- #include "src/core/SkEndian.h"
- #include "src/sfnt/SkOTTableTypes.h"
- //All SK_SFNT_ prefixed types should be considered as big endian.
- typedef uint16_t SK_SFNT_USHORT;
- typedef uint32_t SK_SFNT_ULONG;
- #pragma pack(push, 1)
- struct SkSFNTHeader {
- SK_SFNT_ULONG fontType;
- struct fontType_WindowsTrueType {
- static const SK_OT_CHAR TAG0 = 0;
- static const SK_OT_CHAR TAG1 = 1;
- static const SK_OT_CHAR TAG2 = 0;
- static const SK_OT_CHAR TAG3 = 0;
- static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_WindowsTrueType>::value;
- };
- struct fontType_MacTrueType {
- static const SK_OT_CHAR TAG0 = 't';
- static const SK_OT_CHAR TAG1 = 'r';
- static const SK_OT_CHAR TAG2 = 'u';
- static const SK_OT_CHAR TAG3 = 'e';
- static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_MacTrueType>::value;
- };
- struct fontType_PostScript {
- static const SK_OT_CHAR TAG0 = 't';
- static const SK_OT_CHAR TAG1 = 'y';
- static const SK_OT_CHAR TAG2 = 'p';
- static const SK_OT_CHAR TAG3 = '1';
- static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_PostScript>::value;
- };
- struct fontType_OpenTypeCFF {
- static const SK_OT_CHAR TAG0 = 'O';
- static const SK_OT_CHAR TAG1 = 'T';
- static const SK_OT_CHAR TAG2 = 'T';
- static const SK_OT_CHAR TAG3 = 'O';
- static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_OpenTypeCFF>::value;
- };
- SK_SFNT_USHORT numTables;
- SK_SFNT_USHORT searchRange;
- SK_SFNT_USHORT entrySelector;
- SK_SFNT_USHORT rangeShift;
- struct TableDirectoryEntry {
- SK_SFNT_ULONG tag;
- SK_SFNT_ULONG checksum;
- SK_SFNT_ULONG offset; //From beginning of header.
- SK_SFNT_ULONG logicalLength;
- }; //tableDirectoryEntries[numTables]
- };
- #pragma pack(pop)
- static_assert(sizeof(SkSFNTHeader) == 12, "sizeof_SkSFNTHeader_not_12");
- static_assert(sizeof(SkSFNTHeader::TableDirectoryEntry) == 16, "sizeof_SkSFNTHeader_TableDirectoryEntry_not_16");
- #endif
|