blob: 63b904c5b0fd153e8db1ab16318c201cb8b9f3f0 [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_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"
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000015
16#pragma pack(push, 1)
17
18//Original V0 TT
19struct SkOTTableOS2_VA {
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 {
bungeman8fd23a82016-08-16 12:27:49 -070027 enum Value : SK_OT_USHORT {
28 UltraLight = SkTEndian_SwapBE16(1),
29 ExtraLight = SkTEndian_SwapBE16(2),
30 Light = SkTEndian_SwapBE16(3),
31 SemiLight = SkTEndian_SwapBE16(4),
32 Medium = SkTEndian_SwapBE16(5),
33 SemiBold = SkTEndian_SwapBE16(6),
34 Bold = SkTEndian_SwapBE16(7),
35 ExtraBold = SkTEndian_SwapBE16(8),
36 UltraBold = SkTEndian_SwapBE16(9),
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000037 SK_SEQ_END,
bungeman8fd23a82016-08-16 12:27:49 -070038 } value;
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000039 } usWeightClass;
40 struct WidthClass {
bungeman8fd23a82016-08-16 12:27:49 -070041 enum Value : SK_OT_USHORT {
42 UltraCondensed = SkTEndian_SwapBE16(1),
43 ExtraCondensed = SkTEndian_SwapBE16(2),
44 Condensed = SkTEndian_SwapBE16(3),
45 SemiCondensed = SkTEndian_SwapBE16(4),
46 Medium = SkTEndian_SwapBE16(5),
47 SemiExpanded = SkTEndian_SwapBE16(6),
48 Expanded = SkTEndian_SwapBE16(7),
49 ExtraExpanded = SkTEndian_SwapBE16(8),
50 UltraExpanded = SkTEndian_SwapBE16(9),
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000051 SK_SEQ_END,
bungeman8fd23a82016-08-16 12:27:49 -070052 } value;
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000053 } usWidthClass;
54 union Type {
55 struct Field {
56 //8-15
57 SK_OT_BYTE_BITFIELD(
58 Reserved08,
59 Reserved09,
60 Reserved10,
61 Reserved11,
62 Reserved12,
63 Reserved13,
64 Reserved14,
65 Reserved15)
66 //0-7
67 SK_OT_BYTE_BITFIELD(
68 Reserved00,
69 Restricted,
70 PreviewPrint,
71 Editable,
72 Reserved04,
73 Reserved05,
74 Reserved06,
75 Reserved07)
76 } field;
77 struct Raw {
bungeman@google.com562b2e62014-03-12 21:41:06 +000078 static const SK_OT_USHORT Installable = 0;
79 static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value;
80 static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value;
81 static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value;
bungeman@google.comf8d1aee2012-02-02 19:15:21 +000082 SK_OT_USHORT value;
83 } raw;
84 } fsType;
85 SK_OT_SHORT ySubscriptXSize;
86 SK_OT_SHORT ySubscriptYSize;
87 SK_OT_SHORT ySubscriptXOffset;
88 SK_OT_SHORT ySubscriptYOffset;
89 SK_OT_SHORT ySuperscriptXSize;
90 SK_OT_SHORT ySuperscriptYSize;
91 SK_OT_SHORT ySuperscriptXOffset;
92 SK_OT_SHORT ySuperscriptYOffset;
93 SK_OT_SHORT yStrikeoutSize;
94 SK_OT_SHORT yStrikeoutPosition;
95 SkIBMFamilyClass sFamilyClass;
96 SkPanose panose;
97 SK_OT_ULONG ulCharRange[4];
98 SK_OT_CHAR achVendID[4];
99 union Selection {
100 struct Field {
101 //8-15
102 SK_OT_BYTE_BITFIELD(
103 Reserved08,
104 Reserved09,
105 Reserved10,
106 Reserved11,
107 Reserved12,
108 Reserved13,
109 Reserved14,
110 Reserved15)
111 //0-7
112 SK_OT_BYTE_BITFIELD(
113 Italic,
114 Underscore,
115 Negative,
116 Outlined,
117 Strikeout,
118 Bold,
119 Reserved06,
120 Reserved07)
121 } field;
122 struct Raw {
bungeman@google.com562b2e62014-03-12 21:41:06 +0000123 static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value;
124 static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value;
125 static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value;
126 static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value;
127 static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value;
128 static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value;
bungeman@google.comf8d1aee2012-02-02 19:15:21 +0000129 SK_OT_USHORT value;
130 } raw;
131 } fsSelection;
132 SK_OT_USHORT usFirstCharIndex;
133 SK_OT_USHORT usLastCharIndex;
134};
135
136#pragma pack(pop)
137
138
bungeman99fe8222015-08-20 07:57:51 -0700139static_assert(sizeof(SkOTTableOS2_VA) == 68, "sizeof_SkOTTableOS2_VA_not_68");
bungeman@google.comf8d1aee2012-02-02 19:15:21 +0000140
141#endif