123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /*
- * 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 SkOTTable_head_DEFINED
- #define SkOTTable_head_DEFINED
- #include "src/core/SkEndian.h"
- #include "src/sfnt/SkOTTableTypes.h"
- #pragma pack(push, 1)
- struct SkOTTableHead {
- static const SK_OT_CHAR TAG0 = 'h';
- static const SK_OT_CHAR TAG1 = 'e';
- static const SK_OT_CHAR TAG2 = 'a';
- static const SK_OT_CHAR TAG3 = 'd';
- static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableHead>::value;
- SK_OT_Fixed version;
- static const SK_OT_Fixed version1 = SkTEndian_SwapBE32(0x00010000);
- SK_OT_Fixed fontRevision;
- static const uint32_t fontChecksum = 0xB1B0AFBA; //checksum of all TT fonts
- SK_OT_ULONG checksumAdjustment;
- SK_OT_ULONG magicNumber;
- static const SK_OT_ULONG magicNumberConst = SkTEndian_SwapBE32(0x5F0F3CF5);
- union Flags {
- struct Field {
- //8-15
- SK_OT_BYTE_BITFIELD(
- GXMetamorphosis_Apple,
- HasStrongRTL_Apple,
- HasIndicStyleRearrangement,
- AgfaMicroTypeExpressProcessed,
- FontConverted,
- DesignedForClearType,
- LastResort,
- Reserved15)
- //0-7
- SK_OT_BYTE_BITFIELD(
- BaselineAtY0,
- LeftSidebearingAtX0,
- InstructionsDependOnPointSize,
- IntegerScaling,
- InstructionsAlterAdvanceWidth,
- VerticalCenteredGlyphs_Apple,
- Reserved06,
- RequiresLayout_Apple)
- } field;
- struct Raw {
- static const SK_OT_USHORT BaselineAtY0Mask = SkTEndian_SwapBE16(1 << 0);
- static const SK_OT_USHORT LeftSidebearingAtX0Mask = SkTEndian_SwapBE16(1 << 1);
- static const SK_OT_USHORT InstructionsDependOnPointSizeMask = SkTEndian_SwapBE16(1 << 2);
- static const SK_OT_USHORT IntegerScalingMask = SkTEndian_SwapBE16(1 << 3);
- static const SK_OT_USHORT InstructionsAlterAdvanceWidthMask = SkTEndian_SwapBE16(1 << 4);
- static const SK_OT_USHORT VerticalCenteredGlyphs_AppleMask = SkTEndian_SwapBE16(1 << 5);
- //Reserved
- static const SK_OT_USHORT RequiresLayout_AppleMask = SkTEndian_SwapBE16(1 << 7);
- static const SK_OT_USHORT GXMetamorphosis_AppleMask = SkTEndian_SwapBE16(1 << 8);
- static const SK_OT_USHORT HasStrongRTL_AppleMask = SkTEndian_SwapBE16(1 << 9);
- static const SK_OT_USHORT HasIndicStyleRearrangementMask = SkTEndian_SwapBE16(1 << 10);
- static const SK_OT_USHORT AgfaMicroTypeExpressProcessedMask = SkTEndian_SwapBE16(1 << 11);
- static const SK_OT_USHORT FontConvertedMask = SkTEndian_SwapBE16(1 << 12);
- static const SK_OT_USHORT DesignedForClearTypeMask = SkTEndian_SwapBE16(1 << 13);
- static const SK_OT_USHORT LastResortMask = SkTEndian_SwapBE16(1 << 14);
- //Reserved
- SK_OT_USHORT value;
- } raw;
- } flags;
- SK_OT_USHORT unitsPerEm;
- SK_OT_LONGDATETIME created;
- SK_OT_LONGDATETIME modified;
- SK_OT_SHORT xMin;
- SK_OT_SHORT yMin;
- SK_OT_SHORT xMax;
- SK_OT_SHORT yMax;
- union MacStyle {
- struct Field {
- //8-15
- SK_OT_BYTE_BITFIELD(
- Reserved08,
- Reserved09,
- Reserved10,
- Reserved11,
- Reserved12,
- Reserved13,
- Reserved14,
- Reserved15)
- //0-7
- SK_OT_BYTE_BITFIELD(
- Bold,
- Italic,
- Underline,
- Outline,
- Shadow,
- Condensed,
- Extended,
- Reserved07)
- } field;
- struct Raw {
- static const SK_OT_USHORT BoldMask = SkTEndian_SwapBE16(1);
- static const SK_OT_USHORT ItalicMask = SkTEndian_SwapBE16(1 << 1);
- static const SK_OT_USHORT UnderlineMask = SkTEndian_SwapBE16(1 << 2);
- static const SK_OT_USHORT OutlineMask = SkTEndian_SwapBE16(1 << 3);
- static const SK_OT_USHORT ShadowMask = SkTEndian_SwapBE16(1 << 4);
- static const SK_OT_USHORT CondensedMask = SkTEndian_SwapBE16(1 << 5);
- static const SK_OT_USHORT ExtendedMask = SkTEndian_SwapBE16(1 << 6);
- SK_OT_USHORT value;
- } raw;
- } macStyle;
- SK_OT_USHORT lowestRecPPEM;
- struct FontDirectionHint {
- enum Value : SK_OT_SHORT {
- FullyMixedDirectionalGlyphs = SkTEndian_SwapBE16(0),
- OnlyStronglyLTR = SkTEndian_SwapBE16(1),
- StronglyLTR = SkTEndian_SwapBE16(2),
- OnlyStronglyRTL = static_cast<SK_OT_SHORT>(SkTEndian_SwapBE16((uint16_t)-1)),
- StronglyRTL = static_cast<SK_OT_SHORT>(SkTEndian_SwapBE16((uint16_t)-2)),
- } value;
- } fontDirectionHint;
- struct IndexToLocFormat {
- enum Value : SK_OT_SHORT {
- ShortOffsets = SkTEndian_SwapBE16(0),
- LongOffsets = SkTEndian_SwapBE16(1),
- } value;
- } indexToLocFormat;
- struct GlyphDataFormat {
- enum Value : SK_OT_SHORT {
- CurrentFormat = SkTEndian_SwapBE16(0),
- } value;
- } glyphDataFormat;
- };
- #pragma pack(pop)
- #include <stddef.h>
- static_assert(offsetof(SkOTTableHead, glyphDataFormat) == 52, "SkOTTableHead_glyphDataFormat_not_at_52");
- static_assert(sizeof(SkOTTableHead) == 54, "sizeof_SkOTTableHead_not_54");
- #endif
|