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