1*2d1272b8SAndroid Build Coastguard Worker /* 2*2d1272b8SAndroid Build Coastguard Worker * Copyright © 2011,2012 Google, Inc. 3*2d1272b8SAndroid Build Coastguard Worker * 4*2d1272b8SAndroid Build Coastguard Worker * This is part of HarfBuzz, a text shaping library. 5*2d1272b8SAndroid Build Coastguard Worker * 6*2d1272b8SAndroid Build Coastguard Worker * Permission is hereby granted, without written agreement and without 7*2d1272b8SAndroid Build Coastguard Worker * license or royalty fees, to use, copy, modify, and distribute this 8*2d1272b8SAndroid Build Coastguard Worker * software and its documentation for any purpose, provided that the 9*2d1272b8SAndroid Build Coastguard Worker * above copyright notice and the following two paragraphs appear in 10*2d1272b8SAndroid Build Coastguard Worker * all copies of this software. 11*2d1272b8SAndroid Build Coastguard Worker * 12*2d1272b8SAndroid Build Coastguard Worker * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13*2d1272b8SAndroid Build Coastguard Worker * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14*2d1272b8SAndroid Build Coastguard Worker * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15*2d1272b8SAndroid Build Coastguard Worker * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16*2d1272b8SAndroid Build Coastguard Worker * DAMAGE. 17*2d1272b8SAndroid Build Coastguard Worker * 18*2d1272b8SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19*2d1272b8SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20*2d1272b8SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21*2d1272b8SAndroid Build Coastguard Worker * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22*2d1272b8SAndroid Build Coastguard Worker * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23*2d1272b8SAndroid Build Coastguard Worker * 24*2d1272b8SAndroid Build Coastguard Worker * Google Author(s): Behdad Esfahbod 25*2d1272b8SAndroid Build Coastguard Worker */ 26*2d1272b8SAndroid Build Coastguard Worker 27*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_OT_HHEA_TABLE_HH 28*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_HHEA_TABLE_HH 29*2d1272b8SAndroid Build Coastguard Worker 30*2d1272b8SAndroid Build Coastguard Worker #include "hb-open-type.hh" 31*2d1272b8SAndroid Build Coastguard Worker 32*2d1272b8SAndroid Build Coastguard Worker /* 33*2d1272b8SAndroid Build Coastguard Worker * hhea -- Horizontal Header 34*2d1272b8SAndroid Build Coastguard Worker * https://docs.microsoft.com/en-us/typography/opentype/spec/hhea 35*2d1272b8SAndroid Build Coastguard Worker * vhea -- Vertical Header 36*2d1272b8SAndroid Build Coastguard Worker * https://docs.microsoft.com/en-us/typography/opentype/spec/vhea 37*2d1272b8SAndroid Build Coastguard Worker */ 38*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_hhea HB_TAG('h','h','e','a') 39*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_vhea HB_TAG('v','h','e','a') 40*2d1272b8SAndroid Build Coastguard Worker 41*2d1272b8SAndroid Build Coastguard Worker 42*2d1272b8SAndroid Build Coastguard Worker namespace OT { 43*2d1272b8SAndroid Build Coastguard Worker 44*2d1272b8SAndroid Build Coastguard Worker 45*2d1272b8SAndroid Build Coastguard Worker template <typename T> 46*2d1272b8SAndroid Build Coastguard Worker struct _hea 47*2d1272b8SAndroid Build Coastguard Worker { has_dataOT::_hea48*2d1272b8SAndroid Build Coastguard Worker bool has_data () const { return version.major; } 49*2d1272b8SAndroid Build Coastguard Worker sanitizeOT::_hea50*2d1272b8SAndroid Build Coastguard Worker bool sanitize (hb_sanitize_context_t *c) const 51*2d1272b8SAndroid Build Coastguard Worker { 52*2d1272b8SAndroid Build Coastguard Worker TRACE_SANITIZE (this); 53*2d1272b8SAndroid Build Coastguard Worker return_trace (c->check_struct (this) && 54*2d1272b8SAndroid Build Coastguard Worker hb_barrier () && 55*2d1272b8SAndroid Build Coastguard Worker likely (version.major == 1)); 56*2d1272b8SAndroid Build Coastguard Worker } 57*2d1272b8SAndroid Build Coastguard Worker 58*2d1272b8SAndroid Build Coastguard Worker public: 59*2d1272b8SAndroid Build Coastguard Worker FixedVersion<>version; /* 0x00010000u for version 1.0. */ 60*2d1272b8SAndroid Build Coastguard Worker FWORD ascender; /* Typographic ascent. */ 61*2d1272b8SAndroid Build Coastguard Worker FWORD descender; /* Typographic descent. */ 62*2d1272b8SAndroid Build Coastguard Worker FWORD lineGap; /* Typographic line gap. */ 63*2d1272b8SAndroid Build Coastguard Worker UFWORD advanceMax; /* Maximum advance width/height value in 64*2d1272b8SAndroid Build Coastguard Worker * metrics table. */ 65*2d1272b8SAndroid Build Coastguard Worker FWORD minLeadingBearing; 66*2d1272b8SAndroid Build Coastguard Worker /* Minimum left/top sidebearing value in 67*2d1272b8SAndroid Build Coastguard Worker * metrics table. */ 68*2d1272b8SAndroid Build Coastguard Worker FWORD minTrailingBearing; 69*2d1272b8SAndroid Build Coastguard Worker /* Minimum right/bottom sidebearing value; 70*2d1272b8SAndroid Build Coastguard Worker * calculated as Min(aw - lsb - 71*2d1272b8SAndroid Build Coastguard Worker * (xMax - xMin)) for horizontal. */ 72*2d1272b8SAndroid Build Coastguard Worker FWORD maxExtent; /* horizontal: Max(lsb + (xMax - xMin)), 73*2d1272b8SAndroid Build Coastguard Worker * vertical: minLeadingBearing+(yMax-yMin). */ 74*2d1272b8SAndroid Build Coastguard Worker HBINT16 caretSlopeRise; /* Used to calculate the slope of the 75*2d1272b8SAndroid Build Coastguard Worker * cursor (rise/run); 1 for vertical caret, 76*2d1272b8SAndroid Build Coastguard Worker * 0 for horizontal.*/ 77*2d1272b8SAndroid Build Coastguard Worker HBINT16 caretSlopeRun; /* 0 for vertical caret, 1 for horizontal. */ 78*2d1272b8SAndroid Build Coastguard Worker HBINT16 caretOffset; /* The amount by which a slanted 79*2d1272b8SAndroid Build Coastguard Worker * highlight on a glyph needs 80*2d1272b8SAndroid Build Coastguard Worker * to be shifted to produce the 81*2d1272b8SAndroid Build Coastguard Worker * best appearance. Set to 0 for 82*2d1272b8SAndroid Build Coastguard Worker * non-slanted fonts. */ 83*2d1272b8SAndroid Build Coastguard Worker HBINT16 reserved1; /* Set to 0. */ 84*2d1272b8SAndroid Build Coastguard Worker HBINT16 reserved2; /* Set to 0. */ 85*2d1272b8SAndroid Build Coastguard Worker HBINT16 reserved3; /* Set to 0. */ 86*2d1272b8SAndroid Build Coastguard Worker HBINT16 reserved4; /* Set to 0. */ 87*2d1272b8SAndroid Build Coastguard Worker HBINT16 metricDataFormat;/* 0 for current format. */ 88*2d1272b8SAndroid Build Coastguard Worker HBUINT16 numberOfLongMetrics; 89*2d1272b8SAndroid Build Coastguard Worker /* Number of LongMetric entries in metric 90*2d1272b8SAndroid Build Coastguard Worker * table. */ 91*2d1272b8SAndroid Build Coastguard Worker public: 92*2d1272b8SAndroid Build Coastguard Worker DEFINE_SIZE_STATIC (36); 93*2d1272b8SAndroid Build Coastguard Worker }; 94*2d1272b8SAndroid Build Coastguard Worker 95*2d1272b8SAndroid Build Coastguard Worker struct hhea : _hea<hhea> { 96*2d1272b8SAndroid Build Coastguard Worker static constexpr hb_tag_t tableTag = HB_OT_TAG_hhea; 97*2d1272b8SAndroid Build Coastguard Worker }; 98*2d1272b8SAndroid Build Coastguard Worker struct vhea : _hea<vhea> { 99*2d1272b8SAndroid Build Coastguard Worker static constexpr hb_tag_t tableTag = HB_OT_TAG_vhea; 100*2d1272b8SAndroid Build Coastguard Worker }; 101*2d1272b8SAndroid Build Coastguard Worker 102*2d1272b8SAndroid Build Coastguard Worker 103*2d1272b8SAndroid Build Coastguard Worker } /* namespace OT */ 104*2d1272b8SAndroid Build Coastguard Worker 105*2d1272b8SAndroid Build Coastguard Worker 106*2d1272b8SAndroid Build Coastguard Worker #endif /* HB_OT_HHEA_TABLE_HH */ 107