Mercurial > mplayer.hg
changeset 23025:ab0943242d1a
Store outline_glyph (glyph border) in glyph cache.
author | eugeni |
---|---|
date | Fri, 20 Apr 2007 23:13:34 +0000 |
parents | a66b42eda8e8 |
children | 91076557ab81 |
files | libass/ass_cache.c libass/ass_cache.h libass/ass_render.c |
diffstat | 3 files changed, 12 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/libass/ass_cache.c Fri Apr 20 23:12:19 2007 +0000 +++ b/libass/ass_cache.c Fri Apr 20 23:13:34 2007 +0000 @@ -283,6 +283,7 @@ { glyph_hash_val_t* v = value; if (v->glyph) FT_Done_Glyph(v->glyph); + if (v->outline_glyph) FT_Done_Glyph(v->outline_glyph); free(key); free(value); }
--- a/libass/ass_cache.h Fri Apr 20 23:12:19 2007 +0000 +++ b/libass/ass_cache.h Fri Apr 20 23:13:34 2007 +0000 @@ -69,6 +69,7 @@ typedef struct glyph_hash_val_s { FT_Glyph glyph; + FT_Glyph outline_glyph; FT_BBox bbox_scaled; // bbox after scaling, but before rotation FT_Vector advance; // 26.6, advance distance to the next bitmap in line } glyph_hash_val_t;
--- a/libass/ass_render.c Fri Apr 20 23:12:19 2007 +0000 +++ b/libass/ass_render.c Fri Apr 20 23:13:34 2007 +0000 @@ -1243,6 +1243,7 @@ val = cache_find_glyph(&key); if (val) { FT_Glyph_Copy(val->glyph, &info->glyph); + FT_Glyph_Copy(val->outline_glyph, &info->outline_glyph); info->bbox = val->bbox_scaled; info->advance.x = val->advance.x; info->advance.y = val->advance.y; @@ -1255,19 +1256,20 @@ info->advance.y = d16_to_d6(info->glyph->advance.y); FT_Glyph_Get_CBox( info->glyph, FT_GLYPH_BBOX_PIXELS, &info->bbox); + if (render_context.stroker) { + info->outline_glyph = info->glyph; + error = FT_Glyph_StrokeBorder( &(info->outline_glyph), render_context.stroker, 0 , 0 ); // don't destroy original + if (error) { + mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_FT_Glyph_Stroke_Error, error); + } + } + FT_Glyph_Copy(info->glyph, &v.glyph); + FT_Glyph_Copy(info->outline_glyph, &v.outline_glyph); v.advance = info->advance; v.bbox_scaled = info->bbox; cache_add_glyph(&key, &v); } - - if (render_context.stroker) { - info->outline_glyph = info->glyph; - error = FT_Glyph_StrokeBorder( &(info->outline_glyph), render_context.stroker, 0 , 0 ); // don't destroy original - if (error) { - mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_FT_Glyph_Stroke_Error, error); - } - } } /**