diff options
Diffstat (limited to 'libass/ass_fontconfig.c')
-rw-r--r-- | libass/ass_fontconfig.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c index b3b7100..304598e 100644 --- a/libass/ass_fontconfig.c +++ b/libass/ass_fontconfig.c @@ -40,6 +40,20 @@ typedef struct fc_private { FcCharSet *fallback_chars; } ProviderPrivate; +static bool check_postscript(void *priv) +{ + FcPattern *pat = (FcPattern *)priv; + char *format; + + FcResult result = + FcPatternGetString(pat, FC_FONTFORMAT, 0, (FcChar8 **)&format); + if (result != FcResultMatch) + return false; + + return !strcmp(format, "Type 1") || !strcmp(format, "Type 42") || + !strcmp(format, "CID Type 1") || !strcmp(format, "CFF"); +} + static bool check_glyph(void *priv, uint32_t code) { FcPattern *pat = (FcPattern *)priv; @@ -86,7 +100,6 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider) FcBool outline; int index, weight; char *path; - char *format; char *fullnames[MAX_NAME]; char *families[MAX_NAME]; @@ -139,13 +152,6 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider) FcPatternGetString(pat, FC_POSTSCRIPT_NAME, 0, (FcChar8 **)&meta.postscript_name); - meta.is_postscript = false; - if (FcPatternGetString(pat, FC_FONTFORMAT, 0, - (FcChar8 **)&format) == FcResultMatch) - meta.is_postscript = - !strcmp(format, "Type 1") || !strcmp(format, "Type 42") || - !strcmp(format, "CID Type 1") || !strcmp(format, "CFF"); - ass_font_provider_add_font(provider, &meta, path, index, (void *)pat); } } @@ -268,6 +274,7 @@ cleanup: } static ASS_FontProviderFuncs fontconfig_callbacks = { + .check_postscript = check_postscript, .check_glyph = check_glyph, .destroy_provider = destroy, .get_substitutions = get_substitutions, |