[gtk+/transparent-windows] gdk: Fix alpha window background paintings on non-implicit paints
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/transparent-windows] gdk: Fix alpha window background paintings on non-implicit paints
- Date: Mon, 5 Dec 2011 13:03:04 +0000 (UTC)
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]