0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 12:02:23 +02:00

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.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28276 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
eugeni 2009-01-06 16:44:47 +00:00
parent 575766b8a7
commit d3b5452f49
2 changed files with 9 additions and 7 deletions

View File

@ -79,7 +79,7 @@ extern int force_load_font;
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);

View File

@ -893,11 +893,11 @@ void free_font_desc(font_desc_t *desc)
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 @@ int kerning(font_desc_t *desc, int prevc, int c)
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 @@ font_desc_t* read_font_desc_ft(const char *fname, int movie_width, int movie_hei
// 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 @@ void load_font_ft(int width, int height, font_desc_t** fontp, const char *font_n
FcPattern *fc_pattern;
FcPattern *fc_pattern2;
FcChar8 *s;
int face_index;
FcBool scalable;
#endif
font_desc_t *vo_font = *fontp;
@ -1163,10 +1164,11 @@ void load_font_ft(int width, int height, font_desc_t** fontp, const char *font_n
}
// 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);
}