*/
int ass_library_version(void);
+/**
+ * \brief Default Font provider to load fonts in libass' database
+ *
+ * NONE don't use any default font provider for font lookup
+ * AUTODETECT use the first available font provider
+ * CORETEXT force a CoreText based font provider (OS X only)
+ * FONTCONFIG force a Fontconfig based font provider
+ *
+ * libass uses the best shaper available by default.
+ */
+typedef enum {
+ ASS_FONTPROVIDER_NONE = 0,
+ ASS_FONTPROVIDER_AUTODETECT = 1,
+ ASS_FONTPROVIDER_CORETEXT,
+ ASS_FONTPROVIDER_FONTCONFIG,
+} ASS_DefaultFontProvider;
+
/**
* \brief Initialize the library.
* \return library handle or NULL if failed
* NOTE: font lookup must be configured before an ASS_Renderer can be used.
*/
void ass_set_fonts(ASS_Renderer *priv, const char *default_font,
- const char *default_family, int fc, const char *config,
- int update);
+ const char *default_family, ASS_DefaultFontProvider dfp,
+ const char *config, int update);
/**
* \brief Set selective style override mode.
};
ASS_FontProvider *
-ass_coretext_add_provider(ASS_Library *lib, ASS_FontSelector *selector)
+ass_coretext_add_provider(ASS_Library *lib, ASS_FontSelector *selector,
+ const char *config)
{
ASS_FontProvider *provider =
ass_font_provider_new(selector, &coretext_callbacks, NULL);
#ifdef CONFIG_CORETEXT
ASS_FontProvider *
-ass_coretext_add_provider(ASS_Library *lib, ASS_FontSelector *selector);
+ass_coretext_add_provider(ASS_Library *lib, ASS_FontSelector *selector,
+ const char *config);
#endif
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
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));
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;
}
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);
char *ass_font_select(ASS_FontSelector *priv, ASS_Library *library,
ASS_Font *font, int *index, char **postscript_name,
int *uid, ASS_FontStream *data, uint32_t code);
}
void ass_set_fonts(ASS_Renderer *priv, const char *default_font,
- const char *default_family, int fc, const char *config,
- int update)
+ const char *default_family, ASS_DefaultFontProvider dfp,
+ const char *config, int update)
{
free(priv->settings.default_font);
free(priv->settings.default_family);
if (priv->fontselect)
ass_fontselect_free(priv->fontselect);
priv->fontselect = ass_fontselect_init(priv->library, priv->ftlibrary,
- default_family, default_font, config, fc);
+ default_family, default_font, config, dfp);
}
void ass_set_selective_style_override_enabled(ASS_Renderer *priv, int bits)
}
ass_set_frame_size(ass_renderer, frame_w, frame_h);
- ass_set_fonts(ass_renderer, NULL, "Sans", 1, NULL, 1);
+ ass_set_fonts(ass_renderer, NULL, "Sans",
+ ASS_FONTPROVIDER_AUTODETECT, NULL, 1);
}
static image_t *gen_image(int width, int height)