[gtk+] Make clipmasks work for pixbuf rendering



commit 2678a454e5447ba28cf1aa7c316a1e73b7b30018
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Jul 7 14:51:38 2009 +0200

    Make clipmasks work for pixbuf rendering
    
    This is more important in the client side windows world, as clip masks
    may be used for clipping to non-native subwindows. This fixes a bug
    in aisleriot where it uses masked pixbuf drawing and it ends up drawing
    over the moving card subwindow.

 NEWS                      |    9 +++++++++
 gdk/gdkdraw.c             |    3 ---
 gdk/x11/gdkdrawable-x11.c |   17 +++++++++++++++--
 3 files changed, 24 insertions(+), 5 deletions(-)
---
diff --git a/NEWS b/NEWS
index 29b3fa6..06fae67 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+Overview of Changes from GTK+ 2.17.3 to 2.17.4
+==============================================
+
+* Support for clipmasks in gdk_draw_pixbuf now works, this will
+  introduce visual changes in code that uses clipmasks when drawing
+  pixbufs. However, since this never worked that is unlikely to happen.
+  Old code using gdk_pixbuf_render_threshold_alpha masks when rendering
+  pixbufs will now produce truncated results at the edges.
+
 Overview of Changes from GTK+ 2.17.2 to 2.17.3
 ==============================================
 
diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c
index 869d535..44652bc 100644
--- a/gdk/gdkdraw.c
+++ b/gdk/gdkdraw.c
@@ -752,9 +752,6 @@ gdk_draw_image (GdkDrawable *drawable,
  * On older X servers, rendering pixbufs with an alpha channel involves round 
  * trips to the X server, and may be somewhat slow.
  *
- * The clip mask of @gc is ignored, but clip rectangles and clip regions work
- * fine.
- *
  * If GDK is built with the Sun mediaLib library, the gdk_draw_pixbuf
  * function is accelerated using mediaLib, which provides hardware
  * acceleration on Intel, AMD, and Sparc chipsets.  If desired, mediaLib
diff --git a/gdk/x11/gdkdrawable-x11.c b/gdk/x11/gdkdrawable-x11.c
index 537a47e..b2cac29 100644
--- a/gdk/x11/gdkdrawable-x11.c
+++ b/gdk/x11/gdkdrawable-x11.c
@@ -388,9 +388,22 @@ gdk_x11_drawable_update_picture_clip (GdkDrawable *drawable,
   else
     {
       XRenderPictureAttributes pa;
-      pa.clip_mask = None;
+      GdkBitmap *mask;
+      gulong pa_mask;
+
+      pa_mask = CPClipMask;
+      if (gc && (mask = _gdk_gc_get_clip_mask (gc)))
+	{
+	  pa.clip_mask = GDK_PIXMAP_XID (mask);
+	  pa.clip_x_origin = gc->clip_x_origin;
+	  pa.clip_y_origin = gc->clip_y_origin;
+	  pa_mask |= CPClipXOrigin | CPClipYOrigin;
+	}
+      else
+	pa.clip_mask = None;
+
       XRenderChangePicture (xdisplay, picture,
-			    CPClipMask, &pa);
+			    pa_mask, &pa);
     }
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]