summaryrefslogtreecommitdiffstats
path: root/libass/ass_font.c
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-12-03 18:24:11 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-12-03 18:24:11 +0000
commit92256c07d1383814a69dcc6f8cfe55437a371b34 (patch)
tree8de70dd63452373731f3573ec640ef9a2cddffea /libass/ass_font.c
parentf37cc953f5b5ff764edb0a858d81127cabf5cf59 (diff)
downloadmpv-92256c07d1383814a69dcc6f8cfe55437a371b34.tar.bz2
mpv-92256c07d1383814a69dcc6f8cfe55437a371b34.tar.xz
Open embedded fonts directly from memory.
FontConfig 2.4.2 (released yesterday) supports scanning fonts with FcFreeTypeQueryFace without writing them to disk. With earlier FontConfig versions, the old mechanism is used. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21476 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass_font.c')
-rw-r--r--libass/ass_font.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c
index 176dbed6ba..80490fad6a 100644
--- a/libass/ass_font.c
+++ b/libass/ass_font.c
@@ -52,13 +52,23 @@ static void charmap_magic(FT_Face face)
}
}
-ass_font_t* ass_font_new(FT_Library ftlibrary, void* fc_priv, ass_font_desc_t* desc)
+static int find_font(ass_library_t* library, char* name)
+{
+ int i;
+ for (i = 0; i < library->num_fontdata; ++i)
+ if (strcasecmp(name, library->fontdata[i].name) == 0)
+ return i;
+ return -1;
+}
+
+ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_priv, ass_font_desc_t* desc)
{
char* path;
int index;
FT_Face face;
int error;
ass_font_t* font;
+ int mem_idx;
font = ass_font_cache_find(desc);
if (font)
@@ -66,11 +76,21 @@ ass_font_t* ass_font_new(FT_Library ftlibrary, void* fc_priv, ass_font_desc_t* d
path = fontconfig_select(fc_priv, desc->family, desc->bold, desc->italic, &index);
+ mem_idx = find_font(library, path);
+ if (mem_idx >= 0) {
+ error = FT_New_Memory_Face(ftlibrary, library->fontdata[mem_idx].data,
+ library->fontdata[mem_idx].size, 0, &face);
+ if (error) {
+ mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_ErrorOpeningMemoryFont, path);
+ return 0;
+ }
+ } else {
error = FT_New_Face(ftlibrary, path, index, &face);
if (error) {
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_ErrorOpeningFont, path, index);
return 0;
}
+ }
charmap_magic(face);