summaryrefslogtreecommitdiffstats
path: root/libass/ass_fontconfig.c
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-07-11 02:18:51 +0200
committerGrigori Goronzy <greg@blackbox>2009-07-11 02:22:18 +0200
commit2c412cdab94a7bb27c5a1e04ab902295215de888 (patch)
treec1372ebf5e6473b287e152a40c88587f3470d237 /libass/ass_fontconfig.c
parent613a22ab9b96453c10de6d75b43067652ad6d7db (diff)
downloadlibass-2c412cdab94a7bb27c5a1e04ab902295215de888.tar.bz2
libass-2c412cdab94a7bb27c5a1e04ab902295215de888.tar.xz
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]".
Diffstat (limited to 'libass/ass_fontconfig.c')
-rw-r--r--libass/ass_fontconfig.c75
1 files changed, 39 insertions, 36 deletions
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));