From 887e6cc50bfbe8fc354993682edc03c51203e2fc Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Thu, 17 Jun 2021 19:42:25 +0300 Subject: fontselect: automatically read metadata from font file if needed --- libass/ass_coretext.c | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) (limited to 'libass/ass_coretext.c') diff --git a/libass/ass_coretext.c b/libass/ass_coretext.c index 42259bb..8002d8b 100644 --- a/libass/ass_coretext.c +++ b/libass/ass_coretext.c @@ -126,8 +126,7 @@ static char *get_name(CTFontDescriptorRef fontd, CFStringRef attr) return ret; } -static bool get_font_info_ct(ASS_Library *lib, FT_Library ftlib, - CTFontDescriptorRef fontd, +static bool get_font_info_ct(CTFontDescriptorRef fontd, char **path_out, ASS_FontProviderMetaData *info) { @@ -139,29 +138,19 @@ static bool get_font_info_ct(ASS_Library *lib, FT_Library ftlib, } char *ps_name = get_name(fontd, kCTFontNameAttribute); + info->postscript_name = ps_name; if (!ps_name) return false; char *family_name = get_name(fontd, kCTFontFamilyNameAttribute); - if (!family_name) { - free(ps_name); + info->extended_family = family_name; + if (!family_name) return false; - } - - bool got_info = - ass_get_font_info(lib, ftlib, path, ps_name, -1, family_name, info); - free(ps_name); - if (got_info) - info->extended_family = family_name; - else - free(family_name); - - return got_info; + return true; } -static void process_descriptors(ASS_Library *lib, FT_Library ftlib, - ASS_FontProvider *provider, CFArrayRef fontsd) +static void process_descriptors(ASS_FontProvider *provider, CFArrayRef fontsd) { if (!fontsd) return; @@ -172,20 +161,11 @@ static void process_descriptors(ASS_Library *lib, FT_Library ftlib, int index = -1; char *path = NULL; - if (get_font_info_ct(lib, ftlib, fontd, &path, &meta)) { + if (get_font_info_ct(fontd, &path, &meta)) { CFRetain(fontd); ass_font_provider_add_font(provider, &meta, path, index, (void*)fontd); } - for (int j = 0; j < meta.n_family; j++) - free(meta.families[j]); - - for (int j = 0; j < meta.n_fullname; j++) - free(meta.fullnames[j]); - - free(meta.families); - free(meta.fullnames); - free(meta.postscript_name); free(meta.extended_family); @@ -196,8 +176,6 @@ static void process_descriptors(ASS_Library *lib, FT_Library ftlib, static void match_fonts(void *priv, ASS_Library *lib, ASS_FontProvider *provider, char *name) { - FT_Library ftlib = priv; - CFStringRef cfname = CFStringCreateWithCString(NULL, name, kCFStringEncodingUTF8); if (!cfname) @@ -256,7 +234,7 @@ static void match_fonts(void *priv, ASS_Library *lib, ASS_FontProvider *provider if (!fontsd) goto cleanup; - process_descriptors(lib, ftlib, provider, fontsd); + process_descriptors(provider, fontsd); cleanup: SAFE_CFRelease(fontsd); @@ -329,5 +307,5 @@ ASS_FontProvider * ass_coretext_add_provider(ASS_Library *lib, ASS_FontSelector *selector, const char *config, FT_Library ftlib) { - return ass_font_provider_new(selector, &coretext_callbacks, ftlib); + return ass_font_provider_new(selector, &coretext_callbacks, NULL); } -- cgit v1.2.3