/* * 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_gasp_DEFINED #define SkOTTable_gasp_DEFINED #include "SkEndian.h" #include "SkOTTableTypes.h" #pragma pack(push, 1) struct SkOTTableGridAndScanProcedure { static const SK_OT_CHAR TAG0 = 'g'; static const SK_OT_CHAR TAG1 = 'a'; static const SK_OT_CHAR TAG2 = 's'; static const SK_OT_CHAR TAG3 = 'p'; static const SK_OT_ULONG TAG = SkOTTableTAG::value; SK_OT_USHORT version; static const SK_OT_USHORT version0 = SkTEndian_SwapBE16(0); static const SK_OT_USHORT version1 = SkTEndian_SwapBE16(1); SK_OT_USHORT numRanges; struct GaspRange { SK_OT_USHORT maxPPEM; union behavior { struct Field { //8-15 SK_OT_BYTE_BITFIELD( Reserved08, Reserved09, Reserved10, Reserved11, Reserved12, Reserved13, Reserved14, Reserved15) //0-7 SK_OT_BYTE_BITFIELD( Gridfit, DoGray, SymmetricGridfit, // Version 1 SymmetricSmoothing, // Version 1 Reserved04, Reserved05, Reserved06, Reserved07) } field; struct Raw { static const SK_OT_USHORT GridfitMask = SkTEndian_SwapBE16(1 << 0); static const SK_OT_USHORT DoGrayMask = SkTEndian_SwapBE16(1 << 1); static const SK_OT_USHORT SymmetricGridfitMask = SkTEndian_SwapBE16(1 << 2); static const SK_OT_USHORT SymmetricSmoothingMask = SkTEndian_SwapBE16(1 << 3); SK_OT_USHORT value; } raw; } flags; }; //gaspRange[numRanges] }; #pragma pack(pop) #include static_assert(offsetof(SkOTTableGridAndScanProcedure, numRanges) == 2, "SkOTTableGridAndScanProcedure_numRanges_not_at_2"); static_assert(sizeof(SkOTTableGridAndScanProcedure) == 4, "sizeof_SkOTTableGridAndScanProcedure_not_4"); #endif