Mercurial > dwindows
comparison gtk/dw.c @ 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 |
comparison
equal
deleted
inserted
replaced
1178:0a48149e93b9 | 1179:ebe0d27f6705 |
---|---|
8484 gdk_cairo_set_source_window (cr, gtk_widget_get_window(src), xdest -xsrc, ydest - ysrc); | 8484 gdk_cairo_set_source_window (cr, gtk_widget_get_window(src), xdest -xsrc, ydest - ysrc); |
8485 else | 8485 else |
8486 #endif | 8486 #endif |
8487 if(srcp && srcp->image) | 8487 if(srcp && srcp->image) |
8488 cairo_set_source_surface (cr, srcp->image, xdest - xsrc, ydest - ysrc); | 8488 cairo_set_source_surface (cr, srcp->image, xdest - xsrc, ydest - ysrc); |
8489 else if(srcp && srcp->pixmap) | 8489 else if(srcp && srcp->pixmap && !srcp->mask) |
8490 gdk_cairo_set_source_pixmap (cr, srcp->pixmap, xdest - xsrc, ydest - ysrc); | 8490 gdk_cairo_set_source_pixmap (cr, srcp->pixmap, xdest - xsrc, ydest - ysrc); |
8491 else if(srcp && srcp->pixmap && srcp->mask) | |
8492 { | |
8493 cairo_pattern_t *mask_pattern; | |
8494 | |
8495 /* hack to get the mask pattern */ | |
8496 gdk_cairo_set_source_pixmap(cr, srcp->mask, xdest, ydest); | |
8497 mask_pattern = cairo_get_source(cr); | |
8498 cairo_pattern_reference(mask_pattern); | |
8499 | |
8500 gdk_cairo_set_source_pixmap(cr, srcp->pixmap, xdest - xsrc, ydest - ysrc); | |
8501 cairo_rectangle(cr, xdest, ydest, width, height); | |
8502 cairo_clip(cr); | |
8503 cairo_mask(cr, mask_pattern); | |
8504 cairo_destroy(cr); | |
8505 DW_MUTEX_UNLOCK; | |
8506 } | |
8491 | 8507 |
8492 cairo_rectangle(cr, xdest, ydest, width, height); | 8508 cairo_rectangle(cr, xdest, ydest, width, height); |
8493 cairo_fill(cr); | 8509 cairo_fill(cr); |
8494 cairo_destroy(cr); | 8510 cairo_destroy(cr); |
8495 } | 8511 } |