summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgreg <greg@blackbox>2009-06-19 06:04:45 +0200
committergreg <greg@blackbox>2009-06-20 03:38:00 +0200
commit21ab30f2ffbc71af46c0e64824e0596f14ddb424 (patch)
treeaf165e3c5931b65e4f3a0f29f153c46bd98104d3
parent4600a9a40e82d9583e6b99a6633cadd379b8aa93 (diff)
downloadlibass-21ab30f2ffbc71af46c0e64824e0596f14ddb424.tar.bz2
libass-21ab30f2ffbc71af46c0e64824e0596f14ddb424.tar.xz
ass_set_fonts: optionally pass fontconfig config path
Optionally pass a fontconfig config file to the fontconfig initialisation. This changes the public API.
-rw-r--r--libass/ass.h4
-rw-r--r--libass/ass_fontconfig.c18
-rw-r--r--libass/ass_fontconfig.h2
-rw-r--r--libass/ass_render.c4
-rw-r--r--test/test.cpp2
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) {