From ab6aef6d0766aa1ce801c5b4ca1441a491681489 Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Mon, 19 Oct 2015 16:11:27 +0300 Subject: fontselect: move PostScript name into ASS_FontProviderMetaData --- libass/ass_coretext.c | 11 ++++++----- libass/ass_directwrite.c | 11 ++++++----- libass/ass_fontconfig.c | 3 +-- libass/ass_fontselect.c | 18 ++++++++---------- libass/ass_fontselect.h | 10 +++++++--- 5 files changed, 28 insertions(+), 25 deletions(-) (limited to 'libass') diff --git a/libass/ass_coretext.c b/libass/ass_coretext.c index fdc7bd1..a2cd77f 100644 --- a/libass/ass_coretext.c +++ b/libass/ass_coretext.c @@ -185,15 +185,16 @@ static void process_descriptors(ASS_FontProvider *provider, CFArrayRef fontsd) get_name(fontd, kCTFontFamilyNameAttribute, families, &meta.n_family); meta.families = families; - int zero = 0; - get_name(fontd, kCTFontNameAttribute, identifiers, &zero); get_name(fontd, kCTFontDisplayNameAttribute, fullnames, &meta.n_fullname); meta.fullnames = fullnames; + int zero = 0; + get_name(fontd, kCTFontNameAttribute, identifiers, &zero); + meta.postscript_name = identifiers[0]; + CFCharacterSetRef chset = CTFontDescriptorCopyAttribute(fontd, kCTFontCharacterSetAttribute); - ass_font_provider_add_font(provider, &meta, path, index, - identifiers[0], (void*)chset); + ass_font_provider_add_font(provider, &meta, path, index, (void*)chset); for (int j = 0; j < meta.n_family; j++) free(meta.families[j]); @@ -201,7 +202,7 @@ static void process_descriptors(ASS_FontProvider *provider, CFArrayRef fontsd) for (int j = 0; j < meta.n_fullname; j++) free(meta.fullnames[j]); - free(identifiers[0]); + free(meta.postscript_name); free(path); } diff --git a/libass/ass_directwrite.c b/libass/ass_directwrite.c index 521447d..6b6b623 100644 --- a/libass/ass_directwrite.c +++ b/libass/ass_directwrite.c @@ -512,7 +512,6 @@ static void scan_fonts(IDWriteFactory *factory, IDWriteLocalizedStrings *fontNames = NULL; IDWriteLocalizedStrings *psNames = NULL; BOOL exists = FALSE; - char *psName = NULL; hr = IDWriteFontCollection_GetFontFamily(fontCollection, i, &fontFamily); if (FAILED(hr)) @@ -556,8 +555,10 @@ static void scan_fonts(IDWriteFactory *factory, temp_name[NAME_MAX_LENGTH-1] = 0; size_needed = WideCharToMultiByte(CP_UTF8, 0, temp_name, -1, NULL, 0,NULL, NULL); - psName = (char *) malloc(size_needed); - WideCharToMultiByte(CP_UTF8, 0, temp_name, -1, psName, size_needed, NULL, NULL); + char *mbName = (char *) malloc(size_needed); + WideCharToMultiByte(CP_UTF8, 0, temp_name, -1, mbName, size_needed, NULL, NULL); + meta.postscript_name = mbName; + IDWriteLocalizedStrings_Release(psNames); } @@ -618,7 +619,7 @@ static void scan_fonts(IDWriteFactory *factory, FontPrivate *font_priv = (FontPrivate *) calloc(1, sizeof(*font_priv)); font_priv->font = font; - ass_font_provider_add_font(provider, &meta, NULL, 0, psName, font_priv); + ass_font_provider_add_font(provider, &meta, NULL, 0, font_priv); for (UINT32 k = 0; k < meta.n_family; ++k) free(meta.families[k]); @@ -626,7 +627,7 @@ static void scan_fonts(IDWriteFactory *factory, free(meta.fullnames[k]); free(meta.fullnames); free(meta.families); - free(psName); + free(meta.postscript_name); } } } diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c index 30a9d38..8f885c8 100644 --- a/libass/ass_fontconfig.c +++ b/libass/ass_fontconfig.c @@ -133,8 +133,7 @@ static void scan_fonts(FcConfig *config, ASS_FontProvider *provider) meta.n_fullname++; meta.fullnames = fullnames; - ass_font_provider_add_font(provider, &meta, path, index, NULL, - (void *)pat); + ass_font_provider_add_font(provider, &meta, path, index, (void *)pat); } } diff --git a/libass/ass_fontselect.c b/libass/ass_fontselect.c index 72d6d0b..d0d282f 100644 --- a/libass/ass_fontselect.c +++ b/libass/ass_fontselect.c @@ -237,14 +237,13 @@ static void ass_font_provider_free_fontinfo(ASS_FontInfo *info) * \param meta basic metadata of the font * \param path path to the font file, or NULL * \param index face index inside the file (-1 to look up by PostScript name) - * \param psname PostScript name of the face * \param data private data for the font * \return success */ int ass_font_provider_add_font(ASS_FontProvider *provider, ASS_FontProviderMetaData *meta, const char *path, - int index, const char *psname, void *data) + int index, void *data) { int i; int weight, slant, width; @@ -322,15 +321,15 @@ ass_font_provider_add_font(ASS_FontProvider *provider, goto error; } - if (path) { - info->path = strdup(path); - if (info->path == NULL) + if (meta->postscript_name) { + info->postscript_name = strdup(meta->postscript_name); + if (info->postscript_name == NULL) goto error; } - if (psname) { - info->postscript_name = strdup(psname); - if (info->postscript_name == NULL) + if (path) { + info->path = strdup(path); + if (info->path == NULL) goto error; } @@ -881,8 +880,7 @@ static void process_fontdata(ASS_FontProvider *priv, ASS_Library *library, ft->face = face; ft->idx = idx; - if (ass_font_provider_add_font(priv, &info, NULL, face_index, - NULL, ft)) { + if (ass_font_provider_add_font(priv, &info, NULL, face_index, ft)) { ass_msg(library, MSGL_WARN, "Failed to add embedded font '%s'", name); } diff --git a/libass/ass_fontselect.h b/libass/ass_fontselect.h index 93bd746..f1e2933 100644 --- a/libass/ass_fontselect.h +++ b/libass/ass_fontselect.h @@ -147,7 +147,6 @@ typedef struct font_provider_funcs { * At minimum one family is required. */ struct ass_font_provider_meta_data { - /** * List of localized font family names, e.g. "Arial". */ @@ -158,6 +157,12 @@ struct ass_font_provider_meta_data { * The English name should be listed first to speed up typical matching. */ char **fullnames; + + /** + * The PostScript name, e.g. "Arial-BoldMT". + */ + char *postscript_name; + int n_family; // Number of localized family names int n_fullname; // Number of localized full names @@ -231,7 +236,6 @@ ass_create_font_provider(ASS_Renderer *priv, ASS_FontProviderFuncs *funcs, * \param path absolute path to font, or NULL for memory-based fonts * \param index index inside a font collection file * (-1 to look up by PostScript name) - * \param psname PostScript name of the face * \param data private data for font callbacks * \return success * @@ -239,7 +243,7 @@ ass_create_font_provider(ASS_Renderer *priv, ASS_FontProviderFuncs *funcs, int ass_font_provider_add_font(ASS_FontProvider *provider, ASS_FontProviderMetaData *meta, const char *path, - int index, const char *psname, void *data); + int index, void *data); /** * \brief Free font provider and associated fonts. -- cgit v1.2.3