diff options
Diffstat (limited to 'libass/ass_fontconfig.c')
-rw-r--r-- | libass/ass_fontconfig.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c index c65cd20..a3a371a 100644 --- a/libass/ass_fontconfig.c +++ b/libass/ass_fontconfig.c @@ -71,7 +71,7 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider) for (i = 0; i < fonts->nfont; i++) { FcPattern *pat = fonts->fonts[i]; FcBool outline; - int index; + int index, weight; char *path; char *fullnames[MAX_FULLNAME]; @@ -82,11 +82,21 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider) // simple types result = FcPatternGetInteger(pat, FC_SLANT, 0, &meta.slant); - result |= FcPatternGetInteger(pat, FC_WEIGHT, 0, &meta.weight); + result |= FcPatternGetInteger(pat, FC_WEIGHT, 0, &weight); result |= FcPatternGetInteger(pat, FC_INDEX, 0, &index); if (result != FcResultMatch) continue; + // fontconfig uses its own weight scale, apparently derived + // from typographical weight. we're using truetype weights, so + // convert appropriately + if (weight <= FC_WEIGHT_LIGHT) + meta.weight = FONT_WEIGHT_LIGHT; + else if (weight <= FC_WEIGHT_MEDIUM) + meta.weight = FONT_WEIGHT_MEDIUM; + else + meta.weight = FONT_WEIGHT_BOLD; + // family name // HACK: get the last family name. that fixes fonts // like Arial Narrow in some versions |