aboutsummaryrefslogtreecommitdiffstats
path: root/w3mimg/x11/x11_w3mimg.c
diff options
context:
space:
mode:
authorFranz Thoma <franz.thoma@tngtech.com>2015-12-20 07:06:43 +0000
committerTatsuya Kinoshita <tats@debian.org>2015-12-20 07:06:43 +0000
commit1dd6464be99903b492994fb788c4f6334f5f58e8 (patch)
treea8b408f061a3c60ed52935687fd29bc59bd05bde /w3mimg/x11/x11_w3mimg.c
parentUpdate ChangeLog (diff)
downloadw3m-1dd6464be99903b492994fb788c4f6334f5f58e8.tar.gz
w3m-1dd6464be99903b492994fb788c4f6334f5f58e8.zip
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
Diffstat (limited to 'w3mimg/x11/x11_w3mimg.c')
-rw-r--r--w3mimg/x11/x11_w3mimg.c6
1 files changed, 5 insertions, 1 deletions
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;