]> granicus.if.org Git - libass/commitdiff
ass_set_fonts: optionally pass fontconfig config path
authorgreg <greg@blackbox>
Fri, 19 Jun 2009 04:04:45 +0000 (06:04 +0200)
committergreg <greg@blackbox>
Sat, 20 Jun 2009 01:38:00 +0000 (03:38 +0200)
Optionally pass a fontconfig config file to the fontconfig
initialisation.

This changes the public API.

libass/ass.h
libass/ass_fontconfig.c
libass/ass_fontconfig.h
libass/ass_render.c
test/test.cpp

index 238a33caae2a01702df762a98be86f24bf04f267..304b42eeea479ae8d5e36f802450d8accfe102e5 100644 (file)
@@ -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
index 0a2eb3f61156d7ef0e457820cc2e330d73b627ab..54479cf2b38955e2aeea665d8db81216b2207fc6 100644 (file)
@@ -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;
index 199c6ccef32e6a4ee0afbcf893d49c5fe5614af5..71b2006b03323fcfabee9be8c73eb23ed45793c3 100644 (file)
@@ -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);
index d3158f6e24f5d06f0b41c53dda5163f0294f0244..f2a34b2d0763cd3cafea83b22c3e68952efbe1d5 100644 (file)
@@ -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;
 }
index 20ea0faa0023f6f64ddfec58b116b42165cc2096..ea70acc058c91cd305b0fde0044dd0295cad2c9b 100644 (file)
@@ -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) {