changeset 28241:898051d5d9b4

Support loading font faces other then the first one in a font file. With -fontconfig, it is possible to select a face with index higher than 0 in a multi-face font file. Currently, with the old rendering code, this information is lost and the first face is loaded. With this change, index supplied by fontconfig is used for font loading. Patch by Adrian Stutz, adrian sttz ch.
author eugeni
date Tue, 06 Jan 2009 16:44:47 +0000
parents 4940b8a98c78
children 0f3f2969d907
files libvo/font_load.h libvo/font_load_ft.c
diffstat 2 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/font_load.h	Mon Jan 05 22:55:58 2009 +0000
+++ b/libvo/font_load.h	Tue Jan 06 16:44:47 2009 +0000
@@ -79,7 +79,7 @@
 int init_freetype(void);
 int done_freetype(void);
 
-font_desc_t* read_font_desc_ft(const char* fname,int movie_width, int movie_height, float font_scale_factor);
+font_desc_t* read_font_desc_ft(const char* fname,int face_index,int movie_width, int movie_height, float font_scale_factor);
 void free_font_desc(font_desc_t *desc);
 
 void render_one_glyph(font_desc_t *desc, int c);
--- a/libvo/font_load_ft.c	Mon Jan 05 22:55:58 2009 +0000
+++ b/libvo/font_load_ft.c	Tue Jan 06 16:44:47 2009 +0000
@@ -893,11 +893,11 @@
     free(desc);
 }
 
-static int load_sub_face(const char *name, FT_Face *face)
+static int load_sub_face(const char *name, int face_index, FT_Face *face)
 {
     int err = -1;
     
-    if (name) err = FT_New_Face(library, name, 0, face);
+    if (name) err = FT_New_Face(library, name, face_index, face);
 
     if (err) {
 	char *font_file = get_path("subfont.ttf");
@@ -940,7 +940,7 @@
     return f266ToInt(kern.x);
 }
 
-font_desc_t* read_font_desc_ft(const char *fname, int movie_width, int movie_height, float font_scale_factor)
+font_desc_t* read_font_desc_ft(const char *fname, int face_index, int movie_width, int movie_height, float font_scale_factor)
 {
     font_desc_t *desc = NULL;
 
@@ -1002,7 +1002,7 @@
 //    t=GetTimer();
 
     /* generate the subtitle font */
-    err = load_sub_face(fname, &face);
+    err = load_sub_face(fname, face_index, &face);
     if (err) {
 	mp_msg(MSGT_OSD, MSGL_WARN, MSGTR_LIBVO_FONT_LOAD_FT_SubFaceFailed);
 	goto gen_osd;
@@ -1128,6 +1128,7 @@
     FcPattern *fc_pattern;
     FcPattern *fc_pattern2;
     FcChar8 *s;
+    int face_index;
     FcBool scalable;
 #endif
     font_desc_t *vo_font = *fontp;
@@ -1163,10 +1164,11 @@
 	}
 	// s doesn't need to be freed according to fontconfig docs
 	FcPatternGetString(fc_pattern, FC_FILE, 0, &s);
-	*fontp=read_font_desc_ft(s, width, height, font_scale_factor);
+	FcPatternGetInteger(fc_pattern, FC_INDEX, 0, &face_index);
+	*fontp=read_font_desc_ft(s, face_index, width, height, font_scale_factor);
 	FcPatternDestroy(fc_pattern);
     }
     else
 #endif
-    *fontp=read_font_desc_ft(font_name, width, height, font_scale_factor);
+    *fontp=read_font_desc_ft(font_name, 0, width, height, font_scale_factor);
 }