1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2012 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkOTTable_head_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkOTTable_head_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkEndian.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/sfnt/SkOTTableTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #pragma pack(push, 1) 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker struct SkOTTableHead { 17*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG0 = 'h'; 18*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG1 = 'e'; 19*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG2 = 'a'; 20*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG3 = 'd'; 21*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableHead>::value; 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker SK_OT_Fixed version; 24*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_Fixed version1 = SkTEndian_SwapBE32(0x00010000); 25*c8dee2aaSAndroid Build Coastguard Worker SK_OT_Fixed fontRevision; 26*c8dee2aaSAndroid Build Coastguard Worker static const uint32_t fontChecksum = 0xB1B0AFBA; //checksum of all TT fonts 27*c8dee2aaSAndroid Build Coastguard Worker SK_OT_ULONG checksumAdjustment; 28*c8dee2aaSAndroid Build Coastguard Worker SK_OT_ULONG magicNumber; 29*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_ULONG magicNumberConst = SkTEndian_SwapBE32(0x5F0F3CF5); 30*c8dee2aaSAndroid Build Coastguard Worker union Flags { 31*c8dee2aaSAndroid Build Coastguard Worker struct Field { 32*c8dee2aaSAndroid Build Coastguard Worker //8-15 33*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE_BITFIELD( 34*c8dee2aaSAndroid Build Coastguard Worker GXMetamorphosis_Apple, 35*c8dee2aaSAndroid Build Coastguard Worker HasStrongRTL_Apple, 36*c8dee2aaSAndroid Build Coastguard Worker HasIndicStyleRearrangement, 37*c8dee2aaSAndroid Build Coastguard Worker AgfaMicroTypeExpressProcessed, 38*c8dee2aaSAndroid Build Coastguard Worker FontConverted, 39*c8dee2aaSAndroid Build Coastguard Worker DesignedForClearType, 40*c8dee2aaSAndroid Build Coastguard Worker LastResort, 41*c8dee2aaSAndroid Build Coastguard Worker Reserved15) 42*c8dee2aaSAndroid Build Coastguard Worker //0-7 43*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE_BITFIELD( 44*c8dee2aaSAndroid Build Coastguard Worker BaselineAtY0, 45*c8dee2aaSAndroid Build Coastguard Worker LeftSidebearingAtX0, 46*c8dee2aaSAndroid Build Coastguard Worker InstructionsDependOnPointSize, 47*c8dee2aaSAndroid Build Coastguard Worker IntegerScaling, 48*c8dee2aaSAndroid Build Coastguard Worker InstructionsAlterAdvanceWidth, 49*c8dee2aaSAndroid Build Coastguard Worker VerticalCenteredGlyphs_Apple, 50*c8dee2aaSAndroid Build Coastguard Worker Reserved06, 51*c8dee2aaSAndroid Build Coastguard Worker RequiresLayout_Apple) 52*c8dee2aaSAndroid Build Coastguard Worker } field; 53*c8dee2aaSAndroid Build Coastguard Worker struct Raw { 54*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT BaselineAtY0Mask = SkTEndian_SwapBE16(1 << 0); 55*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT LeftSidebearingAtX0Mask = SkTEndian_SwapBE16(1 << 1); 56*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT InstructionsDependOnPointSizeMask = SkTEndian_SwapBE16(1 << 2); 57*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT IntegerScalingMask = SkTEndian_SwapBE16(1 << 3); 58*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT InstructionsAlterAdvanceWidthMask = SkTEndian_SwapBE16(1 << 4); 59*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT VerticalCenteredGlyphs_AppleMask = SkTEndian_SwapBE16(1 << 5); 60*c8dee2aaSAndroid Build Coastguard Worker //Reserved 61*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT RequiresLayout_AppleMask = SkTEndian_SwapBE16(1 << 7); 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT GXMetamorphosis_AppleMask = SkTEndian_SwapBE16(1 << 8); 64*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT HasStrongRTL_AppleMask = SkTEndian_SwapBE16(1 << 9); 65*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT HasIndicStyleRearrangementMask = SkTEndian_SwapBE16(1 << 10); 66*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT AgfaMicroTypeExpressProcessedMask = SkTEndian_SwapBE16(1 << 11); 67*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT FontConvertedMask = SkTEndian_SwapBE16(1 << 12); 68*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT DesignedForClearTypeMask = SkTEndian_SwapBE16(1 << 13); 69*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT LastResortMask = SkTEndian_SwapBE16(1 << 14); 70*c8dee2aaSAndroid Build Coastguard Worker //Reserved 71*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT value; 72*c8dee2aaSAndroid Build Coastguard Worker } raw; 73*c8dee2aaSAndroid Build Coastguard Worker } flags; 74*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT unitsPerEm; 75*c8dee2aaSAndroid Build Coastguard Worker SK_OT_LONGDATETIME created; 76*c8dee2aaSAndroid Build Coastguard Worker SK_OT_LONGDATETIME modified; 77*c8dee2aaSAndroid Build Coastguard Worker SK_OT_SHORT xMin; 78*c8dee2aaSAndroid Build Coastguard Worker SK_OT_SHORT yMin; 79*c8dee2aaSAndroid Build Coastguard Worker SK_OT_SHORT xMax; 80*c8dee2aaSAndroid Build Coastguard Worker SK_OT_SHORT yMax; 81*c8dee2aaSAndroid Build Coastguard Worker union MacStyle { 82*c8dee2aaSAndroid Build Coastguard Worker struct Field { 83*c8dee2aaSAndroid Build Coastguard Worker //8-15 84*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE_BITFIELD( 85*c8dee2aaSAndroid Build Coastguard Worker Reserved08, 86*c8dee2aaSAndroid Build Coastguard Worker Reserved09, 87*c8dee2aaSAndroid Build Coastguard Worker Reserved10, 88*c8dee2aaSAndroid Build Coastguard Worker Reserved11, 89*c8dee2aaSAndroid Build Coastguard Worker Reserved12, 90*c8dee2aaSAndroid Build Coastguard Worker Reserved13, 91*c8dee2aaSAndroid Build Coastguard Worker Reserved14, 92*c8dee2aaSAndroid Build Coastguard Worker Reserved15) 93*c8dee2aaSAndroid Build Coastguard Worker //0-7 94*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE_BITFIELD( 95*c8dee2aaSAndroid Build Coastguard Worker Bold, 96*c8dee2aaSAndroid Build Coastguard Worker Italic, 97*c8dee2aaSAndroid Build Coastguard Worker Underline, 98*c8dee2aaSAndroid Build Coastguard Worker Outline, 99*c8dee2aaSAndroid Build Coastguard Worker Shadow, 100*c8dee2aaSAndroid Build Coastguard Worker Condensed, 101*c8dee2aaSAndroid Build Coastguard Worker Extended, 102*c8dee2aaSAndroid Build Coastguard Worker Reserved07) 103*c8dee2aaSAndroid Build Coastguard Worker } field; 104*c8dee2aaSAndroid Build Coastguard Worker struct Raw { 105*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT BoldMask = SkTEndian_SwapBE16(1); 106*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT ItalicMask = SkTEndian_SwapBE16(1 << 1); 107*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT UnderlineMask = SkTEndian_SwapBE16(1 << 2); 108*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT OutlineMask = SkTEndian_SwapBE16(1 << 3); 109*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT ShadowMask = SkTEndian_SwapBE16(1 << 4); 110*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT CondensedMask = SkTEndian_SwapBE16(1 << 5); 111*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_USHORT ExtendedMask = SkTEndian_SwapBE16(1 << 6); 112*c8dee2aaSAndroid Build Coastguard Worker 113*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT value; 114*c8dee2aaSAndroid Build Coastguard Worker } raw; 115*c8dee2aaSAndroid Build Coastguard Worker } macStyle; 116*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT lowestRecPPEM; 117*c8dee2aaSAndroid Build Coastguard Worker struct FontDirectionHint { 118*c8dee2aaSAndroid Build Coastguard Worker enum Value : SK_OT_SHORT { 119*c8dee2aaSAndroid Build Coastguard Worker FullyMixedDirectionalGlyphs = SkTEndian_SwapBE16(0), 120*c8dee2aaSAndroid Build Coastguard Worker OnlyStronglyLTR = SkTEndian_SwapBE16(1), 121*c8dee2aaSAndroid Build Coastguard Worker StronglyLTR = SkTEndian_SwapBE16(2), 122*c8dee2aaSAndroid Build Coastguard Worker OnlyStronglyRTL = static_cast<SK_OT_SHORT>(SkTEndian_SwapBE16((uint16_t)-1)), 123*c8dee2aaSAndroid Build Coastguard Worker StronglyRTL = static_cast<SK_OT_SHORT>(SkTEndian_SwapBE16((uint16_t)-2)), 124*c8dee2aaSAndroid Build Coastguard Worker } value; 125*c8dee2aaSAndroid Build Coastguard Worker } fontDirectionHint; 126*c8dee2aaSAndroid Build Coastguard Worker struct IndexToLocFormat { 127*c8dee2aaSAndroid Build Coastguard Worker enum Value : SK_OT_SHORT { 128*c8dee2aaSAndroid Build Coastguard Worker ShortOffsets = SkTEndian_SwapBE16(0), 129*c8dee2aaSAndroid Build Coastguard Worker LongOffsets = SkTEndian_SwapBE16(1), 130*c8dee2aaSAndroid Build Coastguard Worker } value; 131*c8dee2aaSAndroid Build Coastguard Worker } indexToLocFormat; 132*c8dee2aaSAndroid Build Coastguard Worker struct GlyphDataFormat { 133*c8dee2aaSAndroid Build Coastguard Worker enum Value : SK_OT_SHORT { 134*c8dee2aaSAndroid Build Coastguard Worker CurrentFormat = SkTEndian_SwapBE16(0), 135*c8dee2aaSAndroid Build Coastguard Worker } value; 136*c8dee2aaSAndroid Build Coastguard Worker } glyphDataFormat; 137*c8dee2aaSAndroid Build Coastguard Worker }; 138*c8dee2aaSAndroid Build Coastguard Worker 139*c8dee2aaSAndroid Build Coastguard Worker #pragma pack(pop) 140*c8dee2aaSAndroid Build Coastguard Worker 141*c8dee2aaSAndroid Build Coastguard Worker 142*c8dee2aaSAndroid Build Coastguard Worker #include <stddef.h> 143*c8dee2aaSAndroid Build Coastguard Worker static_assert(offsetof(SkOTTableHead, glyphDataFormat) == 52, "SkOTTableHead_glyphDataFormat_not_at_52"); 144*c8dee2aaSAndroid Build Coastguard Worker static_assert(sizeof(SkOTTableHead) == 54, "sizeof_SkOTTableHead_not_54"); 145*c8dee2aaSAndroid Build Coastguard Worker 146*c8dee2aaSAndroid Build Coastguard Worker #endif 147