From 2c412cdab94a7bb27c5a1e04ab902295215de888 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Sat, 11 Jul 2009 02:18:51 +0200 Subject: Message callback funtionality Introduce functionality for providing a message callback that is used for passing messages to the controlling application instead of simply printing them to standard output. The function pointer to the callback is stored in the ass_library_t instance. ass_msg needs access to it, so in many places the library instance needs to be passed around now. The default behavior is the old one: messages of MSGL_INFO or lower are printed to the standard output, prefixed with "[ass]". --- libass/ass_fontconfig.c | 75 +++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 36 deletions(-) (limited to 'libass/ass_fontconfig.c') diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c index e23c4f2..d8d64e2 100644 --- a/libass/ass_fontconfig.c +++ b/libass/ass_fontconfig.c @@ -71,9 +71,10 @@ struct fc_instance_s { * \param code: the character that should be present in the font, can be 0 * \return font file path */ -static char *_select_font(fc_instance_t *priv, const char *family, - int treat_family_as_pattern, unsigned bold, - unsigned italic, int *index, uint32_t code) +static char *_select_font(ass_library_t *library, fc_instance_t *priv, + const char *family, int treat_family_as_pattern, + unsigned bold, unsigned italic, int *index, + uint32_t code) { FcBool rc; FcResult result; @@ -193,7 +194,7 @@ static char *_select_font(fc_instance_t *priv, const char *family, if (!treat_family_as_pattern && !(r_family && strcasecmp((const char *) r_family, family) == 0) && !(r_fullname && strcasecmp((const char *) r_fullname, family) == 0)) - ass_msg(MSGL_WARN, + ass_msg(library, MSGL_WARN, "fontconfig: Selected font is not the requested one: " "'%s' != '%s'", (const char *) (r_fullname ? r_fullname : r_family), family); @@ -214,7 +215,7 @@ static char *_select_font(fc_instance_t *priv, const char *family, if (result != FcResultMatch) r_embolden = 0; - ass_msg(MSGL_V, + ass_msg(library, MSGL_V, "Font info: family '%s', style '%s', fullname '%s'," " slant %d, weight %d%s", (const char *) r_family, (const char *) r_style, (const char *) r_fullname, r_slant, @@ -241,9 +242,10 @@ static char *_select_font(fc_instance_t *priv, const char *family, * \param code: the character that should be present in the font, can be 0 * \return font file path */ -char *fontconfig_select(fc_instance_t *priv, const char *family, - int treat_family_as_pattern, unsigned bold, - unsigned italic, int *index, uint32_t code) +char *fontconfig_select(ass_library_t *library, fc_instance_t *priv, + const char *family, int treat_family_as_pattern, + unsigned bold, unsigned italic, int *index, + uint32_t code) { char *res = 0; if (!priv->config) { @@ -252,33 +254,34 @@ char *fontconfig_select(fc_instance_t *priv, const char *family, } if (family && *family) res = - _select_font(priv, family, treat_family_as_pattern, bold, - italic, index, code); + _select_font(library, priv, family, treat_family_as_pattern, + bold, italic, index, code); if (!res && priv->family_default) { res = - _select_font(priv, priv->family_default, 0, bold, italic, index, - code); + _select_font(library, priv, priv->family_default, 0, bold, + italic, index, code); if (res) - ass_msg(MSGL_WARN, "fontconfig_select: Using default font " - "family: (%s, %d, %d) -> %s, %d", + ass_msg(library, MSGL_WARN, "fontconfig_select: Using default " + "font family: (%s, %d, %d) -> %s, %d", family, bold, italic, res, *index); } if (!res && priv->path_default) { res = priv->path_default; *index = priv->index_default; - ass_msg(MSGL_WARN, "fontconfig_select: Using default font: " + ass_msg(library, MSGL_WARN, "fontconfig_select: Using default font: " "(%s, %d, %d) -> %s, %d", family, bold, italic, res, *index); } if (!res) { - res = _select_font(priv, "Arial", 0, bold, italic, index, code); + res = _select_font(library, priv, "Arial", 0, bold, italic, + index, code); if (res) - ass_msg(MSGL_WARN, "fontconfig_select: Using 'Arial' font " - "family: (%s, %d, %d) -> %s, %d", family, bold, italic, - res, *index); + ass_msg(library, MSGL_WARN, "fontconfig_select: Using 'Arial' " + "font family: (%s, %d, %d) -> %s, %d", family, bold, + italic, res, *index); } if (res) - ass_msg(MSGL_V, + ass_msg(library, MSGL_V, "fontconfig_select: (%s, %d, %d) -> %s, %d", family, bold, italic, res, *index); return res; @@ -354,11 +357,11 @@ static void process_fontdata(fc_instance_t *priv, ass_library_t *library, res = mkdir(fonts_dir); #endif if (res) { - ass_msg(MSGL_WARN, "Failed to create directory '%s'", + ass_msg(library, MSGL_WARN, "Failed to create directory '%s'", fonts_dir); } } else if (!S_ISDIR(st.st_mode)) { - ass_msg(MSGL_WARN, "Not a directory: '%s'", fonts_dir); + ass_msg(library, MSGL_WARN, "Not a directory: '%s'", fonts_dir); } fname = validate_fname((char *) name); @@ -384,7 +387,7 @@ static void process_fontdata(fc_instance_t *priv, ass_library_t *library, rc = FT_New_Memory_Face(ftlibrary, (unsigned char *) data, data_size, face_index, &face); if (rc) { - ass_msg(MSGL_WARN, "Error opening memory font: %s", + ass_msg(library, MSGL_WARN, "Error opening memory font: %s", name); return; } @@ -394,21 +397,21 @@ static void process_fontdata(fc_instance_t *priv, ass_library_t *library, FcFreeTypeQueryFace(face, (unsigned char *) name, 0, FcConfigGetBlanks(priv->config)); if (!pattern) { - ass_msg(MSGL_WARN, "%s failed", "FcFreeTypeQueryFace"); + ass_msg(library, MSGL_WARN, "%s failed", "FcFreeTypeQueryFace"); FT_Done_Face(face); return; } fset = FcConfigGetFonts(priv->config, FcSetSystem); // somehow it failes when asked for FcSetApplication if (!fset) { - ass_msg(MSGL_WARN, "%s failed", "FcConfigGetFonts"); + ass_msg(library, MSGL_WARN, "%s failed", "FcConfigGetFonts"); FT_Done_Face(face); return; } res = FcFontSetAdd(fset, pattern); if (!res) { - ass_msg(MSGL_WARN, "%s failed", "FcFontSetAdd"); + ass_msg(library, MSGL_WARN, "%s failed", "FcFontSetAdd"); FT_Done_Face(face); return; } @@ -436,7 +439,7 @@ fc_instance_t *fontconfig_init(ass_library_t *library, int i; if (!fc) { - ass_msg(MSGL_WARN, + ass_msg(library, MSGL_WARN, "Fontconfig disabled, only default font will be used."); goto exit; } @@ -454,7 +457,7 @@ fc_instance_t *fontconfig_init(ass_library_t *library, } if (!rc || !priv->config) { - ass_msg(MSGL_FATAL, "%s failed", "FcInitLoadConfigAndFonts"); + ass_msg(library, MSGL_FATAL, "%s failed", "FcInitLoadConfigAndFonts"); goto exit; } @@ -463,10 +466,10 @@ fc_instance_t *fontconfig_init(ass_library_t *library, if (dir) { if (FcDirCacheValid((const FcChar8 *) dir) == FcFalse) { - ass_msg(MSGL_INFO, "Updating font cache"); + ass_msg(library, MSGL_INFO, "Updating font cache"); if (FcGetVersion() >= 20390 && FcGetVersion() < 20400) - ass_msg(MSGL_WARN, "Beta versions of fontconfig are not " - "supported. Update before reporting any bugs"); + ass_msg(library, MSGL_WARN, "Beta versions of fontconfig" + "are not supported. Update before reporting any bugs"); // FontConfig >= 2.4.0 updates cache automatically in FcConfigAppFontAddDir() if (FcGetVersion() < 20390) { FcFontSet *fcs; @@ -475,7 +478,7 @@ fc_instance_t *fontconfig_init(ass_library_t *library, fss = FcStrSetCreate(); rc = FcStrSetAdd(fss, (const FcChar8 *) dir); if (!rc) { - ass_msg(MSGL_WARN, "%s failed", "FcStrSetAdd"); + ass_msg(library, MSGL_WARN, "%s failed", "FcStrSetAdd"); goto ErrorFontCache; } @@ -483,13 +486,13 @@ fc_instance_t *fontconfig_init(ass_library_t *library, FcConfigGetBlanks(priv->config), (const FcChar8 *) dir, FcFalse); if (!rc) { - ass_msg(MSGL_WARN, "%s failed", "FcDirScan"); + ass_msg(library, MSGL_WARN, "%s failed", "FcDirScan"); goto ErrorFontCache; } rc = FcDirSave(fcs, fss, (const FcChar8 *) dir); if (!rc) { - ass_msg(MSGL_WARN, "%s failed", "FcDirSave"); + ass_msg(library, MSGL_WARN, "%s failed", "FcDirSave"); goto ErrorFontCache; } ErrorFontCache: @@ -499,7 +502,7 @@ fc_instance_t *fontconfig_init(ass_library_t *library, rc = FcConfigAppFontAddDir(priv->config, (const FcChar8 *) dir); if (!rc) { - ass_msg(MSGL_WARN, "%s failed", "FcConfigAppFontAddDir"); + ass_msg(library, MSGL_WARN, "%s failed", "FcConfigAppFontAddDir"); } } @@ -527,7 +530,7 @@ fc_instance_t *fontconfig_init(ass_library_t *library, { fc_instance_t *priv; - ass_msg(MSGL_WARN, + ass_msg(library, MSGL_WARN, "Fontconfig disabled, only default font will be used."); priv = calloc(1, sizeof(fc_instance_t)); -- cgit v1.2.3