[MPlayer-cvslog] r21634 - in trunk/libass: ass_font.c ass_font.h

eugeni subversion at mplayerhq.hu
Sat Dec 16 20:29:33 CET 2006


Author: eugeni
Date: Sat Dec 16 20:29:33 2006
New Revision: 21634

Modified:
   trunk/libass/ass_font.c
   trunk/libass/ass_font.h

Log:
Avoid storing font file path and index in ass_font_t.


Modified: trunk/libass/ass_font.c
==============================================================================
--- trunk/libass/ass_font.c	(original)
+++ trunk/libass/ass_font.c	Sat Dec 16 20:29:33 2006
@@ -96,8 +96,6 @@
 	
 	font = calloc(1, sizeof(ass_font_t));
 	font->ftlibrary = ftlibrary;
-	font->path = strdup(path);
-	font->index = index;
 	font->face = face;
 	font->desc.family = strdup(desc->family);
 	font->desc.bold = desc->bold;
@@ -137,7 +135,7 @@
 }
 
 #ifdef HAVE_FONTCONFIG
-static void ass_font_reselect(void* fontconfig_priv, ass_font_t* font)
+static void ass_font_reselect(void* fontconfig_priv, ass_font_t* font, uint32_t ch)
 {
 	char* path;
 	int index;
@@ -146,10 +144,6 @@
 	
 	path = fontconfig_select_with_charset(fontconfig_priv, font->desc.family, font->desc.bold,
 					      font->desc.italic, &index, font->charset);
-	if (strcasecmp(path, font->path) == 0 && index == font->index) {
-		free(path);
-		return;
-	}
 
 	error = FT_New_Face(font->ftlibrary, path, index, &face);
 	if (error) {
@@ -158,12 +152,15 @@
 	}
 	charmap_magic(face);
 
+	error = FT_Get_Char_Index(face, ch);
+	if (error == 0) { // the new font face is not better then the old one
+		FT_Done_Face(face);
+		return;
+	}
+
 	if (font->face) FT_Done_Face(font->face);
-	free(font->path);
 
 	font->face = face;
-	font->path = strdup(path);
-	font->index = index;
 	
 	FT_Set_Transform(font->face, &font->m, &font->v);
 	FT_Set_Pixel_Sizes(font->face, 0, font->size);
@@ -203,7 +200,7 @@
 	if (index == 0) {
 		mp_msg(MSGT_ASS, MSGL_INFO, MSGTR_LIBASS_GlyphNotFoundReselectingFont,
 		       ch, font->desc.family, font->desc.bold, font->desc.italic);
-		ass_font_reselect(fontconfig_priv, font);
+		ass_font_reselect(fontconfig_priv, font, ch);
 		index = FT_Get_Char_Index(font->face, ch);
 		if (index == 0) {
 			mp_msg(MSGT_ASS, MSGL_ERR, MSGTR_LIBASS_GlyphNotFound,
@@ -253,7 +250,6 @@
 void ass_font_free(ass_font_t* font)
 {
 	if (font->face) FT_Done_Face(font->face);
-	if (font->path) free(font->path);
 	if (font->desc.family) free(font->desc.family);
 #ifdef HAVE_FONTCONFIG
 	if (font->charset) FcCharSetDestroy(font->charset);

Modified: trunk/libass/ass_font.h
==============================================================================
--- trunk/libass/ass_font.h	(original)
+++ trunk/libass/ass_font.h	Sat Dec 16 20:29:33 2006
@@ -33,8 +33,6 @@
 
 typedef struct ass_font_s {
 	ass_font_desc_t desc;
-	char* path;
-	int index;
 	FT_Library ftlibrary;
 	FT_Face face;
 	FT_Matrix m; // current transformation



More information about the MPlayer-cvslog mailing list