diff --git a/src/Makefile.sources b/src/Makefile.sources index 748dd17f7..9a96ad69f 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -85,6 +85,8 @@ HB_BASE_sources = \ hb-ot-layout-common.hh \ hb-ot-layout-gdef-table.hh \ hb-ot-layout-gpos-table.hh \ + hb-outline.hh \ + hb-outline.cc \ hb-paint.cc \ hb-paint.hh \ hb-paint-extents.cc \ diff --git a/src/harfbuzz-subset.cc b/src/harfbuzz-subset.cc index 196e32f5c..c0e23b3eb 100644 --- a/src/harfbuzz-subset.cc +++ b/src/harfbuzz-subset.cc @@ -41,6 +41,7 @@ #include "hb-ot-shaper-vowel-constraints.cc" #include "hb-ot-tag.cc" #include "hb-ot-var.cc" +#include "hb-outline.cc" #include "hb-paint-extents.cc" #include "hb-paint.cc" #include "hb-set.cc" diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index 436f23dc2..d7e8a93f3 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -46,6 +46,7 @@ #include "hb-ot-shaper-vowel-constraints.cc" #include "hb-ot-tag.cc" #include "hb-ot-var.cc" +#include "hb-outline.cc" #include "hb-paint-extents.cc" #include "hb-paint.cc" #include "hb-set.cc" diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc index 86e778615..70e7c5e22 100644 --- a/src/hb-ot-font.cc +++ b/src/hb-ot-font.cc @@ -34,7 +34,7 @@ #include "hb-font.hh" #include "hb-machinery.hh" #include "hb-ot-face.hh" -#include "hb-draw-embolden.hh" +#include "hb-outline.hh" #include "hb-ot-cmap-table.hh" #include "hb-ot-glyf-table.hh" diff --git a/src/hb-draw-embolden.hh b/src/hb-outline.cc similarity index 89% rename from src/hb-draw-embolden.hh rename to src/hb-outline.cc index 1bc234a29..7ed486a80 100644 --- a/src/hb-draw-embolden.hh +++ b/src/hb-outline.cc @@ -22,58 +22,14 @@ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ -#ifndef HB_DRAW_EMBOLDEN_HH -#define HB_DRAW_EMBOLDEN_HH - #include "hb.hh" -#include "hb-draw.hh" +#ifndef HB_NO_OUTLINE +#include "hb-outline.hh" -struct hb_outline_point_t -{ - enum class type_t - { - MOVE_TO, - LINE_TO, - QUADRATIC_TO, - CUBIC_TO, - }; +#include "hb-machinery.hh" - hb_outline_point_t (float x, float y, type_t type) : - x (x), y (y), type (type) {} - - float x, y; - type_t type; -}; - -struct hb_outline_vector_t -{ - float normalize_len () - { - float len = hypotf (x, y); - if (len) - { - x /= len; - y /= len; - } - return len; - } - - float x, y; -}; - -struct hb_outline_t -{ - void reset () { points.shrink (0, false); contours.resize (0); } - - HB_INTERNAL void replay (hb_draw_funcs_t *pen, void *pen_data) const; - HB_INTERNAL float area () const; - HB_INTERNAL void embolden (float x_strength, float y_strength); - - hb_vector_t points; - hb_vector_t contours; -}; void hb_outline_t::replay (hb_draw_funcs_t *pen, void *pen_data) const { @@ -347,11 +303,11 @@ void free_static_outline_recording_pen_funcs () static_outline_recording_pen_funcs.free_instance (); } -static hb_draw_funcs_t * +hb_draw_funcs_t * hb_outline_recording_pen_get_funcs () { return static_outline_recording_pen_funcs.get_unconst (); } -#endif /* HB_DRAW_EMBOLDEN_HH */ +#endif diff --git a/src/hb-outline.hh b/src/hb-outline.hh new file mode 100644 index 000000000..ffb3e52d1 --- /dev/null +++ b/src/hb-outline.hh @@ -0,0 +1,82 @@ +/* + * Copyright © 2023 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_OUTLINE_HH +#define HB_OUTLINE_HH + +#include "hb.hh" + +#include "hb-draw.hh" + + +struct hb_outline_point_t +{ + enum class type_t + { + MOVE_TO, + LINE_TO, + QUADRATIC_TO, + CUBIC_TO, + }; + + hb_outline_point_t (float x, float y, type_t type) : + x (x), y (y), type (type) {} + + float x, y; + type_t type; +}; + +struct hb_outline_vector_t +{ + float normalize_len () + { + float len = hypotf (x, y); + if (len) + { + x /= len; + y /= len; + } + return len; + } + + float x, y; +}; + +struct hb_outline_t +{ + void reset () { points.shrink (0, false); contours.resize (0); } + + HB_INTERNAL void replay (hb_draw_funcs_t *pen, void *pen_data) const; + HB_INTERNAL float area () const; + HB_INTERNAL void embolden (float x_strength, float y_strength); + + hb_vector_t points; + hb_vector_t contours; +}; + +HB_INTERNAL hb_draw_funcs_t * +hb_outline_recording_pen_get_funcs (); + + +#endif /* HB_OUTLINE_HH */ diff --git a/src/meson.build b/src/meson.build index 62610ecb5..7e10de8d8 100644 --- a/src/meson.build +++ b/src/meson.build @@ -94,6 +94,8 @@ hb_base_sources = files( 'hb-ot-layout-gdef-table.hh', 'hb-ot-layout-gpos-table.hh', 'hb-ot-layout-gsub-table.hh', + 'hb-outline.hh', + 'hb-outline.cc', 'OT/Color/CBDT/CBDT.hh', 'OT/Color/COLR/COLR.hh', 'OT/Color/CPAL/CPAL.hh',