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);
-		}
-	}
 }
 
 /**