1740c3f17f7f37fca5268b60a83448953f075d8d1bungeman/* 2740c3f17f7f37fca5268b60a83448953f075d8d1bungeman * Copyright 2014 Google Inc. 3740c3f17f7f37fca5268b60a83448953f075d8d1bungeman * 4740c3f17f7f37fca5268b60a83448953f075d8d1bungeman * Use of this source code is governed by a BSD-style license that can be 5740c3f17f7f37fca5268b60a83448953f075d8d1bungeman * found in the LICENSE file. 6740c3f17f7f37fca5268b60a83448953f075d8d1bungeman */ 7740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 8740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#ifndef SkOTTable_gasp_DEFINED 9740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#define SkOTTable_gasp_DEFINED 10740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 11740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#include "SkEndian.h" 12740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#include "SkOTTableTypes.h" 13740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#include "SkTypedEnum.h" 14740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 15740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#pragma pack(push, 1) 16740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 17740c3f17f7f37fca5268b60a83448953f075d8d1bungemanstruct SkOTTableGridAndScanProcedure { 18740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_CHAR TAG0 = 'g'; 19740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_CHAR TAG1 = 'a'; 20740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_CHAR TAG2 = 's'; 21740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_CHAR TAG3 = 'p'; 22740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableGridAndScanProcedure>::value; 23740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 24740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SK_OT_USHORT version; 25740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_USHORT version0 = SkTEndian_SwapBE16(0); 26740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_USHORT version1 = SkTEndian_SwapBE16(1); 27740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 28740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SK_OT_USHORT numRanges; 29740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 30740c3f17f7f37fca5268b60a83448953f075d8d1bungeman struct GaspRange { 31740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SK_OT_USHORT maxPPEM; 32740c3f17f7f37fca5268b60a83448953f075d8d1bungeman union behavior { 33740c3f17f7f37fca5268b60a83448953f075d8d1bungeman struct Field { 34740c3f17f7f37fca5268b60a83448953f075d8d1bungeman //8-15 35740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SK_OT_BYTE_BITFIELD( 36740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved08, 37740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved09, 38740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved10, 39740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved11, 40740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved12, 41740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved13, 42740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved14, 43740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved15) 44740c3f17f7f37fca5268b60a83448953f075d8d1bungeman //0-7 45740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SK_OT_BYTE_BITFIELD( 46740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Gridfit, 47740c3f17f7f37fca5268b60a83448953f075d8d1bungeman DoGray, 48740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SymmetricGridfit, // Version 1 49740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SymmetricSmoothing, // Version 1 50740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved04, 51740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved05, 52740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved06, 53740c3f17f7f37fca5268b60a83448953f075d8d1bungeman Reserved07) 54740c3f17f7f37fca5268b60a83448953f075d8d1bungeman } field; 55740c3f17f7f37fca5268b60a83448953f075d8d1bungeman struct Raw { 56740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_USHORT GridfitMask = SkTEndian_SwapBE16(1 << 0); 57740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_USHORT DoGrayMask = SkTEndian_SwapBE16(1 << 1); 58740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_USHORT SymmetricGridfitMask = SkTEndian_SwapBE16(1 << 2); 59740c3f17f7f37fca5268b60a83448953f075d8d1bungeman static const SK_OT_USHORT SymmetricSmoothingMask = SkTEndian_SwapBE16(1 << 3); 60740c3f17f7f37fca5268b60a83448953f075d8d1bungeman SK_OT_USHORT value; 61740c3f17f7f37fca5268b60a83448953f075d8d1bungeman } raw; 62740c3f17f7f37fca5268b60a83448953f075d8d1bungeman } flags; 63740c3f17f7f37fca5268b60a83448953f075d8d1bungeman }; //gaspRange[numRanges] 64740c3f17f7f37fca5268b60a83448953f075d8d1bungeman}; 65740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 66740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#pragma pack(pop) 67740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 68740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 69740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#include <stddef.h> 70740c3f17f7f37fca5268b60a83448953f075d8d1bungemanSK_COMPILE_ASSERT(offsetof(SkOTTableGridAndScanProcedure, numRanges) == 2, SkOTTableGridAndScanProcedure_numRanges_not_at_2); 71740c3f17f7f37fca5268b60a83448953f075d8d1bungemanSK_COMPILE_ASSERT(sizeof(SkOTTableGridAndScanProcedure) == 4, sizeof_SkOTTableGridAndScanProcedure_not_4); 72740c3f17f7f37fca5268b60a83448953f075d8d1bungeman 73740c3f17f7f37fca5268b60a83448953f075d8d1bungeman#endif 74