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 }