summaryrefslogtreecommitdiffstats
path: root/libass/ass_fontselect.c
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-12-10 18:45:54 +0100
committerGrigori Goronzy <greg@chown.ath.cx>2015-07-10 10:42:40 +0200
commitbc743feb07cffe7a81e07411a484e499377deb50 (patch)
tree1d5bd66659bbef67c0a1145a4bbcd4b109c06230 /libass/ass_fontselect.c
parente95626628eab9a892047c60e4b9926ab50ce1bd4 (diff)
downloadlibass-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.c43
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;
}