1*2d1272b8SAndroid Build Coastguard Worker #ifndef OT_GLYF_GLYPHHEADER_HH 2*2d1272b8SAndroid Build Coastguard Worker #define OT_GLYF_GLYPHHEADER_HH 3*2d1272b8SAndroid Build Coastguard Worker 4*2d1272b8SAndroid Build Coastguard Worker 5*2d1272b8SAndroid Build Coastguard Worker #include "../../hb-open-type.hh" 6*2d1272b8SAndroid Build Coastguard Worker 7*2d1272b8SAndroid Build Coastguard Worker 8*2d1272b8SAndroid Build Coastguard Worker namespace OT { 9*2d1272b8SAndroid Build Coastguard Worker namespace glyf_impl { 10*2d1272b8SAndroid Build Coastguard Worker 11*2d1272b8SAndroid Build Coastguard Worker 12*2d1272b8SAndroid Build Coastguard Worker struct GlyphHeader 13*2d1272b8SAndroid Build Coastguard Worker { has_dataOT::glyf_impl::GlyphHeader14*2d1272b8SAndroid Build Coastguard Worker bool has_data () const { return numberOfContours; } 15*2d1272b8SAndroid Build Coastguard Worker 16*2d1272b8SAndroid Build Coastguard Worker template <typename accelerator_t> get_extents_without_var_scaledOT::glyf_impl::GlyphHeader17*2d1272b8SAndroid Build Coastguard Worker bool get_extents_without_var_scaled (hb_font_t *font, const accelerator_t &glyf_accelerator, 18*2d1272b8SAndroid Build Coastguard Worker hb_codepoint_t gid, hb_glyph_extents_t *extents) const 19*2d1272b8SAndroid Build Coastguard Worker { 20*2d1272b8SAndroid Build Coastguard Worker /* Undocumented rasterizer behavior: shift glyph to the left by (lsb - xMin), i.e., xMin = lsb */ 21*2d1272b8SAndroid Build Coastguard Worker /* extents->x_bearing = hb_min (glyph_header.xMin, glyph_header.xMax); */ 22*2d1272b8SAndroid Build Coastguard Worker int lsb = hb_min (xMin, xMax); 23*2d1272b8SAndroid Build Coastguard Worker (void) glyf_accelerator.hmtx->get_leading_bearing_without_var_unscaled (gid, &lsb); 24*2d1272b8SAndroid Build Coastguard Worker extents->x_bearing = lsb; 25*2d1272b8SAndroid Build Coastguard Worker extents->y_bearing = hb_max (yMin, yMax); 26*2d1272b8SAndroid Build Coastguard Worker extents->width = hb_max (xMin, xMax) - hb_min (xMin, xMax); 27*2d1272b8SAndroid Build Coastguard Worker extents->height = hb_min (yMin, yMax) - hb_max (yMin, yMax); 28*2d1272b8SAndroid Build Coastguard Worker 29*2d1272b8SAndroid Build Coastguard Worker font->scale_glyph_extents (extents); 30*2d1272b8SAndroid Build Coastguard Worker 31*2d1272b8SAndroid Build Coastguard Worker return true; 32*2d1272b8SAndroid Build Coastguard Worker } 33*2d1272b8SAndroid Build Coastguard Worker 34*2d1272b8SAndroid Build Coastguard Worker HBINT16 numberOfContours; 35*2d1272b8SAndroid Build Coastguard Worker /* If the number of contours is 36*2d1272b8SAndroid Build Coastguard Worker * greater than or equal to zero, 37*2d1272b8SAndroid Build Coastguard Worker * this is a simple glyph; if negative, 38*2d1272b8SAndroid Build Coastguard Worker * this is a composite glyph. */ 39*2d1272b8SAndroid Build Coastguard Worker FWORD xMin; /* Minimum x for coordinate data. */ 40*2d1272b8SAndroid Build Coastguard Worker FWORD yMin; /* Minimum y for coordinate data. */ 41*2d1272b8SAndroid Build Coastguard Worker FWORD xMax; /* Maximum x for coordinate data. */ 42*2d1272b8SAndroid Build Coastguard Worker FWORD yMax; /* Maximum y for coordinate data. */ 43*2d1272b8SAndroid Build Coastguard Worker public: 44*2d1272b8SAndroid Build Coastguard Worker DEFINE_SIZE_STATIC (10); 45*2d1272b8SAndroid Build Coastguard Worker }; 46*2d1272b8SAndroid Build Coastguard Worker 47*2d1272b8SAndroid Build Coastguard Worker 48*2d1272b8SAndroid Build Coastguard Worker } /* namespace glyf_impl */ 49*2d1272b8SAndroid Build Coastguard Worker } /* namespace OT */ 50*2d1272b8SAndroid Build Coastguard Worker 51*2d1272b8SAndroid Build Coastguard Worker 52*2d1272b8SAndroid Build Coastguard Worker #endif /* OT_GLYF_GLYPHHEADER_HH */ 53