1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2014 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_EBDT_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkOTTable_EBDT_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 #include "src/sfnt/SkOTTable_head.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/sfnt/SkOTTable_loca.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker #pragma pack(push, 1) 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker struct SkOTTableEmbeddedBitmapData { 19*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG0 = 'E'; 20*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG1 = 'B'; 21*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG2 = 'D'; 22*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_CHAR TAG3 = 'T'; 23*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableEmbeddedBitmapData>::value; 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker SK_OT_Fixed version; 26*c8dee2aaSAndroid Build Coastguard Worker static const SK_OT_Fixed version_initial = SkTEndian_SwapBE32(0x00020000); 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker struct BigGlyphMetrics { 29*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE height; 30*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE width; 31*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR horiBearingX; 32*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR horiBearingY; 33*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE horiAdvance; 34*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR vertBearingX; 35*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR vertBearingY; 36*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE vertAdvance; 37*c8dee2aaSAndroid Build Coastguard Worker }; 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker struct SmallGlyphMetrics { 40*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE height; 41*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE width; 42*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR bearingX; 43*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR bearingY; 44*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE advance; 45*c8dee2aaSAndroid Build Coastguard Worker }; 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker // Small metrics, byte-aligned data. 48*c8dee2aaSAndroid Build Coastguard Worker struct Format1 { 49*c8dee2aaSAndroid Build Coastguard Worker SmallGlyphMetrics smallGlyphMetrics; 50*c8dee2aaSAndroid Build Coastguard Worker //SK_OT_BYTE[] byteAlignedBitmap; 51*c8dee2aaSAndroid Build Coastguard Worker }; 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Worker // Small metrics, bit-aligned data. 54*c8dee2aaSAndroid Build Coastguard Worker struct Format2 { 55*c8dee2aaSAndroid Build Coastguard Worker SmallGlyphMetrics smallGlyphMetrics; 56*c8dee2aaSAndroid Build Coastguard Worker //SK_OT_BYTE[] bitAlignedBitmap; 57*c8dee2aaSAndroid Build Coastguard Worker }; 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker // Format 3 is not used. 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), compressed data. 62*c8dee2aaSAndroid Build Coastguard Worker // Only used on Mac. 63*c8dee2aaSAndroid Build Coastguard Worker struct Format4 { 64*c8dee2aaSAndroid Build Coastguard Worker SK_OT_ULONG whiteTreeOffset; 65*c8dee2aaSAndroid Build Coastguard Worker SK_OT_ULONG blackTreeOffset; 66*c8dee2aaSAndroid Build Coastguard Worker SK_OT_ULONG glyphDataOffset; 67*c8dee2aaSAndroid Build Coastguard Worker }; 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), bit-aligned data. 70*c8dee2aaSAndroid Build Coastguard Worker struct Format5 { 71*c8dee2aaSAndroid Build Coastguard Worker //SK_OT_BYTE[] bitAlignedBitmap; 72*c8dee2aaSAndroid Build Coastguard Worker }; 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker // Big metrics, byte-aligned data. 75*c8dee2aaSAndroid Build Coastguard Worker struct Format6 { 76*c8dee2aaSAndroid Build Coastguard Worker BigGlyphMetrics bigGlyphMetrics; 77*c8dee2aaSAndroid Build Coastguard Worker //SK_OT_BYTE[] byteAlignedBitmap; 78*c8dee2aaSAndroid Build Coastguard Worker }; 79*c8dee2aaSAndroid Build Coastguard Worker 80*c8dee2aaSAndroid Build Coastguard Worker // Big metrics, bit-aligned data. 81*c8dee2aaSAndroid Build Coastguard Worker struct Format7 { 82*c8dee2aaSAndroid Build Coastguard Worker BigGlyphMetrics bigGlyphMetrics; 83*c8dee2aaSAndroid Build Coastguard Worker //SK_OT_BYTE[] bitAlignedBitmap; 84*c8dee2aaSAndroid Build Coastguard Worker }; 85*c8dee2aaSAndroid Build Coastguard Worker 86*c8dee2aaSAndroid Build Coastguard Worker struct EBDTComponent { 87*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT glyphCode; // Component glyph code 88*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR xOffset; // Position of component left 89*c8dee2aaSAndroid Build Coastguard Worker SK_OT_CHAR yOffset; // Position of component top 90*c8dee2aaSAndroid Build Coastguard Worker }; 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker struct Format8 { 93*c8dee2aaSAndroid Build Coastguard Worker SmallGlyphMetrics smallMetrics; // Metrics information for the glyph 94*c8dee2aaSAndroid Build Coastguard Worker SK_OT_BYTE pad; // Pad to short boundary 95*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT numComponents; // Number of components 96*c8dee2aaSAndroid Build Coastguard Worker //EBDTComponent componentArray[numComponents]; // Glyph code, offset array 97*c8dee2aaSAndroid Build Coastguard Worker }; 98*c8dee2aaSAndroid Build Coastguard Worker 99*c8dee2aaSAndroid Build Coastguard Worker struct Format9 { 100*c8dee2aaSAndroid Build Coastguard Worker BigGlyphMetrics bigMetrics; // Metrics information for the glyph 101*c8dee2aaSAndroid Build Coastguard Worker SK_OT_USHORT numComponents; // Number of components 102*c8dee2aaSAndroid Build Coastguard Worker //EBDTComponent componentArray[numComponents]; // Glyph code, offset array 103*c8dee2aaSAndroid Build Coastguard Worker }; 104*c8dee2aaSAndroid Build Coastguard Worker }; 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Worker #pragma pack(pop) 107*c8dee2aaSAndroid Build Coastguard Worker 108*c8dee2aaSAndroid Build Coastguard Worker #endif 109