1 ! Copyright (C) 2008 Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors cairo cairo.ffi destructors kernel libc math
4 namespaces opengl.gl sequences ui.gadgets ui.render ;
14 : width>stride ( width -- stride ) 4 * ;
16 : image-dims ( gadget -- width height stride )
17 dim>> first2 over width>stride ; inline
19 : image-buffer ( width height stride -- alien )
20 * nip malloc &free ; inline
22 : with-cairo ( cairo quot -- )
23 [ &cairo_destroy current-cairo ] dip
24 '[ @ current-cairo get check-cairo ] with-variable ; inline
26 : with-surface ( cairo_surface quot -- alien )
27 [ &cairo_surface_destroy ] dip [ check-surface ] bi ; inline
29 : with-cairo-from-surface ( cairo_surface quot -- )
30 '[ cairo_create _ with-cairo ] with-surface ; inline
34 GENERIC: render-cairo* ( gadget -- )
36 : render-cairo ( gadget -- alien )
39 [ image-buffer dup CAIRO_FORMAT_ARGB32 ]
40 [ cairo_image_surface_create_for_data ] 3bi
41 ] [ '[ _ render-cairo* ] with-cairo-from-surface ] bi ;
43 TUPLE: cairo-gadget < gadget ;
45 : <cairo-gadget> ( dim -- gadget )
49 M: cairo-gadget draw-gadget*
51 [ dim>> ] [ render-cairo ] bi
54 [ first2 GL_BGRA GL_UNSIGNED_BYTE ] dip
58 : copy-surface ( surface -- )
59 cr swap 0 0 cairo_set_source_surface