Skip to content

Commit

Permalink
directwrite: fix match_fonts
Browse files Browse the repository at this point in the history
  • Loading branch information
Apache553 committed May 6, 2021
1 parent 5447214 commit a81ef4f
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions libass/ass_directwrite.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,7 @@ static void match_fonts(void *priv, ASS_Library *lib,
{
ProviderPrivate *provider_priv = (ProviderPrivate *)priv;
IDWriteFont *font = NULL;
IDWriteFontFamily *fontFamily = NULL;
IDWriteFontFamily *fontfamily = NULL;
LOGFONTW lf;
HRESULT hr = S_OK;

Expand All @@ -696,21 +696,28 @@ static void match_fonts(void *priv, ASS_Library *lib,
if (FAILED(hr) || !font)
return;

hr = IDWriteFont_GetFontFamily(font, &fontFamily);
if (FAILED(hr) || !fontFamily)
goto cleanup;
hr = IDWriteFont_GetFontFamily(font, &fontfamily);
IDWriteFont_Release(font);
if (FAILED(hr) || !fontfamily)
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,
Expand Down

0 comments on commit a81ef4f

Please sign in to comment.