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_OS_2_VA_DEFINED 9 #define SkOTTable_OS_2_VA_DEFINED 10 11 #include "SkEndian.h" 12 #include "SkIBMFamilyClass.h" 13 #include "SkOTTableTypes.h" 14 #include "SkPanose.h" 15 #include "SkTypedEnum.h" 16 17 #pragma pack(push, 1) 18 19 //Original V0 TT 20 struct SkOTTableOS2_VA { 21 SK_OT_USHORT version; 22 //SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0. 23 //The only way to differentiate these two versions is by the size of the table. 24 static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0); 25 26 SK_OT_SHORT xAvgCharWidth; 27 struct WeightClass { 28 SK_TYPED_ENUM(Value, SK_OT_USHORT, 29 ((UltraLight, SkTEndian_SwapBE16(1))) 30 ((ExtraLight, SkTEndian_SwapBE16(2))) 31 ((Light, SkTEndian_SwapBE16(3))) 32 ((SemiLight, SkTEndian_SwapBE16(4))) 33 ((Medium, SkTEndian_SwapBE16(5))) 34 ((SemiBold, SkTEndian_SwapBE16(6))) 35 ((Bold, SkTEndian_SwapBE16(7))) 36 ((ExtraBold, SkTEndian_SwapBE16(8))) 37 ((UltraBold, SkTEndian_SwapBE16(9))) 38 SK_SEQ_END, 39 (value)SK_SEQ_END) 40 } usWeightClass; 41 struct WidthClass { 42 SK_TYPED_ENUM(Value, SK_OT_USHORT, 43 ((UltraCondensed, SkTEndian_SwapBE16(1))) 44 ((ExtraCondensed, SkTEndian_SwapBE16(2))) 45 ((Condensed, SkTEndian_SwapBE16(3))) 46 ((SemiCondensed, SkTEndian_SwapBE16(4))) 47 ((Medium, SkTEndian_SwapBE16(5))) 48 ((SemiExpanded, SkTEndian_SwapBE16(6))) 49 ((Expanded, SkTEndian_SwapBE16(7))) 50 ((ExtraExpanded, SkTEndian_SwapBE16(8))) 51 ((UltraExpanded, SkTEndian_SwapBE16(9))) 52 SK_SEQ_END, 53 (value)SK_SEQ_END) 54 } usWidthClass; 55 union Type { 56 struct Field { 57 //8-15 58 SK_OT_BYTE_BITFIELD( 59 Reserved08, 60 Reserved09, 61 Reserved10, 62 Reserved11, 63 Reserved12, 64 Reserved13, 65 Reserved14, 66 Reserved15) 67 //0-7 68 SK_OT_BYTE_BITFIELD( 69 Reserved00, 70 Restricted, 71 PreviewPrint, 72 Editable, 73 Reserved04, 74 Reserved05, 75 Reserved06, 76 Reserved07) 77 } field; 78 struct Raw { 79 static const SK_OT_USHORT Installable = 0; 80 static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value; 81 static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value; 82 static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value; 83 SK_OT_USHORT value; 84 } raw; 85 } fsType; 86 SK_OT_SHORT ySubscriptXSize; 87 SK_OT_SHORT ySubscriptYSize; 88 SK_OT_SHORT ySubscriptXOffset; 89 SK_OT_SHORT ySubscriptYOffset; 90 SK_OT_SHORT ySuperscriptXSize; 91 SK_OT_SHORT ySuperscriptYSize; 92 SK_OT_SHORT ySuperscriptXOffset; 93 SK_OT_SHORT ySuperscriptYOffset; 94 SK_OT_SHORT yStrikeoutSize; 95 SK_OT_SHORT yStrikeoutPosition; 96 SkIBMFamilyClass sFamilyClass; 97 SkPanose panose; 98 SK_OT_ULONG ulCharRange[4]; 99 SK_OT_CHAR achVendID[4]; 100 union Selection { 101 struct Field { 102 //8-15 103 SK_OT_BYTE_BITFIELD( 104 Reserved08, 105 Reserved09, 106 Reserved10, 107 Reserved11, 108 Reserved12, 109 Reserved13, 110 Reserved14, 111 Reserved15) 112 //0-7 113 SK_OT_BYTE_BITFIELD( 114 Italic, 115 Underscore, 116 Negative, 117 Outlined, 118 Strikeout, 119 Bold, 120 Reserved06, 121 Reserved07) 122 } field; 123 struct Raw { 124 static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value; 125 static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value; 126 static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value; 127 static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value; 128 static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value; 129 static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value; 130 SK_OT_USHORT value; 131 } raw; 132 } fsSelection; 133 SK_OT_USHORT usFirstCharIndex; 134 SK_OT_USHORT usLastCharIndex; 135 }; 136 137 #pragma pack(pop) 138 139 140 static_assert(sizeof(SkOTTableOS2_VA) == 68, "sizeof_SkOTTableOS2_VA_not_68"); 141 142 #endif 143