|
1 /* |
|
2 * Copyright 2012 Google Inc. |
|
3 * |
|
4 * Use of this source code is governed by a BSD-style license that can be |
|
5 * found in the LICENSE file. |
|
6 */ |
|
7 |
|
8 #ifndef SkOTTable_head_DEFINED |
|
9 #define SkOTTable_head_DEFINED |
|
10 |
|
11 #include "SkEndian.h" |
|
12 #include "SkOTTableTypes.h" |
|
13 #include "SkTypedEnum.h" |
|
14 |
|
15 #pragma pack(push, 1) |
|
16 |
|
17 struct SkOTTableHead { |
|
18 static const SK_OT_CHAR TAG0 = 'h'; |
|
19 static const SK_OT_CHAR TAG1 = 'e'; |
|
20 static const SK_OT_CHAR TAG2 = 'a'; |
|
21 static const SK_OT_CHAR TAG3 = 'd'; |
|
22 static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableHead>::value; |
|
23 |
|
24 SK_OT_Fixed version; |
|
25 static const SK_OT_Fixed version1 = SkTEndian_SwapBE32(0x00010000); |
|
26 SK_OT_Fixed fontRevision; |
|
27 static const uint32_t fontChecksum = 0xB1B0AFBA; //checksum of all TT fonts |
|
28 SK_OT_ULONG checksumAdjustment; |
|
29 SK_OT_ULONG magicNumber; |
|
30 static const SK_OT_ULONG magicNumberConst = SkTEndian_SwapBE32(0x5F0F3CF5); |
|
31 union Flags { |
|
32 struct Field { |
|
33 //8-15 |
|
34 SK_OT_BYTE_BITFIELD( |
|
35 GXMetamorphosis_Apple, |
|
36 HasStrongRTL_Apple, |
|
37 HasIndicStyleRearrangement, |
|
38 AgfaMicroTypeExpressProcessed, |
|
39 FontConverted, |
|
40 DesignedForClearType, |
|
41 LastResort, |
|
42 Reserved15) |
|
43 //0-7 |
|
44 SK_OT_BYTE_BITFIELD( |
|
45 BaselineAtY0, |
|
46 LeftSidebearingAtX0, |
|
47 InstructionsDependOnPointSize, |
|
48 IntegerScaling, |
|
49 InstructionsAlterAdvanceWidth, |
|
50 VerticalCenteredGlyphs_Apple, |
|
51 Reserved06, |
|
52 RequiresLayout_Apple) |
|
53 } field; |
|
54 struct Raw { |
|
55 static const SK_OT_USHORT BaselineAtY0Mask = SkTEndian_SwapBE16(1 << 0); |
|
56 static const SK_OT_USHORT LeftSidebearingAtX0Mask = SkTEndian_SwapBE16(1 << 1); |
|
57 static const SK_OT_USHORT InstructionsDependOnPointSizeMask = SkTEndian_SwapBE16(1 << 2); |
|
58 static const SK_OT_USHORT IntegerScalingMask = SkTEndian_SwapBE16(1 << 3); |
|
59 static const SK_OT_USHORT InstructionsAlterAdvanceWidthMask = SkTEndian_SwapBE16(1 << 4); |
|
60 static const SK_OT_USHORT VerticalCenteredGlyphs_AppleMask = SkTEndian_SwapBE16(1 << 5); |
|
61 //Reserved |
|
62 static const SK_OT_USHORT RequiresLayout_AppleMask = SkTEndian_SwapBE16(1 << 7); |
|
63 |
|
64 static const SK_OT_USHORT GXMetamorphosis_AppleMask = SkTEndian_SwapBE16(1 << 8); |
|
65 static const SK_OT_USHORT HasStrongRTL_AppleMask = SkTEndian_SwapBE16(1 << 9); |
|
66 static const SK_OT_USHORT HasIndicStyleRearrangementMask = SkTEndian_SwapBE16(1 << 10); |
|
67 static const SK_OT_USHORT AgfaMicroTypeExpressProcessedMask = SkTEndian_SwapBE16(1 << 11); |
|
68 static const SK_OT_USHORT FontConvertedMask = SkTEndian_SwapBE16(1 << 12); |
|
69 static const SK_OT_USHORT DesignedForClearTypeMask = SkTEndian_SwapBE16(1 << 13); |
|
70 static const SK_OT_USHORT LastResortMask = SkTEndian_SwapBE16(1 << 14); |
|
71 //Reserved |
|
72 SK_OT_USHORT value; |
|
73 } raw; |
|
74 } flags; |
|
75 SK_OT_USHORT unitsPerEm; |
|
76 SK_OT_LONGDATETIME created; |
|
77 SK_OT_LONGDATETIME modified; |
|
78 SK_OT_SHORT xMin; |
|
79 SK_OT_SHORT yMin; |
|
80 SK_OT_SHORT xMax; |
|
81 SK_OT_SHORT yMax; |
|
82 union MacStyle { |
|
83 struct Field { |
|
84 //8-15 |
|
85 SK_OT_BYTE_BITFIELD( |
|
86 Reserved08, |
|
87 Reserved09, |
|
88 Reserved10, |
|
89 Reserved11, |
|
90 Reserved12, |
|
91 Reserved13, |
|
92 Reserved14, |
|
93 Reserved15) |
|
94 //0-7 |
|
95 SK_OT_BYTE_BITFIELD( |
|
96 Bold, |
|
97 Italic, |
|
98 Underline, |
|
99 Outline, |
|
100 Shadow, |
|
101 Condensed, |
|
102 Extended, |
|
103 Reserved07) |
|
104 } field; |
|
105 struct Raw { |
|
106 static const SK_OT_USHORT BoldMask = SkTEndian_SwapBE16(1); |
|
107 static const SK_OT_USHORT ItalicMask = SkTEndian_SwapBE16(1 << 1); |
|
108 static const SK_OT_USHORT UnderlineMask = SkTEndian_SwapBE16(1 << 2); |
|
109 static const SK_OT_USHORT OutlineMask = SkTEndian_SwapBE16(1 << 3); |
|
110 static const SK_OT_USHORT ShadowMask = SkTEndian_SwapBE16(1 << 4); |
|
111 static const SK_OT_USHORT CondensedMask = SkTEndian_SwapBE16(1 << 5); |
|
112 static const SK_OT_USHORT ExtendedMask = SkTEndian_SwapBE16(1 << 6); |
|
113 |
|
114 SK_OT_USHORT value; |
|
115 } raw; |
|
116 } macStyle; |
|
117 SK_OT_USHORT lowestRecPPEM; |
|
118 struct FontDirectionHint { |
|
119 SK_TYPED_ENUM(Value, SK_OT_SHORT, |
|
120 ((FullyMixedDirectionalGlyphs, SkTEndian_SwapBE16(0))) |
|
121 ((OnlyStronglyLTR, SkTEndian_SwapBE16(1))) |
|
122 ((StronglyLTR, SkTEndian_SwapBE16(2))) |
|
123 ((OnlyStronglyRTL, static_cast<SK_OT_SHORT>(SkTEndian_SwapBE16((uint16_t)-1)))) |
|
124 ((StronglyRTL, static_cast<SK_OT_SHORT>(SkTEndian_SwapBE16((uint16_t)-2)))) |
|
125 SK_SEQ_END, |
|
126 (value)SK_SEQ_END) |
|
127 } fontDirectionHint; |
|
128 struct IndexToLocFormat { |
|
129 SK_TYPED_ENUM(Value, SK_OT_SHORT, |
|
130 ((ShortOffsets, SkTEndian_SwapBE16(0))) |
|
131 ((LongOffsets, SkTEndian_SwapBE16(1))) |
|
132 SK_SEQ_END, |
|
133 (value)SK_SEQ_END) |
|
134 } indexToLocFormat; |
|
135 struct GlyphDataFormat { |
|
136 SK_TYPED_ENUM(Value, SK_OT_SHORT, |
|
137 ((CurrentFormat, SkTEndian_SwapBE16(0))) |
|
138 SK_SEQ_END, |
|
139 (value)SK_SEQ_END) |
|
140 } glyphDataFormat; |
|
141 }; |
|
142 |
|
143 #pragma pack(pop) |
|
144 |
|
145 |
|
146 #include <stddef.h> |
|
147 SK_COMPILE_ASSERT(offsetof(SkOTTableHead, glyphDataFormat) == 52, SkOTTableHead_glyphDataFormat_not_at_52); |
|
148 SK_COMPILE_ASSERT(sizeof(SkOTTableHead) == 54, sizeof_SkOTTableHead_not_54); |
|
149 |
|
150 #endif |