Home | History | Annotate | Download | only in sfnt
      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 "SkEndian.h"
     12 #include "SkOTTableTypes.h"
     13 #include "SkOTTable_head.h"
     14 #include "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