|author||Ryan Lortie <firstname.lastname@example.org>||2007-06-13 18:59:22 -0400|
|committer||Behdad Esfahbod <email@example.com>||2007-06-13 18:59:22 -0400|
[xlib] Create source xrender Picture with IncludeInferiors
When an xlib surface is used as the source of a draw operation this will cause the contents of child windows to be included in the source data. The semantics of drawing to xlib surfaces are unchanged (ie: draws are still clipped by child windows overlapping the destination window).
1 files changed, 14 insertions, 1 deletions
diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c
index db5c15540..cbd75ad8e 100644
@@ -683,10 +683,18 @@ static void
_cairo_xlib_surface_ensure_src_picture (cairo_xlib_surface_t *surface)
+ XRenderPictureAttributes pa;
+ int mask = 0;
+ pa.subwindow_mode = IncludeInferiors;
+ mask |= CPSubwindowMode;
surface->src_picture = XRenderCreatePicture (surface->dpy,
- 0, NULL);
+ mask, &pa);
@@ -2074,6 +2082,11 @@ _cairo_xlib_screen_from_visual (Display *dpy, Visual *visual)
* cairo_xlib_surface_set_size must be called whenever the size of the
* window changes.
+ * When @drawable is a Window containing child windows then drawing to
+ * the created surface will be clipped by those child windows. When
+ * the created surface is used as a source, the contents of the
+ * children will be included.
* Return value: the newly created surface