From 4648a02281ff0860cb06e3f56df9095b8a114294 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 31 May 2014 23:56:24 +0200 Subject: Add BorderStyle=4, background color for text This is somewhat similar to BorderStyle=3, but with a number of differences. Mainly, this new BorderStyle doesn't create overlaps within an event. Closes #105. --- libass/ass.h | 2 +- libass/ass_render.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libass/ass.h b/libass/ass.h index 17af8cb..b797a97 100644 --- a/libass/ass.h +++ b/libass/ass.h @@ -23,7 +23,7 @@ #include #include "ass_types.h" -#define LIBASS_VERSION 0x01102000 +#define LIBASS_VERSION 0x01102001 /* * A linked list of images produced by an ass renderer. diff --git a/libass/ass_render.c b/libass/ass_render.c index 8e590e8..c64100f 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -670,6 +670,8 @@ static ASS_Image *render_text(ASS_Renderer *render_priv, int dst_x, int dst_y) CombinedBitmapInfo *info = &text_info->combined_bitmaps[i]; if (!info->bm_s || (info->shadow_x == 0 && info->shadow_y == 0)) continue; + if (render_priv->state.border_style == 4) + continue; pen_x = dst_x + info->pos.x + @@ -2541,6 +2543,24 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, event_images->event = event; event_images->imgs = render_text(render_priv, (int) device_x, (int) device_y); + if (render_priv->state.border_style == 4) { + void *nbuffer = ass_aligned_alloc(1, event_images->width * event_images->height); + if (nbuffer) { + free_list_add(render_priv, nbuffer); + memset(nbuffer, 0xFF, event_images->width * event_images->height); + ASS_Image *img = my_draw_bitmap(nbuffer, event_images->width, + event_images->height, + event_images->width, + event_images->left, + event_images->top, + render_priv->state.c[3]); + if (img) { + img->next = event_images->imgs; + event_images->imgs = img; + } + } + } + ass_shaper_cleanup(render_priv->shaper, text_info); free_render_context(render_priv); -- cgit v1.2.3