summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2007-06-13 18:59:22 -0400
committerBehdad Esfahbod <behdad@behdad.org>2007-06-13 18:59:22 -0400
commit0c5d28a4e5ce5e4dd72c0f416ce5e960e92b808b (patch)
treec3360d14c1d11c28011d5313aae2613561280a63
parent817d4b0c9a354526389290c6d5a7662713d67cd8 (diff)
[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).
-rw-r--r--src/cairo-xlib-surface.c15
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
--- a/src/cairo-xlib-surface.c
+++ b/src/cairo-xlib-surface.c
@@ -683,10 +683,18 @@ static void
_cairo_xlib_surface_ensure_src_picture (cairo_xlib_surface_t *surface)
{
if (!surface->src_picture)
+ {
+ XRenderPictureAttributes pa;
+ int mask = 0;
+
+ pa.subwindow_mode = IncludeInferiors;
+ mask |= CPSubwindowMode;
+
surface->src_picture = XRenderCreatePicture (surface->dpy,
surface->drawable,
surface->xrender_format,
- 0, NULL);
+ mask, &pa);
+ }
}
static void
@@ -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
**/
cairo_surface_t *