/*
|
* Copyright 2012 Google Inc.
|
*
|
* Use of this source code is governed by a BSD-style license that can be
|
* found in the LICENSE file.
|
*/
|
|
#ifndef SkSFNTHeader_DEFINED
|
#define SkSFNTHeader_DEFINED
|
|
#include "SkEndian.h"
|
#include "SkOTTableTypes.h"
|
|
//All SK_SFNT_ prefixed types should be considered as big endian.
|
typedef uint16_t SK_SFNT_USHORT;
|
typedef uint32_t SK_SFNT_ULONG;
|
|
#pragma pack(push, 1)
|
|
struct SkSFNTHeader {
|
SK_SFNT_ULONG fontType;
|
struct fontType_WindowsTrueType {
|
static const SK_OT_CHAR TAG0 = 0;
|
static const SK_OT_CHAR TAG1 = 1;
|
static const SK_OT_CHAR TAG2 = 0;
|
static const SK_OT_CHAR TAG3 = 0;
|
static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_WindowsTrueType>::value;
|
};
|
struct fontType_MacTrueType {
|
static const SK_OT_CHAR TAG0 = 't';
|
static const SK_OT_CHAR TAG1 = 'r';
|
static const SK_OT_CHAR TAG2 = 'u';
|
static const SK_OT_CHAR TAG3 = 'e';
|
static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_MacTrueType>::value;
|
};
|
struct fontType_PostScript {
|
static const SK_OT_CHAR TAG0 = 't';
|
static const SK_OT_CHAR TAG1 = 'y';
|
static const SK_OT_CHAR TAG2 = 'p';
|
static const SK_OT_CHAR TAG3 = '1';
|
static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_PostScript>::value;
|
};
|
struct fontType_OpenTypeCFF {
|
static const SK_OT_CHAR TAG0 = 'O';
|
static const SK_OT_CHAR TAG1 = 'T';
|
static const SK_OT_CHAR TAG2 = 'T';
|
static const SK_OT_CHAR TAG3 = 'O';
|
static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_OpenTypeCFF>::value;
|
};
|
|
SK_SFNT_USHORT numTables;
|
SK_SFNT_USHORT searchRange;
|
SK_SFNT_USHORT entrySelector;
|
SK_SFNT_USHORT rangeShift;
|
|
struct TableDirectoryEntry {
|
SK_SFNT_ULONG tag;
|
SK_SFNT_ULONG checksum;
|
SK_SFNT_ULONG offset; //From beginning of header.
|
SK_SFNT_ULONG logicalLength;
|
}; //tableDirectoryEntries[numTables]
|
};
|
|
#pragma pack(pop)
|
|
|
static_assert(sizeof(SkSFNTHeader) == 12, "sizeof_SkSFNTHeader_not_12");
|
static_assert(sizeof(SkSFNTHeader::TableDirectoryEntry) == 16, "sizeof_SkSFNTHeader_TableDirectoryEntry_not_16");
|
|
#endif
|