Mercurial > dwindows
diff gtk/dw.c @ 1178:0a48149e93b9
Ok so gdk_cairo_set_source_window() is only available in GTK 2.24 and higher...
So cairo window sources are not available in lower than 2.24.
Also had to add support for pixmaps as sources for Cairo... which works except
it currently does not support the clipping mask, so no transparency yet.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 19 Sep 2011 21:31:36 +0000 |
parents | c38ec904b6d3 |
children | ebe0d27f6705 |
line wrap: on
line diff
--- a/gtk/dw.c Mon Sep 19 21:09:58 2011 +0000 +++ b/gtk/dw.c Mon Sep 19 21:31:36 2011 +0000 @@ -8459,7 +8459,7 @@ int _locked_by_me = FALSE; cairo_t *cr = NULL; - if((!dest && (!destp || !destp->image)) || (!src && (!srcp || !srcp->image))) + if((!dest && (!destp || !destp->image)) || (!src && (!srcp || (!srcp->image && !srcp->pixmap)))) return; DW_MUTEX_LOCK; @@ -8474,15 +8474,20 @@ } cr = gdk_cairo_create(window); } - else if(destp) + else if(destp && destp->image) cr = cairo_create(destp->image); if(cr) { +#if GTK_CHECK_VERSION(2,24,0) if(src) gdk_cairo_set_source_window (cr, gtk_widget_get_window(src), xdest -xsrc, ydest - ysrc); - else if(srcp) + else +#endif + if(srcp && srcp->image) cairo_set_source_surface (cr, srcp->image, xdest - xsrc, ydest - ysrc); + else if(srcp && srcp->pixmap) + gdk_cairo_set_source_pixmap (cr, srcp->pixmap, xdest - xsrc, ydest - ysrc); cairo_rectangle(cr, xdest, ydest, width, height); cairo_fill(cr);