summaryrefslogtreecommitdiff
path: root/source/html/html-layout.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2016-05-30 19:07:32 +0100
committerRobin Watts <robin.watts@artifex.com>2016-05-30 20:07:48 +0100
commit61cb26c84a9c542c537c172b14b9c4ebed5b763a (patch)
tree4e6bec323e61b6b9c2e20d7ee51ce849aff913fa /source/html/html-layout.c
parent2ba534c2491368ce2c76fc715ad4bd5af4eee22d (diff)
downloadmupdf-61cb26c84a9c542c537c172b14b9c4ebed5b763a.tar.xz
Avoid fz_font pulling harfbuzz in.
We store an hb_font in every font, and currently have fz_drop_font know to call harfbuzz to destroy it. This causes harfbuzz to be included even in builds that never use it. We improve this situation by storing both an hb_font, and a function pointer to destroy it within fz_font. This costs us an extra pointer per fz_font, but solves the problem.
Diffstat (limited to 'source/html/html-layout.c')
-rw-r--r--source/html/html-layout.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/source/html/html-layout.c b/source/html/html-layout.c
index ae3f9f21..93f1905b 100644
--- a/source/html/html-layout.c
+++ b/source/html/html-layout.c
@@ -827,6 +827,8 @@ 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 int walk_string(string_walker *walker)
{
fz_context *ctx = walker->ctx;
@@ -885,6 +887,7 @@ static int walk_string(string_walker *walker)
if (walker->font->hb_font == NULL)
{
Memento_startLeaking(); /* HarfBuzz leaks harmlessly */
+ walker->font->hb_destroy = (fz_hb_font_destructor_t *)hb_font_destroy;
walker->font->hb_font = hb_ft_font_create(face, NULL);
Memento_stopLeaking();
}