diff --git a/extra/cairo/cairo.factor b/extra/cairo/cairo.factor index 1cdd86fc36..b82191f72c 100644 --- a/extra/cairo/cairo.factor +++ b/extra/cairo/cairo.factor @@ -703,7 +703,7 @@ cairo_status_to_string ( cairo_status_t status ) ; ! Surface manipulation FUNCTION: cairo_surface_t* -cairo_surface_create_similar ( cairo_surface_t * other, cairo_content_t content, int width, int height ) ; +cairo_surface_create_similar ( cairo_surface_t* other, cairo_content_t content, int width, int height ) ; FUNCTION: cairo_surface_t* cairo_surface_reference ( cairo_surface_t* surface ) ; @@ -744,8 +744,7 @@ FUNCTION: cairo_content_t cairo_surface_get_content ( cairo_surface_t* surface ) ; FUNCTION: cairo_status_t -cairo_surface_write_to_png ( cairo_surface_t *surface, - const char *filename ) ; +cairo_surface_write_to_png ( cairo_surface_t* surface, char* filename ) ; FUNCTION: cairo_status_t cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ; diff --git a/extra/cairo/gadget/gadget.factor b/extra/cairo/gadget/gadget.factor new file mode 100644 index 0000000000..50abfb35ba --- /dev/null +++ b/extra/cairo/gadget/gadget.factor @@ -0,0 +1,34 @@ +USING: cairo ui.render kernel opengl.gl opengl +math byte-arrays ui.gadgets accessors arrays +namespaces ; + +IN: cairo.gadget + +TUPLE: cairo-gadget width height quot ; +: ( width height quot -- cairo-gadget ) + cairo-gadget construct-gadget + swap >>quot + swap >>height + swap >>width ; + +: with-surface ( surface quot -- ) + >r dup cairo_create dup r> call + cairo_destroy cairo_surface_destroy ; + +: cairo>bytes ( width height quot -- byte-array ) + >r over 4 * + [ * nip dup CAIRO_FORMAT_ARGB32 ] + [ cairo_image_surface_create_for_data ] 3bi + r> with-surface ; + +M: cairo-gadget draw-gadget* ( gadget -- ) + origin get [ + 0 0 glRasterPos2i + 1.0 -1.0 glPixelZoom + [ width>> ] [ height>> ] [ quot>> ] tri + [ drop GL_RGBA GL_UNSIGNED_BYTE ] [ cairo>bytes ] 3bi + glDrawPixels + ] with-translation ; + +M: cairo-gadget pref-dim* ( gadget -- rect ) + [ width>> ] [ height>> ] bi 2array ; \ No newline at end of file diff --git a/extra/cairo/samples/samples.factor b/extra/cairo/samples/samples.factor new file mode 100644 index 0000000000..714e2b9396 --- /dev/null +++ b/extra/cairo/samples/samples.factor @@ -0,0 +1,13 @@ +USING: cairo locals ; + +IN: cairo.samples + +SYMBOL: cr +:: cairo-samp ( cr -- ) + [let | | + cr 10.0 cairo_set_line_width + cr 50.0 50.0 20.0 0.0 3.0 cairo_arc + cr 1.0 1.0 0.0 1.0 cairo_set_source_rgba + cr cairo_stroke + cr cairo_fill + ] ; \ No newline at end of file