diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/fitz/font-impl.h | 2 | ||||
-rw-r--r-- | source/fitz/font.c | 10 | ||||
-rw-r--r-- | source/html/html-layout.c | 18 |
3 files changed, 17 insertions, 13 deletions
diff --git a/source/fitz/font-impl.h b/source/fitz/font-impl.h index b6015172..231940ed 100644 --- a/source/fitz/font-impl.h +++ b/source/fitz/font-impl.h @@ -16,7 +16,7 @@ struct fz_font_s fz_font_flags_t flags; void *ft_face; /* has an FT_Face if used */ - fz_hb_t hb; + fz_shaper_data_t shaper_data; fz_matrix t3matrix; void *t3resources; diff --git a/source/fitz/font.c b/source/fitz/font.c index be0f38d7..b406c259 100644 --- a/source/fitz/font.c +++ b/source/fitz/font.c @@ -158,11 +158,9 @@ fz_drop_font(fz_context *ctx, fz_font *font) fz_free(ctx, font->bbox_table); fz_free(ctx, font->width_table); fz_free(ctx, font->advance_cache); - if (font->hb.destroy && font->hb.font) + if (font->shaper_data.destroy && font->shaper_data.shaper_handle) { - hb_lock(ctx); - font->hb.destroy(font->hb.font); - hb_unlock(ctx); + font->shaper_data.destroy(ctx, font->shaper_data.shaper_handle); } fz_free(ctx, font); } @@ -1580,7 +1578,7 @@ fz_font_flags_t *fz_font_flags(fz_font *font) return font ? &font->flags : NULL; } -fz_hb_t *fz_font_hb(fz_font *font) +fz_shaper_data_t *fz_font_shaper_data(fz_font *font) { - return font ? &font->hb : NULL; + return font ? &font->shaper_data : NULL; } diff --git a/source/html/html-layout.c b/source/html/html-layout.c index 2fe6de82..2211ea4f 100644 --- a/source/html/html-layout.c +++ b/source/html/html-layout.c @@ -837,7 +837,13 @@ static void init_string_walker(fz_context *ctx, string_walker *walker, hb_buffer walker->next_font = NULL; } -typedef void (fz_hb_font_destructor_t)(void *); +static void +destroy_hb_shaper_data(fz_context *ctx, void *handle) +{ + hb_lock(ctx); + hb_font_destroy(handle); + hb_unlock(ctx); +} static int walk_string(string_walker *walker) { @@ -899,12 +905,12 @@ static int walk_string(string_walker *walker) if (!quickshape) { - fz_hb_t *hb = fz_font_hb(walker->font); - if (hb->font == NULL) + fz_shaper_data_t *hb = fz_font_shaper_data(walker->font); + if (hb->shaper_handle == NULL) { Memento_startLeaking(); /* HarfBuzz leaks harmlessly */ - hb->destroy = (fz_hb_font_destructor_t *)hb_font_destroy; - hb->font = hb_ft_font_create(face, NULL); + hb->destroy = destroy_hb_shaper_data; + hb->shaper_handle = hb_ft_font_create(face, NULL); Memento_stopLeaking(); } @@ -912,7 +918,7 @@ static int walk_string(string_walker *walker) hb_buffer_guess_segment_properties(walker->hb_buf); Memento_stopLeaking(); - hb_shape(hb->font, walker->hb_buf, NULL, 0); + hb_shape(hb->shaper_handle, walker->hb_buf, NULL, 0); } walker->glyph_pos = hb_buffer_get_glyph_positions(walker->hb_buf, &walker->glyph_count); |