summaryrefslogtreecommitdiffstats
path: root/libass/ass_bitmap.c
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2012-12-16 19:02:32 +0200
committerOleg Oshmyan <chortos@inbox.lv>2012-12-28 18:59:06 +0200
commitfb1109b4bdec040dab5cdb00a342557b977e9c12 (patch)
tree3d045fd10cca57a733e9fd3fa3c4b2f34389745f /libass/ass_bitmap.c
parent62275969552280956d6555f89b9a46427868d6ac (diff)
downloadlibass-fb1109b4bdec040dab5cdb00a342557b977e9c12.tar.bz2
libass-fb1109b4bdec040dab5cdb00a342557b977e9c12.tar.xz
Properly render opaque box shadows even when there is no border
Even if the border size is zero, the shadow is supposed to be a copy of a hypothetical border: when border_style is 1, this coincides with the borderless glyph, but when border_style is 3, the shadow must be an opaque box. Opaque box borders are now generated regardless of border size being non-zero, and outline_to_bitmap3 gets a new flag indicating whether it should discard the border (after generating a shadow from it).
Diffstat (limited to 'libass/ass_bitmap.c')
-rw-r--r--libass/ass_bitmap.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c
index e5738e2..0ad1647 100644
--- a/libass/ass_bitmap.c
+++ b/libass/ass_bitmap.c
@@ -456,7 +456,7 @@ int outline_to_bitmap3(ASS_Library *library, ASS_SynthPriv *priv_blur,
FT_Library ftlib, FT_Outline *outline, FT_Outline *border,
Bitmap **bm_g, Bitmap **bm_o, Bitmap **bm_s,
int be, double blur_radius, FT_Vector shadow_offset,
- int border_style)
+ int border_style, int border_visible)
{
blur_radius *= 2;
int bbord = be > 0 ? sqrt(2 * be) : 0;
@@ -512,8 +512,11 @@ int outline_to_bitmap3(ASS_Library *library, ASS_SynthPriv *priv_blur,
if (*bm_o && border_style != 3) {
*bm_s = copy_bitmap(*bm_o);
fix_outline(*bm_g, *bm_o);
- } else if (*bm_o) {
+ } else if (*bm_o && border_visible) {
*bm_s = copy_bitmap(*bm_o);
+ } else if (*bm_o) {
+ *bm_s = *bm_o;
+ *bm_o = 0;
} else
*bm_s = copy_bitmap(*bm_g);