summaryrefslogtreecommitdiffstats
path: root/libass/ass_directwrite.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_directwrite.c')
-rw-r--r--libass/ass_directwrite.c25
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,