diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2013-12-10 18:45:54 +0100 |
---|---|---|
committer | Grigori Goronzy <greg@chown.ath.cx> | 2015-07-10 10:42:40 +0200 |
commit | bc743feb07cffe7a81e07411a484e499377deb50 (patch) | |
tree | 1d5bd66659bbef67c0a1145a4bbcd4b109c06230 /libass/ass_fontselect.c | |
parent | e95626628eab9a892047c60e4b9926ab50ce1bd4 (diff) | |
download | libass-bc743feb07cffe7a81e07411a484e499377deb50.tar.bz2 libass-bc743feb07cffe7a81e07411a484e499377deb50.tar.xz |
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.
Diffstat (limited to 'libass/ass_fontselect.c')
-rw-r--r-- | libass/ass_fontselect.c | 43 |
1 files changed, 31 insertions, 12 deletions
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; } |