37 lines
1.2 KiB
Factor
Executable File
37 lines
1.2 KiB
Factor
Executable File
! Copyright (C) 2008 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: cairo.ffi kernel accessors sequences
|
|
namespaces fry continuations destructors ;
|
|
IN: cairo
|
|
|
|
TUPLE: cairo-t alien ;
|
|
C: <cairo-t> cairo-t
|
|
M: cairo-t dispose ( alien -- ) alien>> cairo_destroy ;
|
|
|
|
TUPLE: cairo-surface-t alien ;
|
|
C: <cairo-surface-t> cairo-surface-t
|
|
M: cairo-surface-t dispose ( alien -- ) alien>> cairo_surface_destroy ;
|
|
|
|
: check-cairo ( cairo_status_t -- )
|
|
dup CAIRO_STATUS_SUCCESS = [ drop ]
|
|
[ cairo_status_to_string "Cairo error: " prepend throw ] if ;
|
|
|
|
SYMBOL: cairo
|
|
: cr ( -- cairo ) cairo get ;
|
|
|
|
: (with-cairo) ( cairo-t quot -- )
|
|
>r alien>> cairo r> [ cr cairo_status check-cairo ]
|
|
compose with-variable ; inline
|
|
|
|
: with-cairo ( cairo quot -- )
|
|
>r <cairo-t> r> [ (with-cairo) ] curry with-disposal ; inline
|
|
|
|
: (with-surface) ( cairo-surface-t quot -- )
|
|
>r alien>> r> [ cairo_surface_status check-cairo ] bi ; inline
|
|
|
|
: with-surface ( cairo_surface quot -- )
|
|
>r <cairo-surface-t> r> [ (with-surface) ] curry with-disposal ; inline
|
|
|
|
: with-cairo-from-surface ( cairo_surface quot -- )
|
|
'[ cairo_create , with-cairo ] with-surface ; inline
|