summaryrefslogtreecommitdiffstats
path: root/libass/ass_coretext.c
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2021-06-17 19:42:25 +0300
committerOleg Oshmyan <chortos@inbox.lv>2021-07-10 02:36:31 +0300
commit887e6cc50bfbe8fc354993682edc03c51203e2fc (patch)
tree5fccc501b40b24192d2573e88fe240703b7d9d98 /libass/ass_coretext.c
parent72c4eaadb42c7692ebdd828b0903a907acad5d16 (diff)
downloadlibass-887e6cc50bfbe8fc354993682edc03c51203e2fc.tar.bz2
libass-887e6cc50bfbe8fc354993682edc03c51203e2fc.tar.xz
fontselect: automatically read metadata from font file if needed
Diffstat (limited to 'libass/ass_coretext.c')
-rw-r--r--libass/ass_coretext.c40
1 files changed, 9 insertions, 31 deletions
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);
}