gtk+ r19488 - in trunk: . gdk
- From: chpe svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r19488 - in trunk: . gdk
- Date: Wed, 6 Feb 2008 23:08:08 +0000 (GMT)
Author: chpe
Date: Wed Feb 6 23:08:07 2008
New Revision: 19488
URL: http://svn.gnome.org/viewvc/gtk+?rev=19488&view=rev
Log:
2008-02-07 Christian Persch <chpe gnome org>
* gdk/gdkpixbuf-render.c:
(gdk_pixbuf_render_pixmap_and_mask_for_colormap): If the pixbuf has an
alpha channel, use gdk_draw_rgb_32_image to draw it to the pixmap;
otherwise there will be random pixel values in the semi-transparent
area of the pixbuf within the mask. Bug #487865.
Modified:
trunk/ChangeLog
trunk/gdk/gdkpixbuf-render.c
Modified: trunk/gdk/gdkpixbuf-render.c
==============================================================================
--- trunk/gdk/gdkpixbuf-render.c (original)
+++ trunk/gdk/gdkpixbuf-render.c Wed Feb 6 23:08:07 2008
@@ -305,11 +305,24 @@
gdk_drawable_set_colormap (GDK_DRAWABLE (*pixmap_return), colormap);
gc = _gdk_drawable_get_scratch_gc (*pixmap_return, FALSE);
- gdk_draw_pixbuf (*pixmap_return, gc, pixbuf,
- 0, 0, 0, 0,
- gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf),
- GDK_RGB_DITHER_NORMAL,
- 0, 0);
+
+ /* If the pixbuf has an alpha channel, using gdk_pixbuf_draw would give
+ * random pixel values in the area that are within the mask, but semi-
+ * transparent. So we treat the pixbuf like a pixbuf without alpha channel;
+ * see bug #487865.
+ */
+ if (gdk_pixbuf_get_has_alpha (pixbuf))
+ gdk_draw_rgb_32_image (*pixmap_return, gc,
+ 0, 0,
+ gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf),
+ GDK_RGB_DITHER_NORMAL,
+ gdk_pixbuf_get_pixels (pixbuf), gdk_pixbuf_get_rowstride (pixbuf));
+ else
+ gdk_draw_pixbuf (*pixmap_return, gc, pixbuf,
+ 0, 0, 0, 0,
+ gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf),
+ GDK_RGB_DITHER_NORMAL,
+ 0, 0);
}
if (mask_return)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]