[gtk+] Make clipmasks work for pixbuf rendering
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [gtk+] Make clipmasks work for pixbuf rendering
- Date: Tue, 7 Jul 2009 15:12:07 +0000 (UTC)
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]