1 /* 2 * Copyright © 2023 Behdad Esfahbod 3 * 4 * This is part of HarfBuzz, a text shaping library. 5 * 6 * Permission is hereby granted, without written agreement and without 7 * license or royalty fees, to use, copy, modify, and distribute this 8 * software and its documentation for any purpose, provided that the 9 * above copyright notice and the following two paragraphs appear in 10 * all copies of this software. 11 * 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16 * DAMAGE. 17 * 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23 */ 24 25 #ifndef HB_OUTLINE_HH 26 #define HB_OUTLINE_HH 27 28 #include "hb.hh" 29 30 #include "hb-draw.hh" 31 32 33 struct hb_outline_point_t 34 { 35 enum class type_t 36 { 37 MOVE_TO, 38 LINE_TO, 39 QUADRATIC_TO, 40 CUBIC_TO, 41 }; 42 hb_outline_point_thb_outline_point_t43 hb_outline_point_t (float x, float y, type_t type) : 44 x (x), y (y), type (type) {} 45 46 float x, y; 47 type_t type; 48 }; 49 50 struct hb_outline_vector_t 51 { normalize_lenhb_outline_vector_t52 float normalize_len () 53 { 54 float len = hypotf (x, y); 55 if (len) 56 { 57 x /= len; 58 y /= len; 59 } 60 return len; 61 } 62 63 float x, y; 64 }; 65 66 struct hb_outline_t 67 { resethb_outline_t68 void reset () { points.shrink (0, false); contours.resize (0); } 69 70 HB_INTERNAL void replay (hb_draw_funcs_t *pen, void *pen_data) const; 71 HB_INTERNAL float control_area () const; 72 HB_INTERNAL void embolden (float x_strength, float y_strength, 73 float x_shift, float y_shift); 74 75 hb_vector_t<hb_outline_point_t> points; 76 hb_vector_t<unsigned> contours; 77 }; 78 79 HB_INTERNAL hb_draw_funcs_t * 80 hb_outline_recording_pen_get_funcs (); 81 82 83 #endif /* HB_OUTLINE_HH */ 84