diff options
Diffstat (limited to 'libass/ass_directwrite.c')
-rw-r--r-- | libass/ass_directwrite.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/libass/ass_directwrite.c b/libass/ass_directwrite.c index e666bd9..d30e8d6 100644 --- a/libass/ass_directwrite.c +++ b/libass/ass_directwrite.c @@ -697,20 +697,27 @@ static void match_fonts(void *priv, ASS_Library *lib, return; hr = IDWriteFont_GetFontFamily(font, &fontFamily); + IDWriteFont_Release(font); if (FAILED(hr) || !fontFamily) - goto cleanup; + return; - add_font(font, fontFamily, provider); + UINT32 n = IDWriteFontFamily_GetFontCount(fontFamily); + for (UINT32 i = 0; i < n; i++) { + hr = IDWriteFontFamily_GetFont(fontFamily, i, &font); + if (FAILED(hr)) + continue; - IDWriteFontFamily_Release(fontFamily); + // Simulations for bold or oblique are sometimes synthesized by + // DirectWrite. We are only interested in physical fonts. + if (IDWriteFont_GetSimulations(font) != 0) { + IDWriteFont_Release(font); + continue; + } - return; + add_font(font, fontFamily, provider); + } -cleanup: - if (font) - IDWriteFont_Release(font); - if (fontFamily) - IDWriteFontFamily_Release(fontFamily); + IDWriteFontFamily_Release(fontFamily); } static void get_substitutions(void *priv, const char *name, |