# HG changeset patch # User eugeni # Date 1231260287 0 # Node ID 898051d5d9b44f69b0a4c990ae3f49b9cf2a3be7 # Parent 4940b8a98c782a248dfa98e6ed5494874980869d 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. diff -r 4940b8a98c78 -r 898051d5d9b4 libvo/font_load.h --- 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); diff -r 4940b8a98c78 -r 898051d5d9b4 libvo/font_load_ft.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); }