diff options
author | wm4 <wm4@nowhere> | 2014-05-31 23:19:45 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-06-01 16:43:57 +0200 |
commit | dc0a14e61a1c454d593db5a91de0819921a2ddc9 (patch) | |
tree | aaa530a122ae1f60c531201f0decf44e5318e24c /libass/ass_render.c | |
parent | 014837c4a138ae37addeaf72f90c131fcb3ea1fc (diff) | |
download | libass-dc0a14e61a1c454d593db5a91de0819921a2ddc9.tar.bz2 libass-dc0a14e61a1c454d593db5a91de0819921a2ddc9.tar.xz |
Fix change detection when text is clipped to screen
The glyphs are clipped before combining, so the combined bitmap can
always have the same position, size, and address. This breaks the
change detection. Or at least I think that's what happens.
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 85c6aec..8e590e8 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -449,18 +449,22 @@ render_glyph(ASS_Renderer *render_priv, Bitmap *bm, int dst_x, int dst_y, tmp = dst_x - clip_x0; if (tmp < 0) { b_x0 = -tmp; + render_priv->state.has_clips = 1; } tmp = dst_y - clip_y0; if (tmp < 0) { b_y0 = -tmp; + render_priv->state.has_clips = 1; } tmp = clip_x1 - dst_x - bm->w; if (tmp < 0) { b_x1 = bm->w + tmp; + render_priv->state.has_clips = 1; } tmp = clip_y1 - dst_y - bm->h; if (tmp < 0) { b_y1 = bm->h + tmp; + render_priv->state.has_clips = 1; } if ((b_y0 >= b_y1) || (b_x0 >= b_x1)) @@ -571,7 +575,7 @@ static void blend_vector_clip(ASS_Renderer *render_priv, int aleft, atop, bleft, btop; unsigned char *abuffer, *bbuffer, *nbuffer; - render_priv->state.has_vector_clip = 1; + render_priv->state.has_clips = 1; abuffer = cur->bitmap; bbuffer = clip_bm->buffer; @@ -810,7 +814,7 @@ init_render_context(ASS_Renderer *render_priv, ASS_Event *event) render_priv->state.event = event; render_priv->state.style = render_priv->track->styles + event->Style; render_priv->state.parsed_tags = 0; - render_priv->state.has_vector_clip = 0; + render_priv->state.has_clips = 0; reset_render_context(render_priv, render_priv->state.style); render_priv->state.wrap_style = render_priv->track->WrapStyle; @@ -2856,7 +2860,7 @@ static int ass_detect_change(ASS_Renderer *priv) ASS_Image *img, *img2; int diff; - if (priv->cache_cleared || priv->state.has_vector_clip) + if (priv->cache_cleared || priv->state.has_clips) return 2; img = priv->prev_images_root; |