]> Pileus Git - ~andy/gtk/commitdiff
Fix clipping of drawn pixbufs in the no-render case
authorAlexander Larsson <alexl@redhat.com>
Tue, 25 Aug 2009 06:57:10 +0000 (08:57 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 25 Aug 2009 08:37:18 +0000 (10:37 +0200)
The fallback pixbuf rendering case ends up calling gdk_draw_image() on the
destination drawable wrapper, which resets the previously set clip region.
So, we need to manually get the impl and draw on that directly.

This fixes bug 592752 where we don't clip pixbuf rendering on non-render
Xservers.

gdk/gdkdraw.c

index 8ab946479c3765bd073f86cecd5b8e0770dc3b9b..041d94e682ee9a77963912bc01c4cfa02c1db4df 100644 (file)
@@ -1638,12 +1638,14 @@ gdk_drawable_real_draw_pixbuf (GdkDrawable  *drawable,
      have already retargeted the destination to any
      impl window and set the clip, so what we really
      want to do is draw directly on the impl, ignoring
-     client side subwindows. */
+     client side subwindows. We also use the impl
+     in the pixmap target case to avoid resetting the
+     already set clip on the GC. */
   if (GDK_IS_WINDOW (drawable))
     real_drawable = GDK_WINDOW_OBJECT (drawable)->impl;
   else
-    real_drawable = drawable;
-  
+    real_drawable = GDK_PIXMAP_OBJECT (drawable)->impl;
+
   if (pixbuf->has_alpha)
     {
       GdkVisual *visual = gdk_drawable_get_visual (drawable);