[gtk+/transparent-windows] gdk: Fix alpha window background paintings on non-implicit paints



commit 76ea76831670188fbe54a2994a58929a12eecab6
Author: Alexander Larsson <alexl redhat com>
Date:   Mon Dec 5 11:40:30 2011 +0100

    gdk: Fix alpha window background paintings on non-implicit paints

 gdk/gdkwindow.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index a3a6266..912b9b4 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -2907,6 +2907,20 @@ gdk_window_begin_paint_region (GdkWindow       *window,
                                                           gdk_window_get_content (window),
 			                                  MAX (clip_box.width, 1),
                                                           MAX (clip_box.height, 1));
+
+      /* Normally alpha backgrounded client side windows are composited on the implicit paint
+	 by being drawn in back to front order. However, if implicit paints are not used, for
+	 instance if it was flushed due to a non-double-buffered paint in the middle of the
+	 expose we need to copy in the existing data here. */
+      if (!gdk_window_has_impl (window) && window->has_alpha_background)
+	{
+	  cairo_t *cr = cairo_create (paint->surface);
+	  gdk_cairo_set_source_window (cr, impl_window,
+				       - (window->abs_x + clip_box.x),
+				       - (window->abs_y + clip_box.y));
+	  cairo_paint (cr);
+	  cairo_destroy (cr);
+	}
     }
   cairo_surface_set_device_offset (paint->surface, -clip_box.x, -clip_box.y);
 



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