1058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com/* 2058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com * Copyright 2014 Google Inc. 3058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com * 4058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com * Use of this source code is governed by a BSD-style license that can be 5058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com * found in the LICENSE file. 6058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com */ 7058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 8058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#ifndef SkOTTable_EBDT_DEFINED 9058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#define SkOTTable_EBDT_DEFINED 10058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 11058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#include "SkEndian.h" 12058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#include "SkOTTableTypes.h" 13058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#include "SkOTTable_head.h" 14058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#include "SkOTTable_loca.h" 15058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#include "SkTypedEnum.h" 16058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 17058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#pragma pack(push, 1) 18058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 19058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.comstruct SkOTTableEmbeddedBitmapData { 20058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com static const SK_OT_CHAR TAG0 = 'E'; 21058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com static const SK_OT_CHAR TAG1 = 'B'; 22058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com static const SK_OT_CHAR TAG2 = 'D'; 23058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com static const SK_OT_CHAR TAG3 = 'T'; 24058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableEmbeddedBitmapData>::value; 25058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 26058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_Fixed version; 27058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com static const SK_OT_Fixed version_initial = SkTEndian_SwapBE32(0x00020000); 28058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 29058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct BigGlyphMetrics { 30058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE height; 31058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE width; 32058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR horiBearingX; 33058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR horiBearingY; 34058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE horiAdvance; 35058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR vertBearingX; 36058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR vertBearingY; 37058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE vertAdvance; 38058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 39058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 40058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct SmallGlyphMetrics { 41058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE height; 42058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE width; 43058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR bearingX; 44058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR bearingY; 45058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE advance; 46058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 47058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 48058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // Small metrics, byte-aligned data. 49058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format1 { 50058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SmallGlyphMetrics smallGlyphMetrics; 51058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //SK_OT_BYTE[] byteAlignedBitmap; 52058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 53058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 54058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // Small metrics, bit-aligned data. 55058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format2 { 56058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SmallGlyphMetrics smallGlyphMetrics; 57058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //SK_OT_BYTE[] bitAlignedBitmap; 58058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 59058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 60058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // Format 3 is not used. 61058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 62058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), compressed data. 63058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // Only used on Mac. 64058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format4 { 65058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_ULONG whiteTreeOffset; 66058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_ULONG blackTreeOffset; 67058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_ULONG glyphDataOffset; 68058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 69058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 70058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), bit-aligned data. 71058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format5 { 72058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //SK_OT_BYTE[] bitAlignedBitmap; 73058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 74058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 75058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // Big metrics, byte-aligned data. 76058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format6 { 77058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com BigGlyphMetrics bigGlyphMetrics; 78058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //SK_OT_BYTE[] byteAlignedBitmap; 79058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 80058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 81058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com // Big metrics, bit-aligned data. 82058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format7 { 83058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com BigGlyphMetrics bigGlyphMetrics; 84058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //SK_OT_BYTE[] bitAlignedBitmap; 85058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 86058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 87058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct EBDTComponent { 88058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_USHORT glyphCode; // Component glyph code 89058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR xOffset; // Position of component left 90058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_CHAR yOffset; // Position of component top 91058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 92058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 93058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format8 { 94058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SmallGlyphMetrics smallMetrics; // Metrics information for the glyph 95058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_BYTE pad; // Pad to short boundary 96058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_USHORT numComponents; // Number of components 97058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //EBDTComponent componentArray[numComponents]; // Glyph code, offset array 98058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 99058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 100058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com struct Format9 { 101058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com BigGlyphMetrics bigMetrics; // Metrics information for the glyph 102058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com SK_OT_USHORT numComponents; // Number of components 103058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com //EBDTComponent componentArray[numComponents]; // Glyph code, offset array 104058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com }; 105058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com}; 106058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 107058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#pragma pack(pop) 108058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com 109058670b1e52910e61d9de294a46b5023ed6dd964bungeman@google.com#endif 110