cairo image surface buffer needs to be mallocked
parent
9705778f4b
commit
89698024cd
|
@ -2,19 +2,26 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: sequences math kernel byte-arrays cairo.ffi cairo
|
||||
io.backend ui.gadgets accessors opengl.gl arrays fry
|
||||
classes ui.render namespaces ;
|
||||
|
||||
classes ui.render namespaces destructors libc ;
|
||||
IN: cairo.gadgets
|
||||
|
||||
<PRIVATE
|
||||
: width>stride ( width -- stride ) 4 * ;
|
||||
|
||||
: image-dims ( gadget -- width height stride )
|
||||
dim>> first2 over width>stride ; inline
|
||||
: image-buffer ( width height stride -- alien )
|
||||
* nip malloc ; inline
|
||||
PRIVATE>
|
||||
|
||||
GENERIC: render-cairo* ( gadget -- )
|
||||
|
||||
: render-cairo ( gadget -- byte-array )
|
||||
dup dim>> first2 over width>stride
|
||||
[ * nip <byte-array> dup CAIRO_FORMAT_ARGB32 ]
|
||||
: render-cairo ( gadget -- alien )
|
||||
[
|
||||
image-dims
|
||||
[ image-buffer dup CAIRO_FORMAT_ARGB32 ]
|
||||
[ cairo_image_surface_create_for_data ] 3bi
|
||||
rot '[ _ render-cairo* ] with-cairo-from-surface ; inline
|
||||
] [ '[ _ render-cairo* ] with-cairo-from-surface ] bi ;
|
||||
|
||||
TUPLE: cairo-gadget < gadget ;
|
||||
|
||||
|
@ -23,11 +30,13 @@ TUPLE: cairo-gadget < gadget ;
|
|||
swap >>dim ;
|
||||
|
||||
M: cairo-gadget draw-gadget*
|
||||
[ dim>> ] [ render-cairo ] bi
|
||||
[
|
||||
[ dim>> ] [ render-cairo &free ] bi
|
||||
origin get first2 glRasterPos2i
|
||||
1.0 -1.0 glPixelZoom
|
||||
[ first2 GL_BGRA GL_UNSIGNED_BYTE ] dip
|
||||
glDrawPixels ;
|
||||
glDrawPixels
|
||||
] with-destructors ;
|
||||
|
||||
: copy-surface ( surface -- )
|
||||
cr swap 0 0 cairo_set_source_surface
|
||||
|
|
Loading…
Reference in New Issue