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