/* * 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_VA_DEFINED #define SkOTTable_OS_2_VA_DEFINED #include "SkEndian.h" #include "SkIBMFamilyClass.h" #include "SkOTTableTypes.h" #include "SkPanose.h" #pragma pack(push, 1) //Original V0 TT struct SkOTTableOS2_VA { 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 { UltraLight = SkTEndian_SwapBE16(1), ExtraLight = SkTEndian_SwapBE16(2), Light = SkTEndian_SwapBE16(3), SemiLight = SkTEndian_SwapBE16(4), Medium = SkTEndian_SwapBE16(5), SemiBold = SkTEndian_SwapBE16(6), Bold = SkTEndian_SwapBE16(7), ExtraBold = SkTEndian_SwapBE16(8), UltraBold = SkTEndian_SwapBE16(9), SK_SEQ_END, } 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), SK_SEQ_END, } 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, Reserved06, 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; SK_OT_USHORT value; } raw; } fsSelection; SK_OT_USHORT usFirstCharIndex; SK_OT_USHORT usLastCharIndex; }; #pragma pack(pop) static_assert(sizeof(SkOTTableOS2_VA) == 68, "sizeof_SkOTTableOS2_VA_not_68"); #endif