summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorApache553 <Apache553@outlook.com>2021-05-04 03:13:22 +0800
committerOleg Oshmyan <chortos@inbox.lv>2021-05-12 23:03:36 +0300
commitb9f34688f6ef1988136ba5e90a91ae8ac9b8a55f (patch)
treea85da88514147533b38b69d7f1a66dd5134079c6
parent454750795187b55809e1f74216628a8baa68a376 (diff)
downloadlibass-b9f34688f6ef1988136ba5e90a91ae8ac9b8a55f.tar.bz2
libass-b9f34688f6ef1988136ba5e90a91ae8ac9b8a55f.tar.xz
directwrite: add whole font family from `match_fonts`
match_fonts is supposed to add all the fonts with the same family name for fontselect. Commit d325c633f4ac32fcb4c76a3fb5926737a45c38d0 adds only one font, which leads to inability to select (using family name) correct fonts from families with multiple styles.
-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,