1 ! Copyright (C) 2008 Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: sequences math kernel byte-arrays cairo.ffi cairo
4 io.backend ui.gadgets accessors opengl.gl arrays fry
5 classes ui.render namespaces destructors libc ;
15 : width>stride ( width -- stride ) 4 * ;
17 : image-dims ( gadget -- width height stride )
18 dim>> first2 over width>stride ; inline
20 : image-buffer ( width height stride -- alien )
21 * nip malloc &free ; inline
23 : with-cairo ( cairo quot -- )
24 [ &cairo_destroy current-cairo ] dip
25 '[ @ current-cairo get check-cairo ] with-variable ; inline
27 : with-surface ( cairo_surface quot -- alien )
28 [ &cairo_surface_destroy ] dip [ check-surface ] bi ; inline
30 : with-cairo-from-surface ( cairo_surface quot -- )
31 '[ cairo_create _ with-cairo ] with-surface ; inline
35 GENERIC: render-cairo* ( gadget -- )
37 : render-cairo ( gadget -- alien )
40 [ image-buffer dup CAIRO_FORMAT_ARGB32 ]
41 [ cairo_image_surface_create_for_data ] 3bi
42 ] [ '[ _ render-cairo* ] with-cairo-from-surface ] bi ;
44 TUPLE: cairo-gadget < gadget ;
46 : <cairo-gadget> ( dim -- gadget )
50 M: cairo-gadget draw-gadget*
52 [ dim>> ] [ render-cairo ] bi
55 [ first2 GL_BGRA GL_UNSIGNED_BYTE ] dip
59 : copy-surface ( surface -- )
60 cr swap 0 0 cairo_set_source_surface