aboutsummaryrefslogtreecommitdiffstats
path: root/w3mimg
diff options
context:
space:
mode:
authorFumitoshi UKAI <ukai@debian.or.jp>2002-09-30 17:44:30 +0000
committerFumitoshi UKAI <ukai@debian.or.jp>2002-09-30 17:44:30 +0000
commitfa68f163df510ecb08eaf0167ceab20673ebd4d8 (patch)
treeca5a55c87c4046fdc8bffdf0e12492d74ca93910 /w3mimg
parent[w3m-dev 03327] gdk-pixbuf support for w3m-img/x11 (diff)
downloadw3m-fa68f163df510ecb08eaf0167ceab20673ebd4d8.tar.gz
w3m-fa68f163df510ecb08eaf0167ceab20673ebd4d8.zip
[w3m-dev 03330] Re: hang up when seeing web page that contains xbm file
* w3mimg/x11/x11_w3mimg.c (x11_load_image): scaling From: Yuji Abe <cbo46560@pop12.odn.ne.jp>
Diffstat (limited to 'w3mimg')
-rw-r--r--w3mimg/x11/x11_w3mimg.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c
index 843a2d1..6741771 100644
--- a/w3mimg/x11/x11_w3mimg.c
+++ b/w3mimg/x11/x11_w3mimg.c
@@ -1,4 +1,4 @@
-/* $Id: x11_w3mimg.c,v 1.7 2002/09/29 15:29:12 ukai Exp $ */
+/* $Id: x11_w3mimg.c,v 1.8 2002/09/30 17:44:30 ukai Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
@@ -153,6 +153,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
ImlibImage *im;
#elif defined(USE_GDKPIXBUF)
GdkPixbuf *pixbuf;
+ int iw, ih;
#endif
if (self == NULL)
@@ -173,10 +174,12 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
pixbuf = gdk_pixbuf_new_from_file(fname);
if (!pixbuf)
return 0;
+ iw = gdk_pixbuf_get_width(pixbuf);
+ ih = gdk_pixbuf_get_height(pixbuf);
if (w <= 0)
- w = gdk_pixbuf_get_width(pixbuf);
+ w = iw;
if (h <= 0)
- h = gdk_pixbuf_get_height(pixbuf);
+ h = ih;
#endif
img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,
DefaultDepth(xi->display, 0));
@@ -188,9 +191,18 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
Imlib_paste_image(xi->id, im, (Pixmap) img->pixmap, 0, 0, w, h);
Imlib_kill_image(xi->id, im);
#elif defined(USE_GDKPIXBUF)
- gdk_pixbuf_xlib_render_to_drawable(pixbuf, (Drawable) img->pixmap,
- xi->imageGC, 0, 0, 0, 0, w, h,
- XLIB_RGB_DITHER_NORMAL, 0, 0);
+ if (w != iw || h != ih) {
+ GdkPixbuf *newpixbuf;
+ newpixbuf = gdk_pixbuf_scale_simple(pixbuf, w, h, GDK_INTERP_BILINEAR);
+ gdk_pixbuf_xlib_render_to_drawable(newpixbuf, (Drawable) img->pixmap,
+ xi->imageGC, 0, 0, 0, 0, w, h,
+ XLIB_RGB_DITHER_NORMAL, 0, 0);
+ gdk_pixbuf_finalize(newpixbuf);
+ } else {
+ gdk_pixbuf_xlib_render_to_drawable(pixbuf, (Drawable) img->pixmap,
+ xi->imageGC, 0, 0, 0, 0, w, h,
+ XLIB_RGB_DITHER_NORMAL, 0, 0);
+ }
gdk_pixbuf_unref(pixbuf);
#endif
img->width = w;