Mercurial > dwindows
changeset 1179:ebe0d27f6705
Attempt at implementing clip mask for transparency in GTK2 for Cairo.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 19 Sep 2011 22:36:24 +0000 |
parents | 0a48149e93b9 |
children | 4c20df806370 |
files | gtk/dw.c |
diffstat | 1 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk/dw.c Mon Sep 19 21:31:36 2011 +0000 +++ b/gtk/dw.c Mon Sep 19 22:36:24 2011 +0000 @@ -8486,8 +8486,24 @@ #endif if(srcp && srcp->image) cairo_set_source_surface (cr, srcp->image, xdest - xsrc, ydest - ysrc); - else if(srcp && srcp->pixmap) + else if(srcp && srcp->pixmap && !srcp->mask) gdk_cairo_set_source_pixmap (cr, srcp->pixmap, xdest - xsrc, ydest - ysrc); + else if(srcp && srcp->pixmap && srcp->mask) + { + cairo_pattern_t *mask_pattern; + + /* hack to get the mask pattern */ + gdk_cairo_set_source_pixmap(cr, srcp->mask, xdest, ydest); + mask_pattern = cairo_get_source(cr); + cairo_pattern_reference(mask_pattern); + + gdk_cairo_set_source_pixmap(cr, srcp->pixmap, xdest - xsrc, ydest - ysrc); + cairo_rectangle(cr, xdest, ydest, width, height); + cairo_clip(cr); + cairo_mask(cr, mask_pattern); + cairo_destroy(cr); + DW_MUTEX_UNLOCK; + } cairo_rectangle(cr, xdest, ydest, width, height); cairo_fill(cr);