From 7c281a626d8809d14b2c26b398569a42d50ad837 Mon Sep 17 00:00:00 2001 From: eugeni Date: Fri, 20 Apr 2007 23:19:23 +0000 Subject: Add shift_[xy] (vector that is added to the glyph before transformation) to bitmap glyph key. Result of rotation depends on them because of perspective transformation. They are only set when some rotation take place. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23046 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libass/ass_cache.h | 3 +++ libass/ass_render.c | 12 +++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'libass') diff --git a/libass/ass_cache.h b/libass/ass_cache.h index a0403d03fb..7ff75885b8 100644 --- a/libass/ass_cache.h +++ b/libass/ass_cache.h @@ -39,6 +39,9 @@ typedef struct bitmap_hash_key_s { unsigned scale_x, scale_y; // 16.16 int frx, fry, frz; // signed 16.16 + int shift_x, shift_y; // shift vector that was added to glyph before applying rotation + // = 0, if frx = fry = frx = 0 + // = (glyph base point) - (rotation origin), otherwise FT_Vector advance; // subpixel shift vector } bitmap_hash_key_t; diff --git a/libass/ass_render.c b/libass/ass_render.c index 44cc272ecb..d139c2e109 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1926,9 +1926,6 @@ static int ass_render_event(ass_event_t* event, event_images_t* event_images) render_context.clip_y1 = y2scr(render_context.clip_y1); } - for (i = 0; i < text_info.length; ++i) - get_bitmap_glyph(text_info.glyphs + i); - // rotate glyphs if needed { FT_Vector center; @@ -1949,6 +1946,15 @@ static int ass_render_event(ass_event_t* event, event_images_t* event_images) FT_Vector shift; glyph_info_t* info = text_info.glyphs + i; + if (info->hash_key.frx || info->hash_key.fry || info->hash_key.frz) { + info->hash_key.shift_x = info->pos.x + device_x - center.x; + info->hash_key.shift_y = - (info->pos.y + device_y - center.y); + } else { + info->hash_key.shift_x = 0; + info->hash_key.shift_y = 0; + } + get_bitmap_glyph(info); + if (info->bm == 0) { // calculating shift vector shift.x = int_to_d6(info->pos.x + device_x - center.x); -- cgit v1.2.3