]> granicus.if.org Git - libass/commitdiff
fontselect: expose a fontprovider listing API
authorStefano Pigozzi <stefano.pigozzi@gmail.com>
Fri, 13 Dec 2013 07:14:43 +0000 (08:14 +0100)
committerGrigori Goronzy <greg@chown.ath.cx>
Fri, 10 Jul 2015 08:42:40 +0000 (10:42 +0200)
This allows client code to query libass for the font providers it was compiled
with. It can be useful for clients so that they can show selection interfaces
to their users.

libass/ass.h
libass/ass_fontselect.c
libass/libass.sym
test/test.c

index a3feb0b3e3814dfe57812052d56637927e1e3701..1fb2234aa82a7f4ba66ef7b210509264f3075338 100644 (file)
@@ -400,6 +400,14 @@ void ass_set_line_spacing(ASS_Renderer *priv, double line_spacing);
  */
 void ass_set_line_position(ASS_Renderer *priv, double line_position);
 
+/**
+ * \brief Get the list of available font providers.
+ * \return list of available font providers (user owns the returned array)
+ */
+void ass_get_available_font_providers(ASS_Library *priv,
+                                      ASS_DefaultFontProvider **providers,
+                                      size_t *size);
+
 /**
  * \brief Set font lookup defaults.
  * \param default_font path to default font to use. Must be supplied if
index dacff11e5432f390a6670dec62134486b8c92b37..dc475b1d092e73e7a2f82a8effdc3f0f4eb19efa 100644 (file)
@@ -848,6 +848,21 @@ ass_fontselect_init(ASS_Library *library,
     return priv;
 }
 
+void ass_get_available_font_providers(ASS_Library *priv,
+                                      ASS_DefaultFontProvider **providers,
+                                      size_t *size)
+{
+    size_t offset = 2;
+    *size = offset;
+    for (int i = 0; font_constructors[i].constructor; i++)
+        (*size)++;
+    *providers = calloc(*size, sizeof(ASS_DefaultFontProvider));
+    (*providers)[0] = ASS_FONTPROVIDER_NONE;
+    (*providers)[1] = ASS_FONTPROVIDER_AUTODETECT;
+    for (int i = offset; i < *size; i++)
+        (*providers)[i] = font_constructors[i-offset].id;
+}
+
 /**
  * \brief Free font selector and release associated data
  * \param the font selector
index aafb7a8b7927c6961f47e67987e9684d6beeec0a..8a6826ad065a777d46b16250f72c9123387615e6 100644 (file)
@@ -14,6 +14,7 @@ ass_set_aspect_ratio
 ass_set_font_scale
 ass_set_hinting
 ass_set_line_spacing
+ass_get_available_font_providers
 ass_set_fonts
 ass_render_frame
 ass_new_track
index 8522840c25fb952ee250761b33a322409136936e..33aa94c97ffef5558d3d91a83fba31170a93f5ad 100644 (file)
@@ -166,6 +166,26 @@ static void blend(image_t * frame, ASS_Image *img)
     printf("%d images blended\n", cnt);
 }
 
+char *font_provider_labels[] = {
+    [ASS_FONTPROVIDER_NONE]       = "None",
+    [ASS_FONTPROVIDER_AUTODETECT] = "Autodetect",
+    [ASS_FONTPROVIDER_CORETEXT]   = "CoreText",
+    [ASS_FONTPROVIDER_FONTCONFIG] = "Fontconfig",
+};
+
+static void print_font_providers(ASS_Library *ass_library)
+{
+    ASS_DefaultFontProvider *providers;
+    size_t providers_size = 0;
+    ass_get_available_font_providers(ass_library, &providers, &providers_size);
+    printf("test.c: Available font providers (%zu): ", providers_size);
+    for (int i = 0; i < providers_size; i++) {
+        const char *separator = i > 0 ? ", ": "";
+        printf("%s'%s'", separator,  font_provider_labels[providers[i]]);
+    }
+    printf(".\n");
+}
+
 int main(int argc, char *argv[])
 {
     const int frame_w = 1280;
@@ -179,6 +199,8 @@ int main(int argc, char *argv[])
     char *subfile = argv[2];
     double tm = strtod(argv[3], 0);
 
+    print_font_providers(ass_library);
+
     init(frame_w, frame_h);
     ASS_Track *track = ass_read_file(ass_library, subfile, NULL);
     if (!track) {