docs/harfbuzz-sections.txt | 1 + src/hb-ft.cc | 15 +++++++++++++-- src/hb-ft.h | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-)
New commits: commit 4e4781319b36bba154f3e5d4eb678945d8f6b4fc Author: Behdad Esfahbod <beh...@behdad.org> Date: Thu Oct 12 10:33:16 2017 +0200 [ft] Add hb_ft_font_changed() When the font size or variations settings on underlying FT_Face change, one can call hb_ft_font_changed() and continue using hb_font created using hb_ft_font_create(). Fixes https://github.com/behdad/harfbuzz/issues/559 New API: hb_ft_font_changed() diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt index 6d86d941..06a78f5f 100644 --- a/docs/harfbuzz-sections.txt +++ b/docs/harfbuzz-sections.txt @@ -291,6 +291,7 @@ hb_ft_face_create_cached hb_ft_face_create_referenced hb_ft_font_create hb_ft_font_create_referenced +hb_ft_font_changed hb_ft_font_get_face hb_ft_font_set_load_flags hb_ft_font_get_load_flags diff --git a/src/hb-ft.cc b/src/hb-ft.cc index c560b219..83af9942 100644 --- a/src/hb-ft.cc +++ b/src/hb-ft.cc @@ -610,6 +610,19 @@ hb_ft_font_create (FT_Face ft_face, font = hb_font_create (face); hb_face_destroy (face); _hb_ft_font_set_funcs (font, ft_face, false); + hb_ft_font_changed (font); + return font; +} + +void +hb_ft_font_changed (hb_font_t *font) +{ + if (font->destroy != _hb_ft_font_destroy) + return; + + hb_ft_font_t *ft_font = (hb_ft_font_t *) font->user_data; + FT_Face ft_face = ft_font->ft_face; + hb_font_set_scale (font, (int) (((uint64_t) ft_face->size->metrics.x_scale * (uint64_t) ft_face->units_per_EM + (1u<<15)) >> 16), (int) (((uint64_t) ft_face->size->metrics.y_scale * (uint64_t) ft_face->units_per_EM + (1u<<15)) >> 16)); @@ -640,8 +653,6 @@ hb_ft_font_create (FT_Face ft_face, free (mm_var); } #endif - - return font; } /** diff --git a/src/hb-ft.h b/src/hb-ft.h index dc8ef855..94013eeb 100644 --- a/src/hb-ft.h +++ b/src/hb-ft.h @@ -116,7 +116,13 @@ hb_ft_font_set_load_flags (hb_font_t *font, int load_flags); HB_EXTERN int hb_ft_font_get_load_flags (hb_font_t *font); -/* Makes an hb_font_t use FreeType internally to implement font functions. */ +/* Call when size or variations settings on underlying FT_Face change. */ +HB_EXTERN void +hb_ft_font_changed (hb_font_t *font); + +/* Makes an hb_font_t use FreeType internally to implement font functions. + * Note: this internally creates an FT_Face. Use it when you create your + * hb_face_t using hb_face_create(). */ HB_EXTERN void hb_ft_font_set_funcs (hb_font_t *font); _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz