/*
 * Copyright 2014 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkOTTable_EBDT_DEFINED
#define SkOTTable_EBDT_DEFINED

#include "src/core/SkEndian.h"
#include "src/sfnt/SkOTTableTypes.h"
#include "src/sfnt/SkOTTable_head.h"
#include "src/sfnt/SkOTTable_loca.h"

#pragma pack(push, 1)

struct SkOTTableEmbeddedBitmapData {
    static const SK_OT_CHAR TAG0 = 'E';
    static const SK_OT_CHAR TAG1 = 'B';
    static const SK_OT_CHAR TAG2 = 'D';
    static const SK_OT_CHAR TAG3 = 'T';
    static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableEmbeddedBitmapData>::value;

    SK_OT_Fixed version;
    static const SK_OT_Fixed version_initial = SkTEndian_SwapBE32(0x00020000);

    struct BigGlyphMetrics {
        SK_OT_BYTE height;
        SK_OT_BYTE width;
        SK_OT_CHAR horiBearingX;
        SK_OT_CHAR horiBearingY;
        SK_OT_BYTE horiAdvance;
        SK_OT_CHAR vertBearingX;
        SK_OT_CHAR vertBearingY;
        SK_OT_BYTE vertAdvance;
    };

    struct SmallGlyphMetrics {
        SK_OT_BYTE height;
        SK_OT_BYTE width;
        SK_OT_CHAR bearingX;
        SK_OT_CHAR bearingY;
        SK_OT_BYTE advance;
    };

    // Small metrics, byte-aligned data.
    struct Format1 {
        SmallGlyphMetrics smallGlyphMetrics;
        //SK_OT_BYTE[] byteAlignedBitmap;
    };

    // Small metrics, bit-aligned data.
    struct Format2 {
        SmallGlyphMetrics smallGlyphMetrics;
        //SK_OT_BYTE[] bitAlignedBitmap;
    };

    // Format 3 is not used.

    // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), compressed data.
    // Only used on Mac.
    struct Format4 {
        SK_OT_ULONG whiteTreeOffset;
        SK_OT_ULONG blackTreeOffset;
        SK_OT_ULONG glyphDataOffset;
    };

    // EBLC metrics (IndexSubTable::header::indexFormat 2 or 5), bit-aligned data.
    struct Format5 {
        //SK_OT_BYTE[] bitAlignedBitmap;
    };

    // Big metrics, byte-aligned data.
    struct Format6 {
        BigGlyphMetrics bigGlyphMetrics;
        //SK_OT_BYTE[] byteAlignedBitmap;
    };

    // Big metrics, bit-aligned data.
    struct Format7 {
        BigGlyphMetrics bigGlyphMetrics;
        //SK_OT_BYTE[] bitAlignedBitmap;
    };

    struct EBDTComponent {
        SK_OT_USHORT glyphCode; // Component glyph code
        SK_OT_CHAR xOffset; // Position of component left
        SK_OT_CHAR yOffset; // Position of component top
    };

    struct Format8 {
        SmallGlyphMetrics smallMetrics; // Metrics information for the glyph
        SK_OT_BYTE pad; // Pad to short boundary
        SK_OT_USHORT numComponents; // Number of components
        //EBDTComponent componentArray[numComponents]; // Glyph code, offset array
    };

    struct Format9 {
        BigGlyphMetrics bigMetrics; // Metrics information for the glyph
        SK_OT_USHORT numComponents; // Number of components
        //EBDTComponent componentArray[numComponents]; // Glyph code, offset array
    };
};

#pragma pack(pop)

#endif
