comparison 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
comparison
equal deleted inserted replaced
1177:c38ec904b6d3 1178:0a48149e93b9
8457 void _cairo_pixmap_bitblt(HWND dest, HPIXMAP destp, int xdest, int ydest, int width, int height, HWND src, HPIXMAP srcp, int xsrc, int ysrc) 8457 void _cairo_pixmap_bitblt(HWND dest, HPIXMAP destp, int xdest, int ydest, int width, int height, HWND src, HPIXMAP srcp, int xsrc, int ysrc)
8458 { 8458 {
8459 int _locked_by_me = FALSE; 8459 int _locked_by_me = FALSE;
8460 cairo_t *cr = NULL; 8460 cairo_t *cr = NULL;
8461 8461
8462 if((!dest && (!destp || !destp->image)) || (!src && (!srcp || !srcp->image))) 8462 if((!dest && (!destp || !destp->image)) || (!src && (!srcp || (!srcp->image && !srcp->pixmap))))
8463 return; 8463 return;
8464 8464
8465 DW_MUTEX_LOCK; 8465 DW_MUTEX_LOCK;
8466 if(dest) 8466 if(dest)
8467 { 8467 {
8472 DW_MUTEX_UNLOCK; 8472 DW_MUTEX_UNLOCK;
8473 return; 8473 return;
8474 } 8474 }
8475 cr = gdk_cairo_create(window); 8475 cr = gdk_cairo_create(window);
8476 } 8476 }
8477 else if(destp) 8477 else if(destp && destp->image)
8478 cr = cairo_create(destp->image); 8478 cr = cairo_create(destp->image);
8479 8479
8480 if(cr) 8480 if(cr)
8481 { 8481 {
8482 #if GTK_CHECK_VERSION(2,24,0)
8482 if(src) 8483 if(src)
8483 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);
8484 else if(srcp) 8485 else
8486 #endif
8487 if(srcp && srcp->image)
8485 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)
8490 gdk_cairo_set_source_pixmap (cr, srcp->pixmap, xdest - xsrc, ydest - ysrc);
8486 8491
8487 cairo_rectangle(cr, xdest, ydest, width, height); 8492 cairo_rectangle(cr, xdest, ydest, width, height);
8488 cairo_fill(cr); 8493 cairo_fill(cr);
8489 cairo_destroy(cr); 8494 cairo_destroy(cr);
8490 } 8495 }