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