From bc743feb07cffe7a81e07411a484e499377deb50 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 10 Dec 2013 18:45:54 +0100 Subject: fontselect: expose a fontprovider selection API Allow the user of libass to select the font provider from ass_set_fonts. This API change actually doesn't break client code which was passing `fc=1`; now the same value will autodetect a usable font provider. Also add an api to list available font providers as that is useful for client code to show drop down menus with a font provider to choose from. --- libass/ass_fontselect.c | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) (limited to 'libass/ass_fontselect.c') diff --git a/libass/ass_fontselect.c b/libass/ass_fontselect.c index f804c94..dacff11 100644 --- a/libass/ass_fontselect.c +++ b/libass/ass_fontselect.c @@ -790,6 +790,22 @@ ass_embedded_fonts_add_provider(ASS_Library *lib, ASS_FontSelector *selector, return priv; } +struct font_constructors { + ASS_DefaultFontProvider id; + ASS_FontProvider *(*constructor)(ASS_Library *, ASS_FontSelector *, + const char *); +}; + +struct font_constructors font_constructors[] = { +#ifdef CONFIG_CORETEXT + { ASS_FONTPROVIDER_CORETEXT, &ass_coretext_add_provider }, +#endif +#ifdef CONFIG_FONTCONFIG + { ASS_FONTPROVIDER_FONTCONFIG, &ass_fontconfig_add_provider }, +#endif + { ASS_FONTPROVIDER_NONE, NULL }, +}; + /** * \brief Init font selector. * \param library libass library object @@ -801,7 +817,8 @@ ass_embedded_fonts_add_provider(ASS_Library *lib, ASS_FontSelector *selector, ASS_FontSelector * ass_fontselect_init(ASS_Library *library, FT_Library ftlibrary, const char *family, - const char *path, const char *config, int fc) + const char *path, const char *config, + ASS_DefaultFontProvider dfp) { ASS_FontSelector *priv = calloc(1, sizeof(ASS_FontSelector)); @@ -813,18 +830,20 @@ ass_fontselect_init(ASS_Library *library, priv->embedded_provider = ass_embedded_fonts_add_provider(library, priv, ftlibrary); -#ifdef CONFIG_CORETEXT - if (fc != 0) { - priv->default_provider = ass_coretext_add_provider(library, priv); - return priv; - } -#endif + if (dfp >= ASS_FONTPROVIDER_AUTODETECT) { + int found = 0; + for (int i = 0; !found && font_constructors[i].constructor; i++ ) + if (dfp == font_constructors[i].id || + dfp == ASS_FONTPROVIDER_AUTODETECT) { + priv->default_provider = + font_constructors[i].constructor(library, priv, config); + found = 1; + } -#ifdef CONFIG_FONTCONFIG - if (fc != 0) - priv->default_provider = ass_fontconfig_add_provider(library, - priv, config); -#endif + if (!found) + ass_msg(library, MSGL_WARN, "can't find selected font provider"); + + } return priv; } -- cgit v1.2.3