blob: b65bcf7f6319d5e4664afd2b6b94100c8b8e0158 [file] [log] [blame]
bungeman@google.comf8d1aee2012-02-02 19:15:21 +00001/*
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_V0_DEFINED
9#define SkOTTable_OS_2_V0_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
19struct SkOTTableOS2_V0 {
20 SK_OT_USHORT version;
bungeman@google.coma544f292012-11-20 18:52:23 +000021 //SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0.
22 //The only way to differentiate these two versions is by the size of the table.
23 static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0);
skia.committer@gmail.comb0a327e2012-11-21 02:02:25 +000024
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000025 SK_OT_SHORT xAvgCharWidth;
26 struct WeightClass {
27 SK_TYPED_ENUM(Value, SK_OT_USHORT,
28 ((Thin, SkTEndian_SwapBE16(100)))
29 ((ExtraLight, SkTEndian_SwapBE16(200)))
30 ((Light, SkTEndian_SwapBE16(300)))
31 ((Normal, SkTEndian_SwapBE16(400)))
32 ((Medium, SkTEndian_SwapBE16(500)))
33 ((SemiBold, SkTEndian_SwapBE16(600)))
34 ((Bold, SkTEndian_SwapBE16(700)))
35 ((ExtraBold, SkTEndian_SwapBE16(800)))
36 ((Black, SkTEndian_SwapBE16(900)))
37 SK_SEQ_END,
38 SK_SEQ_END)
39 SK_OT_USHORT value;
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 {
bungeman@google.com562b2e62014-03-12 21:41:06 +000079 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;
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000083 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 Regular,
121 Reserved07)
122 } field;
123 struct Raw {
bungeman@google.com562b2e62014-03-12 21:41:06 +0000124 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 static const SK_OT_USHORT RegularMask = SkOTSetUSHORTBit<6>::value;
bungeman@google.comf8d1aee2012-02-02 19:15:21 +0000131 SK_OT_USHORT value;
132 } raw;
133 } fsSelection;
134 SK_OT_USHORT usFirstCharIndex;
135 SK_OT_USHORT usLastCharIndex;
136 //version0
137 SK_OT_SHORT sTypoAscender;
138 SK_OT_SHORT sTypoDescender;
139 SK_OT_SHORT sTypoLineGap;
140 SK_OT_USHORT usWinAscent;
141 SK_OT_USHORT usWinDescent;
142};
143
144#pragma pack(pop)
145
146
147SK_COMPILE_ASSERT(sizeof(SkOTTableOS2_V0) == 78, sizeof_SkOTTableOS2_V0_not_78);
148
149#endif