From 21ab30f2ffbc71af46c0e64824e0596f14ddb424 Mon Sep 17 00:00:00 2001 From: greg Date: Fri, 19 Jun 2009 06:04:45 +0200 Subject: [PATCH] ass_set_fonts: optionally pass fontconfig config path Optionally pass a fontconfig config file to the fontconfig initialisation. This changes the public API. --- libass/ass.h | 4 +++- libass/ass_fontconfig.c | 18 +++++++++++++----- libass/ass_fontconfig.h | 2 +- libass/ass_render.c | 4 ++-- test/test.cpp | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/libass/ass.h b/libass/ass.h index 238a33c..304b42e 100644 --- a/libass/ass.h +++ b/libass/ass.h @@ -91,9 +91,11 @@ void ass_set_line_spacing(ass_renderer_t *priv, double line_spacing); /** * \brief set font lookup defaults * \param fc bool, use fontconfig? + * \param config path to fontconfig configuration file, or NULL. Only matters + * if fontconfig is used */ int ass_set_fonts(ass_renderer_t *priv, const char *default_font, - const char *default_family, int fc); + const char *default_family, int fc, const char *config); /** * \brief render a frame, producing a list of ass_image_t diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c index 0a2eb3f..54479cf 100644 --- a/libass/ass_fontconfig.c +++ b/libass/ass_fontconfig.c @@ -427,7 +427,7 @@ static void process_fontdata(fc_instance_t *priv, ass_library_t *library, */ fc_instance_t *fontconfig_init(ass_library_t *library, FT_Library ftlibrary, const char *family, - const char *path, int fc) + const char *path, int fc, const char *config) { int rc; fc_instance_t *priv = calloc(1, sizeof(fc_instance_t)); @@ -440,11 +440,19 @@ fc_instance_t *fontconfig_init(ass_library_t *library, goto exit; } - rc = FcInit(); - assert(rc); + if (config) { + priv->config = FcConfigCreate(); + rc = FcConfigParseAndLoad(priv->config, (unsigned char *)config, + FcTrue); + FcConfigBuildFonts(priv->config); + FcConfigSetCurrent(priv->config); + } else { + rc = FcInit(); + assert(rc); + priv->config = FcConfigGetCurrent(); + } - priv->config = FcConfigGetCurrent(); - if (!priv->config) { + if (!rc || !priv->config) { mp_msg(MSGT_ASS, MSGL_FATAL, MSGTR_LIBASS_FcInitLoadConfigAndFontsFailed); goto exit; diff --git a/libass/ass_fontconfig.h b/libass/ass_fontconfig.h index 199c6cc..71b2006 100644 --- a/libass/ass_fontconfig.h +++ b/libass/ass_fontconfig.h @@ -34,7 +34,7 @@ typedef struct fc_instance_s fc_instance_t; fc_instance_t *fontconfig_init(ass_library_t *library, FT_Library ftlibrary, const char *family, - const char *path, int fc); + const char *path, int fc, const char *config); char *fontconfig_select(fc_instance_t *priv, const char *family, int treat_family_as_pattern, unsigned bold, unsigned italic, int *index, uint32_t code); diff --git a/libass/ass_render.c b/libass/ass_render.c index d3158f6..f2a34b2 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -2641,7 +2641,7 @@ void ass_set_line_spacing(ass_renderer_t *priv, double line_spacing) } int ass_set_fonts(ass_renderer_t *priv, const char *default_font, - const char *default_family, int fc) + const char *default_family, int fc, const char *config) { if (priv->settings.default_font) free(priv->settings.default_font); @@ -2656,7 +2656,7 @@ int ass_set_fonts(ass_renderer_t *priv, const char *default_font, fontconfig_done(priv->fontconfig_priv); priv->fontconfig_priv = fontconfig_init(priv->library, priv->ftlibrary, default_family, - default_font, fc); + default_font, fc, config); return !!priv->fontconfig_priv; } diff --git a/test/test.cpp b/test/test.cpp index 20ea0fa..ea70acc 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -79,7 +79,7 @@ static void init(int frame_w, int frame_h) { ass_set_margins(ass_renderer, 0, 0, 0, 0); ass_set_use_margins(ass_renderer, 0); ass_set_font_scale(ass_renderer, 1.); - ass_set_fonts(ass_renderer, NULL, "Sans", 1); + ass_set_fonts(ass_renderer, NULL, "Sans", 1, NULL); } static image_t* gen_image(int width, int height) { -- 2.40.0