# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1316467896 0 # Node ID 0a48149e93b98980ab1c582825dcffa591ee3413 # Parent c38ec904b6d36192530b5af9d50481b10ee115a3 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. diff -r c38ec904b6d3 -r 0a48149e93b9 gtk/dw.c --- 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);