From 1dd6464be99903b492994fb788c4f6334f5f58e8 Mon Sep 17 00:00:00 2001 From: Franz Thoma Date: Sun, 20 Dec 2015 16:06:43 +0900 Subject: Fix semi-transparent artifacts in w3m-img when used with 32-bit color (e.g. urxvt) imlib_render_image_on_drawable_at_size() tended to leave nasty semi-transparent artifacts in 32-bit mode. Apparently, resizing an image in 32-bit mode affects the alpha channel even if there is no transparency in the image. With this patch, resizing is done in 24-bit mode (or whatever depth the original image has) before converting the image to 32-bit and rendering it on the display. Origin: https://gist.github.com/fmthoma/f76a1b44e00d5ca972bb cf. https://github.com/hut/ranger/issues/86#issuecomment-166027119 --- w3mimg/x11/x11_w3mimg.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'w3mimg/x11') diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c index ac21f6b..9a539de 100644 --- a/w3mimg/x11/x11_w3mimg.c +++ b/w3mimg/x11/x11_w3mimg.c @@ -423,6 +423,10 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) w = imlib_image_get_width(); if (h <= 0) h = imlib_image_get_height(); + + im = imlib_create_cropped_scaled_image(0, 0, imlib_image_get_width(), imlib_image_get_height(), w, h); + imlib_context_set_image(im); + img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h, attr.depth); if (!img->pixmap) @@ -433,7 +437,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) imlib_context_set_visual(attr.visual); imlib_context_set_colormap(attr.colormap); imlib_context_set_drawable((Drawable) img->pixmap); - imlib_render_image_on_drawable_at_size(0, 0, w, h); + imlib_render_image_on_drawable(0, 0); imlib_free_image(); #elif defined(USE_GDKPIXBUF) max_anim = self->max_anim; -- cgit v1.2.3