diff options
author | Franz Thoma <franz.thoma@tngtech.com> | 2015-12-20 07:06:43 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@debian.org> | 2015-12-20 07:06:43 +0000 |
commit | 1dd6464be99903b492994fb788c4f6334f5f58e8 (patch) | |
tree | a8b408f061a3c60ed52935687fd29bc59bd05bde /w3mimg/x11/x11_w3mimg.c | |
parent | Update ChangeLog (diff) | |
download | w3m-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.c | 6 |
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; |