diff options
author | Grigori Goronzy <greg@blackbox> | 2009-07-17 02:56:05 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2009-07-17 02:56:05 +0200 |
commit | b4e604380d8ec8fa5b991a1b028240fc4436eec7 (patch) | |
tree | c3cfb14da2975a34c7f90884bb6086078aae2119 /libass/ass_fontconfig.c | |
parent | 0f2cf3f12a3eed740d7717fb35c11ba5d8fe4c22 (diff) | |
download | libass-b4e604380d8ec8fa5b991a1b028240fc4436eec7.tar.bz2 libass-b4e604380d8ec8fa5b991a1b028240fc4436eec7.tar.xz |
Improve fontconfig setup
Add an argument to ass_set_fonts for controlling whether the fontconfig
font cache should be built/updated. Add a new function ass_fonts_update
to make it possible to update fonts later on.
Additionally, stop using FcConfigSetDefault for thread safety.
Diffstat (limited to 'libass/ass_fontconfig.c')
-rw-r--r-- | libass/ass_fontconfig.c | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c index d8d64e2..4eee197 100644 --- a/libass/ass_fontconfig.c +++ b/libass/ass_fontconfig.c @@ -427,11 +427,15 @@ static void process_fontdata(fc_instance_t *priv, ass_library_t *library, * \param ftlibrary freetype library object * \param family default font family * \param path default font path + * \param fc whether fontconfig should be used + * \param config path to a fontconfig configuration file, or NULL + * \param update whether the fontconfig cache should be built/updated * \return pointer to fontconfig private data */ fc_instance_t *fontconfig_init(ass_library_t *library, FT_Library ftlibrary, const char *family, - const char *path, int fc, const char *config) + const char *path, int fc, const char *config, + int update) { int rc; fc_instance_t *priv = calloc(1, sizeof(fc_instance_t)); @@ -444,20 +448,18 @@ fc_instance_t *fontconfig_init(ass_library_t *library, goto exit; } - if (config) { - priv->config = FcConfigCreate(); - rc = FcConfigParseAndLoad(priv->config, (unsigned char *)config, - FcTrue); + if (!config) + config = (char *) FcConfigFilename(NULL); + + priv->config = FcConfigCreate(); + rc = FcConfigParseAndLoad(priv->config, (unsigned char *) config, FcTrue); + if (rc && update) { FcConfigBuildFonts(priv->config); - FcConfigSetCurrent(priv->config); - } else { - rc = FcInit(); - assert(rc); - priv->config = FcConfigGetCurrent(); } if (!rc || !priv->config) { ass_msg(library, MSGL_FATAL, "%s failed", "FcInitLoadConfigAndFonts"); + FcConfigDestroy(priv->config); goto exit; } @@ -507,13 +509,18 @@ fc_instance_t *fontconfig_init(ass_library_t *library, } priv->family_default = family ? strdup(family) : NULL; - exit: +exit: priv->path_default = path ? strdup(path) : NULL; priv->index_default = 0; return priv; } +int fontconfig_update(fc_instance_t *priv) +{ + return FcConfigBuildFonts(priv->config); +} + #else /* CONFIG_FONTCONFIG */ char *fontconfig_select(fc_instance_t *priv, const char *family, @@ -526,7 +533,8 @@ char *fontconfig_select(fc_instance_t *priv, const char *family, 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 update) { fc_instance_t *priv; @@ -540,6 +548,11 @@ fc_instance_t *fontconfig_init(ass_library_t *library, return priv; } +int fontconfig_update(fc_instance_t *priv) +{ + // Do nothing +} + #endif void fontconfig_done(fc_instance_t *priv) |