From aa9e2e888ef7eaca961e6d7c17ec1ebab0469e54 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Fri, 20 Nov 2020 10:33:31 +0100 Subject: Fix for issue #159 - continued Changes here concentrate the fix within static function alpha_blend() and thus are visible only when drawing transparent images under X11 platform without Xrender. --- src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx') diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx index c7a811262..2dc9a76aa 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx @@ -658,13 +658,15 @@ static void alpha_blend(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, i int ld = img->ld(); if (ld == 0) ld = img->data_w() * img->d(); uchar *srcptr = (uchar*)img->array + cy * ld + cx * img->d(); - int srcskip = ld - img->d() * W; - uchar *dst = new uchar[W * H * 3]; + uchar *dst = fl_read_image(NULL, X, Y, W, H, 0); + if (!dst) { + fl_draw_image(srcptr, X, Y, W, H, img->d(), ld); + return; + } + int srcskip = ld - img->d() * W; uchar *dstptr = dst; - fl_read_image(dst, X, Y, W, H, 0); - uchar srcr, srcg, srcb, srca; uchar dstr, dstg, dstb, dsta; -- cgit v1.2.3