xref: /aosp_15_r20/external/harfbuzz_ng/src/OT/glyf/GlyphHeader.hh (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
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