/*
|
* 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 SkOTTable_OS_2_V0_DEFINED
|
#define SkOTTable_OS_2_V0_DEFINED
|
|
#include "SkEndian.h"
|
#include "SkIBMFamilyClass.h"
|
#include "SkOTTableTypes.h"
|
#include "SkPanose.h"
|
|
#pragma pack(push, 1)
|
|
struct SkOTTableOS2_V0 {
|
SK_OT_USHORT version;
|
//SkOTTableOS2_VA::VERSION and SkOTTableOS2_V0::VERSION are both 0.
|
//The only way to differentiate these two versions is by the size of the table.
|
static const SK_OT_USHORT VERSION = SkTEndian_SwapBE16(0);
|
|
SK_OT_SHORT xAvgCharWidth;
|
struct WeightClass {
|
enum Value : SK_OT_USHORT {
|
Thin = SkTEndian_SwapBE16(100),
|
ExtraLight = SkTEndian_SwapBE16(200),
|
Light = SkTEndian_SwapBE16(300),
|
Normal = SkTEndian_SwapBE16(400),
|
Medium = SkTEndian_SwapBE16(500),
|
SemiBold = SkTEndian_SwapBE16(600),
|
Bold = SkTEndian_SwapBE16(700),
|
ExtraBold = SkTEndian_SwapBE16(800),
|
Black = SkTEndian_SwapBE16(900),
|
};
|
SK_OT_USHORT value;
|
} usWeightClass;
|
struct WidthClass {
|
enum Value : SK_OT_USHORT {
|
UltraCondensed = SkTEndian_SwapBE16(1),
|
ExtraCondensed = SkTEndian_SwapBE16(2),
|
Condensed = SkTEndian_SwapBE16(3),
|
SemiCondensed = SkTEndian_SwapBE16(4),
|
Medium = SkTEndian_SwapBE16(5),
|
SemiExpanded = SkTEndian_SwapBE16(6),
|
Expanded = SkTEndian_SwapBE16(7),
|
ExtraExpanded = SkTEndian_SwapBE16(8),
|
UltraExpanded = SkTEndian_SwapBE16(9),
|
} value;
|
} usWidthClass;
|
union Type {
|
struct Field {
|
//8-15
|
SK_OT_BYTE_BITFIELD(
|
Reserved08,
|
Reserved09,
|
Reserved10,
|
Reserved11,
|
Reserved12,
|
Reserved13,
|
Reserved14,
|
Reserved15)
|
//0-7
|
SK_OT_BYTE_BITFIELD(
|
Reserved00,
|
Restricted,
|
PreviewPrint,
|
Editable,
|
Reserved04,
|
Reserved05,
|
Reserved06,
|
Reserved07)
|
} field;
|
struct Raw {
|
static const SK_OT_USHORT Installable = 0;
|
static const SK_OT_USHORT RestrictedMask = SkOTSetUSHORTBit<1>::value;
|
static const SK_OT_USHORT PreviewPrintMask = SkOTSetUSHORTBit<2>::value;
|
static const SK_OT_USHORT EditableMask = SkOTSetUSHORTBit<3>::value;
|
SK_OT_USHORT value;
|
} raw;
|
} fsType;
|
SK_OT_SHORT ySubscriptXSize;
|
SK_OT_SHORT ySubscriptYSize;
|
SK_OT_SHORT ySubscriptXOffset;
|
SK_OT_SHORT ySubscriptYOffset;
|
SK_OT_SHORT ySuperscriptXSize;
|
SK_OT_SHORT ySuperscriptYSize;
|
SK_OT_SHORT ySuperscriptXOffset;
|
SK_OT_SHORT ySuperscriptYOffset;
|
SK_OT_SHORT yStrikeoutSize;
|
SK_OT_SHORT yStrikeoutPosition;
|
SkIBMFamilyClass sFamilyClass;
|
SkPanose panose;
|
SK_OT_ULONG ulCharRange[4];
|
SK_OT_CHAR achVendID[4];
|
union Selection {
|
struct Field {
|
//8-15
|
SK_OT_BYTE_BITFIELD(
|
Reserved08,
|
Reserved09,
|
Reserved10,
|
Reserved11,
|
Reserved12,
|
Reserved13,
|
Reserved14,
|
Reserved15)
|
//0-7
|
SK_OT_BYTE_BITFIELD(
|
Italic,
|
Underscore,
|
Negative,
|
Outlined,
|
Strikeout,
|
Bold,
|
Regular,
|
Reserved07)
|
} field;
|
struct Raw {
|
static const SK_OT_USHORT ItalicMask = SkOTSetUSHORTBit<0>::value;
|
static const SK_OT_USHORT UnderscoreMask = SkOTSetUSHORTBit<1>::value;
|
static const SK_OT_USHORT NegativeMask = SkOTSetUSHORTBit<2>::value;
|
static const SK_OT_USHORT OutlinedMask = SkOTSetUSHORTBit<3>::value;
|
static const SK_OT_USHORT StrikeoutMask = SkOTSetUSHORTBit<4>::value;
|
static const SK_OT_USHORT BoldMask = SkOTSetUSHORTBit<5>::value;
|
static const SK_OT_USHORT RegularMask = SkOTSetUSHORTBit<6>::value;
|
SK_OT_USHORT value;
|
} raw;
|
} fsSelection;
|
SK_OT_USHORT usFirstCharIndex;
|
SK_OT_USHORT usLastCharIndex;
|
//version0
|
SK_OT_SHORT sTypoAscender;
|
SK_OT_SHORT sTypoDescender;
|
SK_OT_SHORT sTypoLineGap;
|
SK_OT_USHORT usWinAscent;
|
SK_OT_USHORT usWinDescent;
|
};
|
|
#pragma pack(pop)
|
|
|
static_assert(sizeof(SkOTTableOS2_V0) == 78, "sizeof_SkOTTableOS2_V0_not_78");
|
|
#endif
|