summaryrefslogtreecommitdiffstats
path: root/libass/ass_fontconfig.c
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-07-17 02:56:05 +0200
committerGrigori Goronzy <greg@blackbox>2009-07-17 02:56:05 +0200
commitb4e604380d8ec8fa5b991a1b028240fc4436eec7 (patch)
treec3cfb14da2975a34c7f90884bb6086078aae2119 /libass/ass_fontconfig.c
parent0f2cf3f12a3eed740d7717fb35c11ba5d8fe4c22 (diff)
downloadlibass-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.c37
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)