From dcd07575d0ff90d63eb374657c994af4bf1e5e18 Mon Sep 17 00:00:00 2001 From: Matthew Willis Date: Sun, 11 May 2008 20:41:32 -0700 Subject: [PATCH] rearranged cairo: binding in cairo.ffi, high-level words in extra/cairo. --- extra/cairo/cairo-tests.factor | 7 - extra/cairo/cairo.factor | 996 +---------------------------- extra/cairo/ffi/ffi.factor | 1080 +++++++++++++++++++++++--------- extra/cairo/lib/lib.factor | 36 -- 4 files changed, 826 insertions(+), 1293 deletions(-) delete mode 100644 extra/cairo/cairo-tests.factor mode change 100644 => 100755 extra/cairo/cairo.factor delete mode 100755 extra/cairo/lib/lib.factor diff --git a/extra/cairo/cairo-tests.factor b/extra/cairo/cairo-tests.factor deleted file mode 100644 index 8e0d83d092..0000000000 --- a/extra/cairo/cairo-tests.factor +++ /dev/null @@ -1,7 +0,0 @@ -USING: cairo math.parser kernel sequences tools.test ; -IN: cairo.tests - -[ t ] [ ! apply a little pressure to cairo_version - cairo_version number>string CHAR: 0 swap remove - CHAR: . cairo_version_string remove = -] unit-test \ No newline at end of file diff --git a/extra/cairo/cairo.factor b/extra/cairo/cairo.factor old mode 100644 new mode 100755 index b82191f72c..c9700e82c0 --- a/extra/cairo/cairo.factor +++ b/extra/cairo/cairo.factor @@ -1,968 +1,36 @@ -! Copyright (c) 2007 Sampo Vuori -! Copyright (c) 2008 Matthew Willis -! -! Adapted from cairo.h, version 1.5.14 -! License: http://factorcode.org/license.txt - -USING: system combinators alien alien.syntax kernel -alien.c-types accessors sequences arrays ui.gadgets ; - -IN: cairo -<< "cairo" { - { [ os winnt? ] [ "libcairo-2.dll" ] } - { [ os macosx? ] [ "libcairo.dylib" ] } - { [ os unix? ] [ "libcairo.so.2" ] } -} cond "cdecl" add-library >> - -LIBRARY: cairo - -FUNCTION: int cairo_version ( ) ; -FUNCTION: char* cairo_version_string ( ) ; - -TYPEDEF: int cairo_bool_t - -! I am leaving these and other void* types as opaque structures -TYPEDEF: void* cairo_t -TYPEDEF: void* cairo_surface_t - -C-STRUCT: cairo_matrix_t - { "double" "xx" } - { "double" "yx" } - { "double" "xy" } - { "double" "yy" } - { "double" "x0" } - { "double" "y0" } ; - -TYPEDEF: void* cairo_pattern_t - -TYPEDEF: void* cairo_destroy_func_t -: cairo-destroy-func ( quot -- callback ) - >r "void" { "void*" } "cdecl" r> alien-callback ; inline - -! See cairo.h for details -C-STRUCT: cairo_user_data_key_t - { "int" "unused" } ; - -TYPEDEF: int cairo_status_t -C-ENUM: - CAIRO_STATUS_SUCCESS - CAIRO_STATUS_NO_MEMORY - CAIRO_STATUS_INVALID_RESTORE - CAIRO_STATUS_INVALID_POP_GROUP - CAIRO_STATUS_NO_CURRENT_POINT - CAIRO_STATUS_INVALID_MATRIX - CAIRO_STATUS_INVALID_STATUS - CAIRO_STATUS_NULL_POINTER - CAIRO_STATUS_INVALID_STRING - CAIRO_STATUS_INVALID_PATH_DATA - CAIRO_STATUS_READ_ERROR - CAIRO_STATUS_WRITE_ERROR - CAIRO_STATUS_SURFACE_FINISHED - CAIRO_STATUS_SURFACE_TYPE_MISMATCH - CAIRO_STATUS_PATTERN_TYPE_MISMATCH - CAIRO_STATUS_INVALID_CONTENT - CAIRO_STATUS_INVALID_FORMAT - CAIRO_STATUS_INVALID_VISUAL - CAIRO_STATUS_FILE_NOT_FOUND - CAIRO_STATUS_INVALID_DASH - CAIRO_STATUS_INVALID_DSC_COMMENT - CAIRO_STATUS_INVALID_INDEX - CAIRO_STATUS_CLIP_NOT_REPRESENTABLE - CAIRO_STATUS_TEMP_FILE_ERROR - CAIRO_STATUS_INVALID_STRIDE ; - -TYPEDEF: int cairo_content_t -: CAIRO_CONTENT_COLOR HEX: 1000 ; -: CAIRO_CONTENT_ALPHA HEX: 2000 ; -: CAIRO_CONTENT_COLOR_ALPHA HEX: 3000 ; - -TYPEDEF: void* cairo_write_func_t -: cairo-write-func ( quot -- callback ) - >r "cairo_status_t" { "void*" "uchar*" "int" } - "cdecl" r> alien-callback ; inline - -TYPEDEF: void* cairo_read_func_t -: cairo-read-func ( quot -- callback ) - >r "cairo_status_t" { "void*" "uchar*" "int" } - "cdecl" r> alien-callback ; inline - -! Functions for manipulating state objects -FUNCTION: cairo_t* -cairo_create ( cairo_surface_t* target ) ; - -FUNCTION: cairo_t* -cairo_reference ( cairo_t* cr ) ; - -FUNCTION: void -cairo_destroy ( cairo_t* cr ) ; - -FUNCTION: uint -cairo_get_reference_count ( cairo_t* cr ) ; - -FUNCTION: void* -cairo_get_user_data ( cairo_t* cr, cairo_user_data_key_t* key ) ; - -FUNCTION: cairo_status_t -cairo_set_user_data ( cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; - -FUNCTION: void -cairo_save ( cairo_t* cr ) ; - -FUNCTION: void -cairo_restore ( cairo_t* cr ) ; - -FUNCTION: void -cairo_push_group ( cairo_t* cr ) ; - -FUNCTION: void -cairo_push_group_with_content ( cairo_t* cr, cairo_content_t content ) ; - -FUNCTION: cairo_pattern_t* -cairo_pop_group ( cairo_t* cr ) ; - -FUNCTION: void -cairo_pop_group_to_source ( cairo_t* cr ) ; - -! Modify state -TYPEDEF: int cairo_operator_t -C-ENUM: - CAIRO_OPERATOR_CLEAR - - CAIRO_OPERATOR_SOURCE - CAIRO_OPERATOR_OVER - CAIRO_OPERATOR_IN - CAIRO_OPERATOR_OUT - CAIRO_OPERATOR_ATOP - - CAIRO_OPERATOR_DEST - CAIRO_OPERATOR_DEST_OVER - CAIRO_OPERATOR_DEST_IN - CAIRO_OPERATOR_DEST_OUT - CAIRO_OPERATOR_DEST_ATOP - - CAIRO_OPERATOR_XOR - CAIRO_OPERATOR_ADD - CAIRO_OPERATOR_SATURATE ; - -FUNCTION: void -cairo_set_operator ( cairo_t* cr, cairo_operator_t op ) ; - -FUNCTION: void -cairo_set_source ( cairo_t* cr, cairo_pattern_t* source ) ; - -FUNCTION: void -cairo_set_source_rgb ( cairo_t* cr, double red, double green, double blue ) ; - -FUNCTION: void -cairo_set_source_rgba ( cairo_t* cr, double red, double green, double blue, double alpha ) ; - -FUNCTION: void -cairo_set_source_surface ( cairo_t* cr, cairo_surface_t* surface, double x, double y ) ; - -FUNCTION: void -cairo_set_tolerance ( cairo_t* cr, double tolerance ) ; - -TYPEDEF: int cairo_antialias_t -C-ENUM: - CAIRO_ANTIALIAS_DEFAULT - CAIRO_ANTIALIAS_NONE - CAIRO_ANTIALIAS_GRAY - CAIRO_ANTIALIAS_SUBPIXEL ; - -FUNCTION: void -cairo_set_antialias ( cairo_t* cr, cairo_antialias_t antialias ) ; - -TYPEDEF: int cairo_fill_rule_t -C-ENUM: - CAIRO_FILL_RULE_WINDING - CAIRO_FILL_RULE_EVEN_ODD ; - -FUNCTION: void -cairo_set_fill_rule ( cairo_t* cr, cairo_fill_rule_t fill_rule ) ; - -FUNCTION: void -cairo_set_line_width ( cairo_t* cr, double width ) ; - -TYPEDEF: int cairo_line_cap_t -C-ENUM: - CAIRO_LINE_CAP_BUTT - CAIRO_LINE_CAP_ROUND - CAIRO_LINE_CAP_SQUARE ; - -FUNCTION: void -cairo_set_line_cap ( cairo_t* cr, cairo_line_cap_t line_cap ) ; - -TYPEDEF: int cairo_line_join_t -C-ENUM: - CAIRO_LINE_JOIN_MITER - CAIRO_LINE_JOIN_ROUND - CAIRO_LINE_JOIN_BEVEL ; - -FUNCTION: void -cairo_set_line_join ( cairo_t* cr, cairo_line_join_t line_join ) ; - -FUNCTION: void -cairo_set_dash ( cairo_t* cr, double* dashes, int num_dashes, double offset ) ; - -FUNCTION: void -cairo_set_miter_limit ( cairo_t* cr, double limit ) ; - -FUNCTION: void -cairo_translate ( cairo_t* cr, double tx, double ty ) ; - -FUNCTION: void -cairo_scale ( cairo_t* cr, double sx, double sy ) ; - -FUNCTION: void -cairo_rotate ( cairo_t* cr, double angle ) ; - -FUNCTION: void -cairo_transform ( cairo_t* cr, cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_set_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_identity_matrix ( cairo_t* cr ) ; - -FUNCTION: void -cairo_user_to_device ( cairo_t* cr, double* x, double* y ) ; - -FUNCTION: void -cairo_user_to_device_distance ( cairo_t* cr, double* dx, double* dy ) ; - -FUNCTION: void -cairo_device_to_user ( cairo_t* cr, double* x, double* y ) ; - -FUNCTION: void -cairo_device_to_user_distance ( cairo_t* cr, double* dx, double* dy ) ; - -! Path creation functions -FUNCTION: void -cairo_new_path ( cairo_t* cr ) ; - -FUNCTION: void -cairo_move_to ( cairo_t* cr, double x, double y ) ; - -FUNCTION: void -cairo_new_sub_path ( cairo_t* cr ) ; - -FUNCTION: void -cairo_line_to ( cairo_t* cr, double x, double y ) ; - -FUNCTION: void -cairo_curve_to ( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 ) ; - -FUNCTION: void -cairo_arc ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ; - -FUNCTION: void -cairo_arc_negative ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ; - -FUNCTION: void -cairo_rel_move_to ( cairo_t* cr, double dx, double dy ) ; - -FUNCTION: void -cairo_rel_line_to ( cairo_t* cr, double dx, double dy ) ; - -FUNCTION: void -cairo_rel_curve_to ( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 ) ; - -FUNCTION: void -cairo_rectangle ( cairo_t* cr, double x, double y, double width, double height ) ; - -FUNCTION: void -cairo_close_path ( cairo_t* cr ) ; - -FUNCTION: void -cairo_path_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; - -! Painting functions -FUNCTION: void -cairo_paint ( cairo_t* cr ) ; - -FUNCTION: void -cairo_paint_with_alpha ( cairo_t* cr, double alpha ) ; - -FUNCTION: void -cairo_mask ( cairo_t* cr, cairo_pattern_t* pattern ) ; - -FUNCTION: void -cairo_mask_surface ( cairo_t* cr, cairo_surface_t* surface, double surface_x, double surface_y ) ; - -FUNCTION: void -cairo_stroke ( cairo_t* cr ) ; - -FUNCTION: void -cairo_stroke_preserve ( cairo_t* cr ) ; - -FUNCTION: void -cairo_fill ( cairo_t* cr ) ; - -FUNCTION: void -cairo_fill_preserve ( cairo_t* cr ) ; - -FUNCTION: void -cairo_copy_page ( cairo_t* cr ) ; - -FUNCTION: void -cairo_show_page ( cairo_t* cr ) ; - -! Insideness testing -FUNCTION: cairo_bool_t -cairo_in_stroke ( cairo_t* cr, double x, double y ) ; - -FUNCTION: cairo_bool_t -cairo_in_fill ( cairo_t* cr, double x, double y ) ; - -! Rectangular extents -FUNCTION: void -cairo_stroke_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; - -FUNCTION: void -cairo_fill_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; - -! Clipping -FUNCTION: void -cairo_reset_clip ( cairo_t* cr ) ; - -FUNCTION: void -cairo_clip ( cairo_t* cr ) ; - -FUNCTION: void -cairo_clip_preserve ( cairo_t* cr ) ; - -FUNCTION: void -cairo_clip_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; - -C-STRUCT: cairo_rectangle_t - { "double" "x" } - { "double" "y" } - { "double" "width" } - { "double" "height" } ; - -: ( x y width height -- cairo_rectangle_t ) - "cairo_rectangle_t" dup - { - [ set-cairo_rectangle_t-height ] [ set-cairo_rectangle_t-width ] - [ set-cairo_rectangle_t-y ] [ set-cairo_rectangle_t-x ] - } cleave ; +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: cairo kernel accessors sequences +namespaces fry continuations ; +IN: cairo.lib + +TUPLE: cairo-t alien ; +C: cairo-t +M: cairo-t dispose ( alien -- ) alien>> cairo_destroy ; + +TUPLE: cairo-surface-t alien ; +C: 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 -: rect>cairo ( rect -- cairo_rectangle_t ) - [ loc>> ] [ dim>> ] bi [ [ first ] [ second ] bi ] bi@ - ; - -: cairo>rect ( cairo_rectangle_t -- rect ) - { - [ cairo_rectangle_t-x ] [ cairo_rectangle_t-y ] - [ cairo_rectangle_t-width ] [ cairo_rectangle_t-height ] - } cleave - [ 2array ] 2bi@ ; - -C-STRUCT: cairo_rectangle_list_t - { "cairo_status_t" "status" } - { "cairo_rectangle_t*" "rectangles" } - { "int" "num_rectangles" } ; - -FUNCTION: cairo_rectangle_list_t* -cairo_copy_clip_rectangle_list ( cairo_t* cr ) ; - -FUNCTION: void -cairo_rectangle_list_destroy ( cairo_rectangle_list_t* rectangle_list ) ; - -! Font/Text functions - -TYPEDEF: void* cairo_scaled_font_t - -TYPEDEF: void* cairo_font_face_t - -C-STRUCT: cairo_glyph_t - { "ulong" "index" } - { "double" "x" } - { "double" "y" } ; - -C-STRUCT: cairo_text_extents_t - { "double" "x_bearing" } - { "double" "y_bearing" } - { "double" "width" } - { "double" "height" } - { "double" "x_advance" } - { "double" "y_advance" } ; - -C-STRUCT: cairo_font_extents_t - { "double" "ascent" } - { "double" "descent" } - { "double" "height" } - { "double" "max_x_advance" } - { "double" "max_y_advance" } ; - -TYPEDEF: int cairo_font_slant_t -C-ENUM: - CAIRO_FONT_SLANT_NORMAL - CAIRO_FONT_SLANT_ITALIC - CAIRO_FONT_SLANT_OBLIQUE ; - -TYPEDEF: int cairo_font_weight_t -C-ENUM: - CAIRO_FONT_WEIGHT_NORMAL - CAIRO_FONT_WEIGHT_BOLD ; - -TYPEDEF: int cairo_subpixel_order_t -C-ENUM: - CAIRO_SUBPIXEL_ORDER_DEFAULT - CAIRO_SUBPIXEL_ORDER_RGB - CAIRO_SUBPIXEL_ORDER_BGR - CAIRO_SUBPIXEL_ORDER_VRGB - CAIRO_SUBPIXEL_ORDER_VBGR ; - -TYPEDEF: int cairo_hint_style_t -C-ENUM: - CAIRO_HINT_STYLE_DEFAULT - CAIRO_HINT_STYLE_NONE - CAIRO_HINT_STYLE_SLIGHT - CAIRO_HINT_STYLE_MEDIUM - CAIRO_HINT_STYLE_FULL ; - -TYPEDEF: int cairo_hint_metrics_t -C-ENUM: - CAIRO_HINT_METRICS_DEFAULT - CAIRO_HINT_METRICS_OFF - CAIRO_HINT_METRICS_ON ; - -TYPEDEF: void* cairo_font_options_t - -FUNCTION: cairo_font_options_t* -cairo_font_options_create ( ) ; - -FUNCTION: cairo_font_options_t* -cairo_font_options_copy ( cairo_font_options_t* original ) ; - -FUNCTION: void -cairo_font_options_destroy ( cairo_font_options_t* options ) ; - -FUNCTION: cairo_status_t -cairo_font_options_status ( cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_font_options_merge ( cairo_font_options_t* options, cairo_font_options_t* other ) ; - -FUNCTION: cairo_bool_t -cairo_font_options_equal ( cairo_font_options_t* options, cairo_font_options_t* other ) ; - -FUNCTION: ulong -cairo_font_options_hash ( cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_font_options_set_antialias ( cairo_font_options_t* options, cairo_antialias_t antialias ) ; - -FUNCTION: cairo_antialias_t -cairo_font_options_get_antialias ( cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_font_options_set_subpixel_order ( cairo_font_options_t* options, cairo_subpixel_order_t subpixel_order ) ; - -FUNCTION: cairo_subpixel_order_t -cairo_font_options_get_subpixel_order ( cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_font_options_set_hint_style ( cairo_font_options_t* options, cairo_hint_style_t hint_style ) ; - -FUNCTION: cairo_hint_style_t -cairo_font_options_get_hint_style ( cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_font_options_set_hint_metrics ( cairo_font_options_t* options, cairo_hint_metrics_t hint_metrics ) ; - -FUNCTION: cairo_hint_metrics_t -cairo_font_options_get_hint_metrics ( cairo_font_options_t* options ) ; - -! This interface is for dealing with text as text, not caring about the -! font object inside the the cairo_t. - -FUNCTION: void -cairo_select_font_face ( cairo_t* cr, char* family, cairo_font_slant_t slant, cairo_font_weight_t weight ) ; - -FUNCTION: void -cairo_set_font_size ( cairo_t* cr, double size ) ; - -FUNCTION: void -cairo_set_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_get_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_set_font_options ( cairo_t* cr, cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_get_font_options ( cairo_t* cr, cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_set_font_face ( cairo_t* cr, cairo_font_face_t* font_face ) ; - -FUNCTION: cairo_font_face_t* -cairo_get_font_face ( cairo_t* cr ) ; - -FUNCTION: void -cairo_set_scaled_font ( cairo_t* cr, cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: cairo_scaled_font_t* -cairo_get_scaled_font ( cairo_t* cr ) ; - -FUNCTION: void -cairo_show_text ( cairo_t* cr, char* utf8 ) ; - -FUNCTION: void -cairo_show_glyphs ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ; - -FUNCTION: void -cairo_text_path ( cairo_t* cr, char* utf8 ) ; - -FUNCTION: void -cairo_glyph_path ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ; - -FUNCTION: void -cairo_text_extents ( cairo_t* cr, char* utf8, cairo_text_extents_t* extents ) ; - -FUNCTION: void -cairo_glyph_extents ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ; - -FUNCTION: void -cairo_font_extents ( cairo_t* cr, cairo_font_extents_t* extents ) ; - -! Generic identifier for a font style - -FUNCTION: cairo_font_face_t* -cairo_font_face_reference ( cairo_font_face_t* font_face ) ; - -FUNCTION: void -cairo_font_face_destroy ( cairo_font_face_t* font_face ) ; - -FUNCTION: uint -cairo_font_face_get_reference_count ( cairo_font_face_t* font_face ) ; - -FUNCTION: cairo_status_t -cairo_font_face_status ( cairo_font_face_t* font_face ) ; - -TYPEDEF: int cairo_font_type_t -C-ENUM: - CAIRO_FONT_TYPE_TOY - CAIRO_FONT_TYPE_FT - CAIRO_FONT_TYPE_WIN32 - CAIRO_FONT_TYPE_QUARTZ ; - -FUNCTION: cairo_font_type_t -cairo_font_face_get_type ( cairo_font_face_t* font_face ) ; - -FUNCTION: void* -cairo_font_face_get_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key ) ; - -FUNCTION: cairo_status_t -cairo_font_face_set_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; - -! Portable interface to general font features. - -FUNCTION: cairo_scaled_font_t* -cairo_scaled_font_create ( cairo_font_face_t* font_face, cairo_matrix_t* font_matrix, cairo_matrix_t* ctm, cairo_font_options_t* options ) ; - -FUNCTION: cairo_scaled_font_t* -cairo_scaled_font_reference ( cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: void -cairo_scaled_font_destroy ( cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: uint -cairo_scaled_font_get_reference_count ( cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: cairo_status_t -cairo_scaled_font_status ( cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: cairo_font_type_t -cairo_scaled_font_get_type ( cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: void* -cairo_scaled_font_get_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key ) ; - -FUNCTION: cairo_status_t -cairo_scaled_font_set_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; - -FUNCTION: void -cairo_scaled_font_extents ( cairo_scaled_font_t* scaled_font, cairo_font_extents_t* extents ) ; - -FUNCTION: void -cairo_scaled_font_text_extents ( cairo_scaled_font_t* scaled_font, char* utf8, cairo_text_extents_t* extents ) ; - -FUNCTION: void -cairo_scaled_font_glyph_extents ( cairo_scaled_font_t* scaled_font, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ; - -FUNCTION: cairo_font_face_t* -cairo_scaled_font_get_font_face ( cairo_scaled_font_t* scaled_font ) ; - -FUNCTION: void -cairo_scaled_font_get_font_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix ) ; - -FUNCTION: void -cairo_scaled_font_get_ctm ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm ) ; - -FUNCTION: void -cairo_scaled_font_get_font_options ( cairo_scaled_font_t* scaled_font, cairo_font_options_t* options ) ; - -! Query functions - -FUNCTION: cairo_operator_t -cairo_get_operator ( cairo_t* cr ) ; - -FUNCTION: cairo_pattern_t* -cairo_get_source ( cairo_t* cr ) ; - -FUNCTION: double -cairo_get_tolerance ( cairo_t* cr ) ; - -FUNCTION: cairo_antialias_t -cairo_get_antialias ( cairo_t* cr ) ; - -FUNCTION: cairo_bool_t -cairo_has_current_point ( cairo_t* cr ) ; - -FUNCTION: void -cairo_get_current_point ( cairo_t* cr, double* x, double* y ) ; - -FUNCTION: cairo_fill_rule_t -cairo_get_fill_rule ( cairo_t* cr ) ; - -FUNCTION: double -cairo_get_line_width ( cairo_t* cr ) ; - -FUNCTION: cairo_line_cap_t -cairo_get_line_cap ( cairo_t* cr ) ; - -FUNCTION: cairo_line_join_t -cairo_get_line_join ( cairo_t* cr ) ; - -FUNCTION: double -cairo_get_miter_limit ( cairo_t* cr ) ; - -FUNCTION: int -cairo_get_dash_count ( cairo_t* cr ) ; - -FUNCTION: void -cairo_get_dash ( cairo_t* cr, double* dashes, double* offset ) ; - -FUNCTION: void -cairo_get_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; - -FUNCTION: cairo_surface_t* -cairo_get_target ( cairo_t* cr ) ; - -FUNCTION: cairo_surface_t* -cairo_get_group_target ( cairo_t* cr ) ; - -TYPEDEF: int cairo_path_data_type_t -C-ENUM: - CAIRO_PATH_MOVE_TO - CAIRO_PATH_LINE_TO - CAIRO_PATH_CURVE_TO - CAIRO_PATH_CLOSE_PATH ; - -! NEED TO DO UNION HERE -C-STRUCT: cairo_path_data_t-point - { "double" "x" } - { "double" "y" } ; - -C-STRUCT: cairo_path_data_t-header - { "cairo_path_data_type_t" "type" } - { "int" "length" } ; - -C-UNION: cairo_path_data_t "cairo_path_data_t-point" "cairo_path_data_t-header" ; - -C-STRUCT: cairo_path_t - { "cairo_status_t" "status" } - { "cairo_path_data_t*" "data" } - { "int" "num_data" } ; - -FUNCTION: cairo_path_t* -cairo_copy_path ( cairo_t* cr ) ; - -FUNCTION: cairo_path_t* -cairo_copy_path_flat ( cairo_t* cr ) ; - -FUNCTION: void -cairo_append_path ( cairo_t* cr, cairo_path_t* path ) ; - -FUNCTION: void -cairo_path_destroy ( cairo_path_t* path ) ; - -! Error status queries - -FUNCTION: cairo_status_t -cairo_status ( cairo_t* cr ) ; - -FUNCTION: char* -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 ) ; - -FUNCTION: cairo_surface_t* -cairo_surface_reference ( cairo_surface_t* surface ) ; - -FUNCTION: void -cairo_surface_finish ( cairo_surface_t* surface ) ; - -FUNCTION: void -cairo_surface_destroy ( cairo_surface_t* surface ) ; - -FUNCTION: uint -cairo_surface_get_reference_count ( cairo_surface_t* surface ) ; - -FUNCTION: cairo_status_t -cairo_surface_status ( cairo_surface_t* surface ) ; - -TYPEDEF: int cairo_surface_type_t -C-ENUM: - CAIRO_SURFACE_TYPE_IMAGE - CAIRO_SURFACE_TYPE_PDF - CAIRO_SURFACE_TYPE_PS - CAIRO_SURFACE_TYPE_XLIB - CAIRO_SURFACE_TYPE_XCB - CAIRO_SURFACE_TYPE_GLITZ - CAIRO_SURFACE_TYPE_QUARTZ - CAIRO_SURFACE_TYPE_WIN32 - CAIRO_SURFACE_TYPE_BEOS - CAIRO_SURFACE_TYPE_DIRECTFB - CAIRO_SURFACE_TYPE_SVG - CAIRO_SURFACE_TYPE_OS2 - CAIRO_SURFACE_TYPE_WIN32_PRINTING - CAIRO_SURFACE_TYPE_QUARTZ_IMAGE ; - -FUNCTION: cairo_surface_type_t -cairo_surface_get_type ( cairo_surface_t* surface ) ; - -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, char* filename ) ; - -FUNCTION: cairo_status_t -cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ; - -FUNCTION: void* -cairo_surface_get_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key ) ; - -FUNCTION: cairo_status_t -cairo_surface_set_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; - -FUNCTION: void -cairo_surface_get_font_options ( cairo_surface_t* surface, cairo_font_options_t* options ) ; - -FUNCTION: void -cairo_surface_flush ( cairo_surface_t* surface ) ; - -FUNCTION: void -cairo_surface_mark_dirty ( cairo_surface_t* surface ) ; - -FUNCTION: void -cairo_surface_mark_dirty_rectangle ( cairo_surface_t* surface, int x, int y, int width, int height ) ; - -FUNCTION: void -cairo_surface_set_device_offset ( cairo_surface_t* surface, double x_offset, double y_offset ) ; - -FUNCTION: void -cairo_surface_get_device_offset ( cairo_surface_t* surface, double* x_offset, double* y_offset ) ; - -FUNCTION: void -cairo_surface_set_fallback_resolution ( cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch ) ; - -FUNCTION: void -cairo_surface_copy_page ( cairo_surface_t* surface ) ; - -FUNCTION: void -cairo_surface_show_page ( cairo_surface_t* surface ) ; - -! Image-surface functions - -TYPEDEF: int cairo_format_t -C-ENUM: - CAIRO_FORMAT_ARGB32 - CAIRO_FORMAT_RGB24 - CAIRO_FORMAT_A8 - CAIRO_FORMAT_A1 - CAIRO_FORMAT_RGB16_565 ; - -FUNCTION: cairo_surface_t* -cairo_image_surface_create ( cairo_format_t format, int width, int height ) ; - -FUNCTION: int -cairo_format_stride_for_width ( cairo_format_t format, int width ) ; - -FUNCTION: cairo_surface_t* -cairo_image_surface_create_for_data ( uchar* data, cairo_format_t format, int width, int height, int stride ) ; - -FUNCTION: uchar* -cairo_image_surface_get_data ( cairo_surface_t* surface ) ; - -FUNCTION: cairo_format_t -cairo_image_surface_get_format ( cairo_surface_t* surface ) ; - -FUNCTION: int -cairo_image_surface_get_width ( cairo_surface_t* surface ) ; - -FUNCTION: int -cairo_image_surface_get_height ( cairo_surface_t* surface ) ; - -FUNCTION: int -cairo_image_surface_get_stride ( cairo_surface_t* surface ) ; - -FUNCTION: cairo_surface_t* -cairo_image_surface_create_from_png ( char* filename ) ; - -FUNCTION: cairo_surface_t* -cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure ) ; - -! Pattern creation functions - -FUNCTION: cairo_pattern_t* -cairo_pattern_create_rgb ( double red, double green, double blue ) ; - -FUNCTION: cairo_pattern_t* -cairo_pattern_create_rgba ( double red, double green, double blue, double alpha ) ; - -FUNCTION: cairo_pattern_t* -cairo_pattern_create_for_surface ( cairo_surface_t* surface ) ; - -FUNCTION: cairo_pattern_t* -cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 ) ; - -FUNCTION: cairo_pattern_t* -cairo_pattern_create_radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 ) ; - -FUNCTION: cairo_pattern_t* -cairo_pattern_reference ( cairo_pattern_t* pattern ) ; - -FUNCTION: void -cairo_pattern_destroy ( cairo_pattern_t* pattern ) ; - -FUNCTION: uint -cairo_pattern_get_reference_count ( cairo_pattern_t* pattern ) ; - -FUNCTION: cairo_status_t -cairo_pattern_status ( cairo_pattern_t* pattern ) ; - -FUNCTION: void* -cairo_pattern_get_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key ) ; - -FUNCTION: cairo_status_t -cairo_pattern_set_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; - -TYPEDEF: int cairo_pattern_type_t -C-ENUM: - CAIRO_PATTERN_TYPE_SOLID - CAIRO_PATTERN_TYPE_SURFACE - CAIRO_PATTERN_TYPE_LINEAR - CAIRO_PATTERN_TYPE_RADIA ; - -FUNCTION: cairo_pattern_type_t -cairo_pattern_get_type ( cairo_pattern_t* pattern ) ; - -FUNCTION: void -cairo_pattern_add_color_stop_rgb ( cairo_pattern_t* pattern, double offset, double red, double green, double blue ) ; - -FUNCTION: void -cairo_pattern_add_color_stop_rgba ( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha ) ; - -FUNCTION: void -cairo_pattern_set_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_pattern_get_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ; - -TYPEDEF: int cairo_extend_t -C-ENUM: - CAIRO_EXTEND_NONE - CAIRO_EXTEND_REPEAT - CAIRO_EXTEND_REFLECT - CAIRO_EXTEND_PAD ; - -FUNCTION: void -cairo_pattern_set_extend ( cairo_pattern_t* pattern, cairo_extend_t extend ) ; - -FUNCTION: cairo_extend_t -cairo_pattern_get_extend ( cairo_pattern_t* pattern ) ; - -TYPEDEF: int cairo_filter_t -C-ENUM: - CAIRO_FILTER_FAST - CAIRO_FILTER_GOOD - CAIRO_FILTER_BEST - CAIRO_FILTER_NEAREST - CAIRO_FILTER_BILINEAR - CAIRO_FILTER_GAUSSIAN ; - -FUNCTION: void -cairo_pattern_set_filter ( cairo_pattern_t* pattern, cairo_filter_t filter ) ; - -FUNCTION: cairo_filter_t -cairo_pattern_get_filter ( cairo_pattern_t* pattern ) ; - -FUNCTION: cairo_status_t -cairo_pattern_get_rgba ( cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha ) ; - -FUNCTION: cairo_status_t -cairo_pattern_get_surface ( cairo_pattern_t* pattern, cairo_surface_t* *surface ) ; - -FUNCTION: cairo_status_t -cairo_pattern_get_color_stop_rgba ( cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha ) ; - -FUNCTION: cairo_status_t -cairo_pattern_get_color_stop_count ( cairo_pattern_t* pattern, int* count ) ; - -FUNCTION: cairo_status_t -cairo_pattern_get_linear_points ( cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1 ) ; - -FUNCTION: cairo_status_t -cairo_pattern_get_radial_circles ( cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1 ) ; - -! Matrix functions - -FUNCTION: void -cairo_matrix_init ( cairo_matrix_t* matrix, double xx, double yx, double xy, double yy, double x0, double y0 ) ; - -FUNCTION: void -cairo_matrix_init_identity ( cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_matrix_init_translate ( cairo_matrix_t* matrix, double tx, double ty ) ; - -FUNCTION: void -cairo_matrix_init_scale ( cairo_matrix_t* matrix, double sx, double sy ) ; - -FUNCTION: void -cairo_matrix_init_rotate ( cairo_matrix_t* matrix, double radians ) ; - -FUNCTION: void -cairo_matrix_translate ( cairo_matrix_t* matrix, double tx, double ty ) ; - -FUNCTION: void -cairo_matrix_scale ( cairo_matrix_t* matrix, double sx, double sy ) ; - -FUNCTION: void -cairo_matrix_rotate ( cairo_matrix_t* matrix, double radians ) ; - -FUNCTION: cairo_status_t -cairo_matrix_invert ( cairo_matrix_t* matrix ) ; - -FUNCTION: void -cairo_matrix_multiply ( cairo_matrix_t* result, cairo_matrix_t* a, cairo_matrix_t* b ) ; +: with-cairo ( cairo quot -- ) + >r r> [ (with-cairo) ] curry with-disposal ; inline -FUNCTION: void -cairo_matrix_transform_distance ( cairo_matrix_t* matrix, double* dx, double* dy ) ; +: (with-surface) ( cairo-surface-t quot -- ) + >r alien>> r> [ cairo_surface_status check-cairo ] bi ; inline -FUNCTION: void -cairo_matrix_transform_point ( cairo_matrix_t* matrix, double* x, double* y ) ; +: with-surface ( cairo_surface quot -- ) + >r r> [ (with-surface) ] curry with-disposal ; inline -! Functions to be used while debugging (not intended for use in production code) -FUNCTION: void -cairo_debug_reset_static_data ( ) ; +: with-cairo-from-surface ( cairo_surface quot -- ) + '[ cairo_create , with-cairo ] with-surface ; inline diff --git a/extra/cairo/ffi/ffi.factor b/extra/cairo/ffi/ffi.factor index 200c85c929..b82191f72c 100644 --- a/extra/cairo/ffi/ffi.factor +++ b/extra/cairo/ffi/ffi.factor @@ -1,24 +1,48 @@ -! Bindings for Cairo library -! Copyright (c) 2007 Sampo Vuori -! License: http://factorcode.org/license.txt +! Copyright (c) 2007 Sampo Vuori +! Copyright (c) 2008 Matthew Willis +! +! Adapted from cairo.h, version 1.5.14 +! License: http://factorcode.org/license.txt -! Unimplemented: -! - most of the font stuff -! - most of the matrix stuff -! - most of the query functions - -USING: alien alien.syntax combinators system ; -IN: cairo.ffi +USING: system combinators alien alien.syntax kernel +alien.c-types accessors sequences arrays ui.gadgets ; +IN: cairo << "cairo" { - { [ os winnt? ] [ "libcairo-2.dll" ] } - ! { [ os macosx? ] [ "libcairo.dylib" ] } - { [ os macosx? ] [ "/opt/local/lib/libcairo.dylib" ] } - { [ os unix? ] [ "libcairo.so.2" ] } - } cond "cdecl" add-library >> + { [ os winnt? ] [ "libcairo-2.dll" ] } + { [ os macosx? ] [ "libcairo.dylib" ] } + { [ os unix? ] [ "libcairo.so.2" ] } +} cond "cdecl" add-library >> LIBRARY: cairo +FUNCTION: int cairo_version ( ) ; +FUNCTION: char* cairo_version_string ( ) ; + +TYPEDEF: int cairo_bool_t + +! I am leaving these and other void* types as opaque structures +TYPEDEF: void* cairo_t +TYPEDEF: void* cairo_surface_t + +C-STRUCT: cairo_matrix_t + { "double" "xx" } + { "double" "yx" } + { "double" "xy" } + { "double" "yy" } + { "double" "x0" } + { "double" "y0" } ; + +TYPEDEF: void* cairo_pattern_t + +TYPEDEF: void* cairo_destroy_func_t +: cairo-destroy-func ( quot -- callback ) + >r "void" { "void*" } "cdecl" r> alien-callback ; inline + +! See cairo.h for details +C-STRUCT: cairo_user_data_key_t + { "int" "unused" } ; + TYPEDEF: int cairo_status_t C-ENUM: CAIRO_STATUS_SUCCESS @@ -44,137 +68,344 @@ C-ENUM: CAIRO_STATUS_INVALID_DSC_COMMENT CAIRO_STATUS_INVALID_INDEX CAIRO_STATUS_CLIP_NOT_REPRESENTABLE -; + CAIRO_STATUS_TEMP_FILE_ERROR + CAIRO_STATUS_INVALID_STRIDE ; TYPEDEF: int cairo_content_t -: CAIRO_CONTENT_COLOR HEX: 1000 ; -: CAIRO_CONTENT_ALPHA HEX: 2000 ; -: CAIRO_CONTENT_COLOR_ALPHA HEX: 3000 ; +: CAIRO_CONTENT_COLOR HEX: 1000 ; +: CAIRO_CONTENT_ALPHA HEX: 2000 ; +: CAIRO_CONTENT_COLOR_ALPHA HEX: 3000 ; + +TYPEDEF: void* cairo_write_func_t +: cairo-write-func ( quot -- callback ) + >r "cairo_status_t" { "void*" "uchar*" "int" } + "cdecl" r> alien-callback ; inline + +TYPEDEF: void* cairo_read_func_t +: cairo-read-func ( quot -- callback ) + >r "cairo_status_t" { "void*" "uchar*" "int" } + "cdecl" r> alien-callback ; inline + +! Functions for manipulating state objects +FUNCTION: cairo_t* +cairo_create ( cairo_surface_t* target ) ; + +FUNCTION: cairo_t* +cairo_reference ( cairo_t* cr ) ; +FUNCTION: void +cairo_destroy ( cairo_t* cr ) ; + +FUNCTION: uint +cairo_get_reference_count ( cairo_t* cr ) ; + +FUNCTION: void* +cairo_get_user_data ( cairo_t* cr, cairo_user_data_key_t* key ) ; + +FUNCTION: cairo_status_t +cairo_set_user_data ( cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; + +FUNCTION: void +cairo_save ( cairo_t* cr ) ; + +FUNCTION: void +cairo_restore ( cairo_t* cr ) ; + +FUNCTION: void +cairo_push_group ( cairo_t* cr ) ; + +FUNCTION: void +cairo_push_group_with_content ( cairo_t* cr, cairo_content_t content ) ; + +FUNCTION: cairo_pattern_t* +cairo_pop_group ( cairo_t* cr ) ; + +FUNCTION: void +cairo_pop_group_to_source ( cairo_t* cr ) ; + +! Modify state TYPEDEF: int cairo_operator_t C-ENUM: CAIRO_OPERATOR_CLEAR + CAIRO_OPERATOR_SOURCE CAIRO_OPERATOR_OVER CAIRO_OPERATOR_IN CAIRO_OPERATOR_OUT CAIRO_OPERATOR_ATOP + CAIRO_OPERATOR_DEST CAIRO_OPERATOR_DEST_OVER CAIRO_OPERATOR_DEST_IN CAIRO_OPERATOR_DEST_OUT CAIRO_OPERATOR_DEST_ATOP + CAIRO_OPERATOR_XOR CAIRO_OPERATOR_ADD - CAIRO_OPERATOR_SATURATE -; + CAIRO_OPERATOR_SATURATE ; + +FUNCTION: void +cairo_set_operator ( cairo_t* cr, cairo_operator_t op ) ; + +FUNCTION: void +cairo_set_source ( cairo_t* cr, cairo_pattern_t* source ) ; + +FUNCTION: void +cairo_set_source_rgb ( cairo_t* cr, double red, double green, double blue ) ; + +FUNCTION: void +cairo_set_source_rgba ( cairo_t* cr, double red, double green, double blue, double alpha ) ; + +FUNCTION: void +cairo_set_source_surface ( cairo_t* cr, cairo_surface_t* surface, double x, double y ) ; + +FUNCTION: void +cairo_set_tolerance ( cairo_t* cr, double tolerance ) ; + +TYPEDEF: int cairo_antialias_t +C-ENUM: + CAIRO_ANTIALIAS_DEFAULT + CAIRO_ANTIALIAS_NONE + CAIRO_ANTIALIAS_GRAY + CAIRO_ANTIALIAS_SUBPIXEL ; + +FUNCTION: void +cairo_set_antialias ( cairo_t* cr, cairo_antialias_t antialias ) ; + +TYPEDEF: int cairo_fill_rule_t +C-ENUM: + CAIRO_FILL_RULE_WINDING + CAIRO_FILL_RULE_EVEN_ODD ; + +FUNCTION: void +cairo_set_fill_rule ( cairo_t* cr, cairo_fill_rule_t fill_rule ) ; + +FUNCTION: void +cairo_set_line_width ( cairo_t* cr, double width ) ; TYPEDEF: int cairo_line_cap_t C-ENUM: CAIRO_LINE_CAP_BUTT CAIRO_LINE_CAP_ROUND - CAIRO_LINE_CAP_SQUARE -; + CAIRO_LINE_CAP_SQUARE ; -TYPEDEF: int cair_line_join_t +FUNCTION: void +cairo_set_line_cap ( cairo_t* cr, cairo_line_cap_t line_cap ) ; + +TYPEDEF: int cairo_line_join_t C-ENUM: CAIRO_LINE_JOIN_MITER CAIRO_LINE_JOIN_ROUND - CAIRO_LINE_JOIN_BEVEL -; + CAIRO_LINE_JOIN_BEVEL ; -TYPEDEF: int cairo_fill_rule_t -C-ENUM: - CAIRO_FILL_RULE_WINDING - CAIRO_FILL_RULE_EVEN_ODD -; +FUNCTION: void +cairo_set_line_join ( cairo_t* cr, cairo_line_join_t line_join ) ; -TYPEDEF: int cairo_font_slant_t -C-ENUM: - CAIRO_FONT_SLANT_NORMAL - CAIRO_FONT_SLANT_ITALIC - CAIRO_FONT_SLANT_OBLIQUE -; +FUNCTION: void +cairo_set_dash ( cairo_t* cr, double* dashes, int num_dashes, double offset ) ; -TYPEDEF: int cairo_font_weight_t -C-ENUM: - CAIRO_FONT_WEIGHT_NORMAL - CAIRO_FONT_WEIGHT_BOLD -; +FUNCTION: void +cairo_set_miter_limit ( cairo_t* cr, double limit ) ; + +FUNCTION: void +cairo_translate ( cairo_t* cr, double tx, double ty ) ; + +FUNCTION: void +cairo_scale ( cairo_t* cr, double sx, double sy ) ; + +FUNCTION: void +cairo_rotate ( cairo_t* cr, double angle ) ; + +FUNCTION: void +cairo_transform ( cairo_t* cr, cairo_matrix_t* matrix ) ; + +FUNCTION: void +cairo_set_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; + +FUNCTION: void +cairo_identity_matrix ( cairo_t* cr ) ; + +FUNCTION: void +cairo_user_to_device ( cairo_t* cr, double* x, double* y ) ; + +FUNCTION: void +cairo_user_to_device_distance ( cairo_t* cr, double* dx, double* dy ) ; + +FUNCTION: void +cairo_device_to_user ( cairo_t* cr, double* x, double* y ) ; + +FUNCTION: void +cairo_device_to_user_distance ( cairo_t* cr, double* dx, double* dy ) ; + +! Path creation functions +FUNCTION: void +cairo_new_path ( cairo_t* cr ) ; + +FUNCTION: void +cairo_move_to ( cairo_t* cr, double x, double y ) ; + +FUNCTION: void +cairo_new_sub_path ( cairo_t* cr ) ; + +FUNCTION: void +cairo_line_to ( cairo_t* cr, double x, double y ) ; + +FUNCTION: void +cairo_curve_to ( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 ) ; + +FUNCTION: void +cairo_arc ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ; + +FUNCTION: void +cairo_arc_negative ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ; + +FUNCTION: void +cairo_rel_move_to ( cairo_t* cr, double dx, double dy ) ; + +FUNCTION: void +cairo_rel_line_to ( cairo_t* cr, double dx, double dy ) ; + +FUNCTION: void +cairo_rel_curve_to ( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 ) ; + +FUNCTION: void +cairo_rectangle ( cairo_t* cr, double x, double y, double width, double height ) ; + +FUNCTION: void +cairo_close_path ( cairo_t* cr ) ; + +FUNCTION: void +cairo_path_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; + +! Painting functions +FUNCTION: void +cairo_paint ( cairo_t* cr ) ; + +FUNCTION: void +cairo_paint_with_alpha ( cairo_t* cr, double alpha ) ; + +FUNCTION: void +cairo_mask ( cairo_t* cr, cairo_pattern_t* pattern ) ; + +FUNCTION: void +cairo_mask_surface ( cairo_t* cr, cairo_surface_t* surface, double surface_x, double surface_y ) ; -C-STRUCT: cairo_font_t - { "int" "refcount" } - { "uint" "scale" } ; +FUNCTION: void +cairo_stroke ( cairo_t* cr ) ; + +FUNCTION: void +cairo_stroke_preserve ( cairo_t* cr ) ; + +FUNCTION: void +cairo_fill ( cairo_t* cr ) ; + +FUNCTION: void +cairo_fill_preserve ( cairo_t* cr ) ; + +FUNCTION: void +cairo_copy_page ( cairo_t* cr ) ; + +FUNCTION: void +cairo_show_page ( cairo_t* cr ) ; + +! Insideness testing +FUNCTION: cairo_bool_t +cairo_in_stroke ( cairo_t* cr, double x, double y ) ; + +FUNCTION: cairo_bool_t +cairo_in_fill ( cairo_t* cr, double x, double y ) ; + +! Rectangular extents +FUNCTION: void +cairo_stroke_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; + +FUNCTION: void +cairo_fill_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; + +! Clipping +FUNCTION: void +cairo_reset_clip ( cairo_t* cr ) ; + +FUNCTION: void +cairo_clip ( cairo_t* cr ) ; + +FUNCTION: void +cairo_clip_preserve ( cairo_t* cr ) ; + +FUNCTION: void +cairo_clip_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ; C-STRUCT: cairo_rectangle_t - { "short" "x" } - { "short" "y" } - { "ushort" "width" } - { "ushort" "height" } ; + { "double" "x" } + { "double" "y" } + { "double" "width" } + { "double" "height" } ; + +: ( x y width height -- cairo_rectangle_t ) + "cairo_rectangle_t" dup + { + [ set-cairo_rectangle_t-height ] [ set-cairo_rectangle_t-width ] + [ set-cairo_rectangle_t-y ] [ set-cairo_rectangle_t-x ] + } cleave ; + +: rect>cairo ( rect -- cairo_rectangle_t ) + [ loc>> ] [ dim>> ] bi [ [ first ] [ second ] bi ] bi@ + ; + +: cairo>rect ( cairo_rectangle_t -- rect ) + { + [ cairo_rectangle_t-x ] [ cairo_rectangle_t-y ] + [ cairo_rectangle_t-width ] [ cairo_rectangle_t-height ] + } cleave + [ 2array ] 2bi@ ; + +C-STRUCT: cairo_rectangle_list_t + { "cairo_status_t" "status" } + { "cairo_rectangle_t*" "rectangles" } + { "int" "num_rectangles" } ; -C-STRUCT: cairo_clip_rec_t - { "cairo_rectangle_t" "rect" } - { "void*" "region" } - { "void*" "surface" } ; +FUNCTION: cairo_rectangle_list_t* +cairo_copy_clip_rectangle_list ( cairo_t* cr ) ; -C-STRUCT: cairo_matrix_t - { "void*" "m" } ; - -C-STRUCT: cairo_gstate_t - { "uint" "operator" } - { "double" "tolerance" } - { "double" "line_width" } - { "uint" "line_cap" } - { "uint" "line_join" } - { "double" "miter_limit" } - { "uint" "fill_rule" } - { "void*" "dash" } - { "int" "num_dashes" } - { "double" "dash_offset" } - { "char*" "font_family " } - { "uint" "font_slant" } - { "uint" "font_weight" } - { "void*" "font" } - { "void*" "surface" } - { "void*" "pattern " } - { "double" "alpha" } - { "cairo_clip_rec_t" "clip" } - { "double" "pixels_per_inch" } - { "cairo_matrix_t" "font_matrix" } - { "cairo_matrix_t" "ctm" } - { "cairo_matrix_t" "ctm_inverse" } - { "void*" "path" } - { "void*" "pen_regular" } - { "void*" "next" } ; - -C-STRUCT: cairo_t - { "uint" "ref_count" } - { "cairo_gstate_t*" "gstate" } - { "uint" "status ! cairo_status_t" } ; +FUNCTION: void +cairo_rectangle_list_destroy ( cairo_rectangle_list_t* rectangle_list ) ; -C-STRUCT: cairo_matrix_t - { "double" "xx" } - { "double" "yx" } - { "double" "xy" } - { "double" "yy" } - { "double" "x0" } - { "double" "y0" } ; +! Font/Text functions -TYPEDEF: int cairo_format_t +TYPEDEF: void* cairo_scaled_font_t + +TYPEDEF: void* cairo_font_face_t + +C-STRUCT: cairo_glyph_t + { "ulong" "index" } + { "double" "x" } + { "double" "y" } ; + +C-STRUCT: cairo_text_extents_t + { "double" "x_bearing" } + { "double" "y_bearing" } + { "double" "width" } + { "double" "height" } + { "double" "x_advance" } + { "double" "y_advance" } ; + +C-STRUCT: cairo_font_extents_t + { "double" "ascent" } + { "double" "descent" } + { "double" "height" } + { "double" "max_x_advance" } + { "double" "max_y_advance" } ; + +TYPEDEF: int cairo_font_slant_t C-ENUM: - CAIRO_FORMAT_ARGB32 - CAIRO_FORMAT_RGB24 - CAIRO_FORMAT_A8 - CAIRO_FORMAT_A1 -; + CAIRO_FONT_SLANT_NORMAL + CAIRO_FONT_SLANT_ITALIC + CAIRO_FONT_SLANT_OBLIQUE ; -TYPEDEF: int cairo_antialias_t +TYPEDEF: int cairo_font_weight_t C-ENUM: - CAIRO_ANTIALIAS_DEFAULT - CAIRO_ANTIALIAS_NONE - CAIRO_ANTIALIAS_GRAY - CAIRO_ANTIALIAS_SUBPIXEL -; + CAIRO_FONT_WEIGHT_NORMAL + CAIRO_FONT_WEIGHT_BOLD ; TYPEDEF: int cairo_subpixel_order_t C-ENUM: @@ -182,8 +413,7 @@ C-ENUM: CAIRO_SUBPIXEL_ORDER_RGB CAIRO_SUBPIXEL_ORDER_BGR CAIRO_SUBPIXEL_ORDER_VRGB - CAIRO_SUBPIXEL_ORDER_VBGR -; + CAIRO_SUBPIXEL_ORDER_VBGR ; TYPEDEF: int cairo_hint_style_t C-ENUM: @@ -191,270 +421,548 @@ C-ENUM: CAIRO_HINT_STYLE_NONE CAIRO_HINT_STYLE_SLIGHT CAIRO_HINT_STYLE_MEDIUM - CAIRO_HINT_STYLE_FULL -; + CAIRO_HINT_STYLE_FULL ; TYPEDEF: int cairo_hint_metrics_t C-ENUM: CAIRO_HINT_METRICS_DEFAULT CAIRO_HINT_METRICS_OFF - CAIRO_HINT_METRICS_ON -; + CAIRO_HINT_METRICS_ON ; -FUNCTION: char* cairo_status_to_string ( cairo_status_t status ) ; -FUNCTION: cairo_status_t cairo_status ( cairo_t* cr ) ; +TYPEDEF: void* cairo_font_options_t -: cairo_create ( cairo_surface_t -- cairo_t ) - "cairo_t*" "cairo" "cairo_create" [ "void*" ] alien-invoke ; +FUNCTION: cairo_font_options_t* +cairo_font_options_create ( ) ; -: cairo_reference ( cairo_t -- cairo_t ) - "cairo_t*" "cairo" "cairo_reference" [ "cairo_t*" ] alien-invoke ; +FUNCTION: cairo_font_options_t* +cairo_font_options_copy ( cairo_font_options_t* original ) ; -: cairo_destroy ( cairo_t -- ) - "void" "cairo" "cairo_destroy" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_font_options_destroy ( cairo_font_options_t* options ) ; -: cairo_save ( cairo_t -- ) - "void" "cairo" "cairo_save" [ "cairo_t*" ] alien-invoke ; +FUNCTION: cairo_status_t +cairo_font_options_status ( cairo_font_options_t* options ) ; -: cairo_restore ( cairo_t -- ) - "void" "cairo" "cairo_restore" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_font_options_merge ( cairo_font_options_t* options, cairo_font_options_t* other ) ; -: cairo_set_operator ( cairo_t cairo_operator_t -- ) - "void" "cairo" "cairo_set_operator" [ "cairo_t*" "int" ] alien-invoke ; +FUNCTION: cairo_bool_t +cairo_font_options_equal ( cairo_font_options_t* options, cairo_font_options_t* other ) ; -: cairo_set_source ( cairo_t cairo_pattern_t -- ) - "void" "cairo" "cairo_set_source" [ "cairo_t*" "void*" ] alien-invoke ; +FUNCTION: ulong +cairo_font_options_hash ( cairo_font_options_t* options ) ; -: cairo_set_source_rgb ( cairo_t red green blue -- ) - "void" "cairo" "cairo_set_source_rgb" [ "cairo_t*" "double" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_font_options_set_antialias ( cairo_font_options_t* options, cairo_antialias_t antialias ) ; -: cairo_set_source_rgba ( cairo_t red green blue alpha -- ) - "void" "cairo" "cairo_set_source_rgb" [ "cairo_t*" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: cairo_antialias_t +cairo_font_options_get_antialias ( cairo_font_options_t* options ) ; -: cairo_set_source_surface ( cairo_t cairo_surface_t x y -- ) - "void" "cairo" "cairo_set_source_surface" [ "cairo_t*" "void*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_font_options_set_subpixel_order ( cairo_font_options_t* options, cairo_subpixel_order_t subpixel_order ) ; -: cairo_set_tolerance ( cairo_t tolerance -- ) - "void" "cairo" "cairo_set_tolerance" [ "cairo_t*" "double" ] alien-invoke ; +FUNCTION: cairo_subpixel_order_t +cairo_font_options_get_subpixel_order ( cairo_font_options_t* options ) ; -: cairo_image_surface_create_for_data ( data format width height stride -- cairo_surface_t ) - "void*" "cairo" "cairo_image_surface_create_for_data" [ "void*" "uint" "int" "int" "int" ] alien-invoke ; - +FUNCTION: void +cairo_font_options_set_hint_style ( cairo_font_options_t* options, cairo_hint_style_t hint_style ) ; -: cairo_set_antialias ( cairo_t cairo_antialias_t -- ) - "void" "cairo" "cairo_set_antialias" [ "cairo_t*" "int" ] alien-invoke ; +FUNCTION: cairo_hint_style_t +cairo_font_options_get_hint_style ( cairo_font_options_t* options ) ; -: cairo_set_fill_rule ( cairo_t cairo_fill_rule_t -- ) - "void" "cairo" "cairo_set_fill_rule" [ "cairo_t*" "int" ] alien-invoke ; +FUNCTION: void +cairo_font_options_set_hint_metrics ( cairo_font_options_t* options, cairo_hint_metrics_t hint_metrics ) ; -: cairo_set_line_width ( cairo_t width -- ) - "void" "cairo" "cairo_set_line_width" [ "cairo_t*" "double" ] alien-invoke ; +FUNCTION: cairo_hint_metrics_t +cairo_font_options_get_hint_metrics ( cairo_font_options_t* options ) ; -: cairo_set_line_cap ( cairo_t cairo_line_cap_t -- ) - "void" "cairo" "cairo_set_line_cap" [ "cairo_t*" "int" ] alien-invoke ; +! This interface is for dealing with text as text, not caring about the +! font object inside the the cairo_t. -: cairo_set_line_join ( cairo_t cairo_line_join_t -- ) - "void" "cairo" "cairo_set_line_join" [ "cairo_t*" "int" ] alien-invoke ; +FUNCTION: void +cairo_select_font_face ( cairo_t* cr, char* family, cairo_font_slant_t slant, cairo_font_weight_t weight ) ; -: cairo_set_dash ( cairo_t dashes num_dashes offset -- ) - "void" "cairo" "cairo_set_dash" [ "cairo_t*" "double" "int" "double" ] alien-invoke ; +FUNCTION: void +cairo_set_font_size ( cairo_t* cr, double size ) ; -: cairo_set_miter_limit ( cairo_t limit -- ) - "void" "cairo" "cairo_set_miter_limit" [ "cairo_t*" "double" ] alien-invoke ; +FUNCTION: void +cairo_set_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; -: cairo_translate ( cairo_t x y -- ) - "void" "cairo" "cairo_translate" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_get_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; -: cairo_scale ( cairo_t sx sy -- ) - "void" "cairo" "cairo_scale" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_set_font_options ( cairo_t* cr, cairo_font_options_t* options ) ; -: cairo_rotate ( cairo_t angle -- ) - "void" "cairo" "cairo_rotate" [ "cairo_t*" "double" ] alien-invoke ; +FUNCTION: void +cairo_get_font_options ( cairo_t* cr, cairo_font_options_t* options ) ; -: cairo_transform ( cairo_t cairo_matrix_t -- ) - "void" "cairo" "cairo_transform" [ "cairo_t*" "cairo_matrix_t*" ] alien-invoke ; +FUNCTION: void +cairo_set_font_face ( cairo_t* cr, cairo_font_face_t* font_face ) ; -: cairo_set_matrix ( cairo_t cairo_matrix_t -- ) - "void" "cairo" "cairo_set_matrix" [ "cairo_t*" "cairo_matrix_t*" ] alien-invoke ; +FUNCTION: cairo_font_face_t* +cairo_get_font_face ( cairo_t* cr ) ; -: cairo_identity_matrix ( cairo_t -- ) - "void" "cairo" "cairo_identity_matrix" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_set_scaled_font ( cairo_t* cr, cairo_scaled_font_t* scaled_font ) ; -! cairo path creating functions +FUNCTION: cairo_scaled_font_t* +cairo_get_scaled_font ( cairo_t* cr ) ; -: cairo_new_path ( cairo_t -- ) - "void" "cairo" "cairo_new_path" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_show_text ( cairo_t* cr, char* utf8 ) ; -: cairo_move_to ( cairo_t x y -- ) - "void" "cairo" "cairo_move_to" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_show_glyphs ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ; -: cairo_new_sub_path ( cairo_t -- ) - "void" "cairo" "cairo_new_sub_path" [ "cairo_t*" ] alien-invoke ; - -: cairo_line_to ( cairo_t x y -- ) - "void" "cairo" "cairo_line_to" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_text_path ( cairo_t* cr, char* utf8 ) ; -: cairo_curve_to ( cairo_t x1 y1 x2 y2 x3 y3 -- ) - "void" "cairo" "cairo_curve_to" [ "cairo_t*" "double" "double" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_glyph_path ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ; -: cairo_arc ( cairo_t xc yc radius angle1 angle2 -- ) - "void" "cairo" "cairo_arc" [ "cairo_t*" "double" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_text_extents ( cairo_t* cr, char* utf8, cairo_text_extents_t* extents ) ; -: cairo_arc_negative ( cairo_t xc yc radius angle1 angle2 -- ) - "void" "cairo" "cairo_arc_negative" [ "cairo_t*" "double" "double" "double" "double" "double" ] alien-invoke ; - -: cairo_rel_move_to ( cairo_t dx dy -- ) - "void" "cairo" "cairo_rel_move_to" [ "cairo_t*" "double" "double" ] alien-invoke ; - -: cairo_rel_line_to ( cairo_t dx dy -- ) - "void" "cairo" "cairo_rel_line_to" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_glyph_extents ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ; + +FUNCTION: void +cairo_font_extents ( cairo_t* cr, cairo_font_extents_t* extents ) ; + +! Generic identifier for a font style + +FUNCTION: cairo_font_face_t* +cairo_font_face_reference ( cairo_font_face_t* font_face ) ; + +FUNCTION: void +cairo_font_face_destroy ( cairo_font_face_t* font_face ) ; + +FUNCTION: uint +cairo_font_face_get_reference_count ( cairo_font_face_t* font_face ) ; + +FUNCTION: cairo_status_t +cairo_font_face_status ( cairo_font_face_t* font_face ) ; + +TYPEDEF: int cairo_font_type_t +C-ENUM: + CAIRO_FONT_TYPE_TOY + CAIRO_FONT_TYPE_FT + CAIRO_FONT_TYPE_WIN32 + CAIRO_FONT_TYPE_QUARTZ ; + +FUNCTION: cairo_font_type_t +cairo_font_face_get_type ( cairo_font_face_t* font_face ) ; + +FUNCTION: void* +cairo_font_face_get_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key ) ; + +FUNCTION: cairo_status_t +cairo_font_face_set_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; + +! Portable interface to general font features. + +FUNCTION: cairo_scaled_font_t* +cairo_scaled_font_create ( cairo_font_face_t* font_face, cairo_matrix_t* font_matrix, cairo_matrix_t* ctm, cairo_font_options_t* options ) ; + +FUNCTION: cairo_scaled_font_t* +cairo_scaled_font_reference ( cairo_scaled_font_t* scaled_font ) ; + +FUNCTION: void +cairo_scaled_font_destroy ( cairo_scaled_font_t* scaled_font ) ; -: cairo_rel_curve_to ( cairo_t dx1 dy1 dx2 dy2 dx3 dy3 -- ) - "void" "cairo" "cairo_rel_curve_to" [ "cairo_t*" "double" "double" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: uint +cairo_scaled_font_get_reference_count ( cairo_scaled_font_t* scaled_font ) ; -: cairo_rectangle ( cairo_t x y width height -- ) - "void" "cairo" "cairo_rectangle" [ "cairo_t*" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: cairo_status_t +cairo_scaled_font_status ( cairo_scaled_font_t* scaled_font ) ; -: cairo_close_path ( cairo_t -- ) - "void" "cairo" "cairo_close_path" [ "cairo_t*" ] alien-invoke ; +FUNCTION: cairo_font_type_t +cairo_scaled_font_get_type ( cairo_scaled_font_t* scaled_font ) ; + +FUNCTION: void* +cairo_scaled_font_get_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key ) ; + +FUNCTION: cairo_status_t +cairo_scaled_font_set_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; + +FUNCTION: void +cairo_scaled_font_extents ( cairo_scaled_font_t* scaled_font, cairo_font_extents_t* extents ) ; + +FUNCTION: void +cairo_scaled_font_text_extents ( cairo_scaled_font_t* scaled_font, char* utf8, cairo_text_extents_t* extents ) ; + +FUNCTION: void +cairo_scaled_font_glyph_extents ( cairo_scaled_font_t* scaled_font, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ; + +FUNCTION: cairo_font_face_t* +cairo_scaled_font_get_font_face ( cairo_scaled_font_t* scaled_font ) ; + +FUNCTION: void +cairo_scaled_font_get_font_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix ) ; + +FUNCTION: void +cairo_scaled_font_get_ctm ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm ) ; + +FUNCTION: void +cairo_scaled_font_get_font_options ( cairo_scaled_font_t* scaled_font, cairo_font_options_t* options ) ; + +! Query functions + +FUNCTION: cairo_operator_t +cairo_get_operator ( cairo_t* cr ) ; + +FUNCTION: cairo_pattern_t* +cairo_get_source ( cairo_t* cr ) ; + +FUNCTION: double +cairo_get_tolerance ( cairo_t* cr ) ; + +FUNCTION: cairo_antialias_t +cairo_get_antialias ( cairo_t* cr ) ; + +FUNCTION: cairo_bool_t +cairo_has_current_point ( cairo_t* cr ) ; + +FUNCTION: void +cairo_get_current_point ( cairo_t* cr, double* x, double* y ) ; + +FUNCTION: cairo_fill_rule_t +cairo_get_fill_rule ( cairo_t* cr ) ; + +FUNCTION: double +cairo_get_line_width ( cairo_t* cr ) ; + +FUNCTION: cairo_line_cap_t +cairo_get_line_cap ( cairo_t* cr ) ; + +FUNCTION: cairo_line_join_t +cairo_get_line_join ( cairo_t* cr ) ; + +FUNCTION: double +cairo_get_miter_limit ( cairo_t* cr ) ; + +FUNCTION: int +cairo_get_dash_count ( cairo_t* cr ) ; + +FUNCTION: void +cairo_get_dash ( cairo_t* cr, double* dashes, double* offset ) ; + +FUNCTION: void +cairo_get_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ; + +FUNCTION: cairo_surface_t* +cairo_get_target ( cairo_t* cr ) ; + +FUNCTION: cairo_surface_t* +cairo_get_group_target ( cairo_t* cr ) ; + +TYPEDEF: int cairo_path_data_type_t +C-ENUM: + CAIRO_PATH_MOVE_TO + CAIRO_PATH_LINE_TO + CAIRO_PATH_CURVE_TO + CAIRO_PATH_CLOSE_PATH ; + +! NEED TO DO UNION HERE +C-STRUCT: cairo_path_data_t-point + { "double" "x" } + { "double" "y" } ; + +C-STRUCT: cairo_path_data_t-header + { "cairo_path_data_type_t" "type" } + { "int" "length" } ; + +C-UNION: cairo_path_data_t "cairo_path_data_t-point" "cairo_path_data_t-header" ; + +C-STRUCT: cairo_path_t + { "cairo_status_t" "status" } + { "cairo_path_data_t*" "data" } + { "int" "num_data" } ; + +FUNCTION: cairo_path_t* +cairo_copy_path ( cairo_t* cr ) ; + +FUNCTION: cairo_path_t* +cairo_copy_path_flat ( cairo_t* cr ) ; + +FUNCTION: void +cairo_append_path ( cairo_t* cr, cairo_path_t* path ) ; + +FUNCTION: void +cairo_path_destroy ( cairo_path_t* path ) ; + +! Error status queries + +FUNCTION: cairo_status_t +cairo_status ( cairo_t* cr ) ; + +FUNCTION: char* +cairo_status_to_string ( cairo_status_t status ) ; ! Surface manipulation -: cairo_surface_create_similar ( cairo_surface_t cairo_content_t width height -- cairo_surface_t ) - "cairo_surface_t*" "cairo" "cairo_surface_create_similar" [ "cairo_surface_t*" "uint" "int" "int" ] alien-invoke ; +FUNCTION: cairo_surface_t* +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 ) ; + +FUNCTION: void +cairo_surface_finish ( cairo_surface_t* surface ) ; + +FUNCTION: void +cairo_surface_destroy ( cairo_surface_t* surface ) ; -: cairo_surface_reference ( cairo_surface_t -- cairo_surface_t ) - "cairo_surface_t*" "cairo" "cairo_surface_reference" [ "cairo_surface_t*" ] alien-invoke ; +FUNCTION: uint +cairo_surface_get_reference_count ( cairo_surface_t* surface ) ; -: cairo_surface_finish ( cairo_surface_t -- ) - "void" "cairo" "cairo_surface_finish" [ "cairo_surface_t*" ] alien-invoke ; +FUNCTION: cairo_status_t +cairo_surface_status ( cairo_surface_t* surface ) ; -: cairo_surface_destroy ( cairo_surface_t -- ) - "void" "cairo" "cairo_surface_destroy" [ "cairo_surface_t*" ] alien-invoke ; +TYPEDEF: int cairo_surface_type_t +C-ENUM: + CAIRO_SURFACE_TYPE_IMAGE + CAIRO_SURFACE_TYPE_PDF + CAIRO_SURFACE_TYPE_PS + CAIRO_SURFACE_TYPE_XLIB + CAIRO_SURFACE_TYPE_XCB + CAIRO_SURFACE_TYPE_GLITZ + CAIRO_SURFACE_TYPE_QUARTZ + CAIRO_SURFACE_TYPE_WIN32 + CAIRO_SURFACE_TYPE_BEOS + CAIRO_SURFACE_TYPE_DIRECTFB + CAIRO_SURFACE_TYPE_SVG + CAIRO_SURFACE_TYPE_OS2 + CAIRO_SURFACE_TYPE_WIN32_PRINTING + CAIRO_SURFACE_TYPE_QUARTZ_IMAGE ; + +FUNCTION: cairo_surface_type_t +cairo_surface_get_type ( cairo_surface_t* surface ) ; + +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, char* filename ) ; -: cairo_surface_get_reference_count ( cairo_surface_t -- count ) - "uint" "cairo" "cairo_surface_get_reference_count" [ "cairo_surface_t*" ] alien-invoke ; +FUNCTION: cairo_status_t +cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ; -: cairo_surface_status ( cairo_surface_t -- cairo_status_t ) - "uint" "cairo" "cairo_surface_status" [ "cairo_surface_t*" ] alien-invoke ; +FUNCTION: void* +cairo_surface_get_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key ) ; -: cairo_surface_flush ( cairo_surface_t -- ) - "void" "cairo" "cairo_surface_flush" [ "cairo_surface_t*" ] alien-invoke ; +FUNCTION: cairo_status_t +cairo_surface_set_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; -! painting functions -: cairo_paint ( cairo_t -- ) - "void" "cairo" "cairo_paint" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_surface_get_font_options ( cairo_surface_t* surface, cairo_font_options_t* options ) ; -: cairo_paint_with_alpha ( cairo_t alpha -- ) - "void" "cairo" "cairo_paint_with_alpha" [ "cairo_t*" "double" ] alien-invoke ; +FUNCTION: void +cairo_surface_flush ( cairo_surface_t* surface ) ; -: cairo_mask ( cairo_t cairo_pattern_t -- ) - "void" "cairo" "cairo_mask" [ "cairo_t*" "void*" ] alien-invoke ; +FUNCTION: void +cairo_surface_mark_dirty ( cairo_surface_t* surface ) ; -: cairo_mask_surface ( cairo_t cairo_pattern_t surface-x surface-y -- ) - "void" "cairo" "cairo_mask_surface" [ "cairo_t*" "void*" "double" "double" ] alien-invoke ; +FUNCTION: void +cairo_surface_mark_dirty_rectangle ( cairo_surface_t* surface, int x, int y, int width, int height ) ; -: cairo_stroke ( cairo_t -- ) - "void" "cairo" "cairo_stroke" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_surface_set_device_offset ( cairo_surface_t* surface, double x_offset, double y_offset ) ; -: cairo_stroke_preserve ( cairo_t -- ) - "void" "cairo" "cairo_stroke_preserve" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_surface_get_device_offset ( cairo_surface_t* surface, double* x_offset, double* y_offset ) ; -: cairo_fill ( cairo_t -- ) - "void" "cairo" "cairo_fill" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_surface_set_fallback_resolution ( cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch ) ; -: cairo_fill_preserve ( cairo_t -- ) - "void" "cairo" "cairo_fill_preserve" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_surface_copy_page ( cairo_surface_t* surface ) ; -: cairo_copy_page ( cairo_t -- ) - "void" "cairo" "cairo_copy_page" [ "cairo_t*" ] alien-invoke ; +FUNCTION: void +cairo_surface_show_page ( cairo_surface_t* surface ) ; -: cairo_show_page ( cairo_t -- ) - "void" "cairo" "cairo_show_page" [ "cairo_t*" ] alien-invoke ; +! Image-surface functions + +TYPEDEF: int cairo_format_t +C-ENUM: + CAIRO_FORMAT_ARGB32 + CAIRO_FORMAT_RGB24 + CAIRO_FORMAT_A8 + CAIRO_FORMAT_A1 + CAIRO_FORMAT_RGB16_565 ; -! insideness testing -: cairo_in_stroke ( cairo_t x y -- t/f ) - "int" "cairo" "cairo_in_stroke" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: cairo_surface_t* +cairo_image_surface_create ( cairo_format_t format, int width, int height ) ; -: cairo_in_fill ( cairo_t x y -- t/f ) - "int" "cairo" "cairo_in_fill" [ "cairo_t*" "double" "double" ] alien-invoke ; +FUNCTION: int +cairo_format_stride_for_width ( cairo_format_t format, int width ) ; -! rectangular extents -: cairo_stroke_extents ( cairo_t x1 y1 x2 y2 -- ) - "void" "cairo" "cairo_stroke_extents" [ "cairo_t*" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: cairo_surface_t* +cairo_image_surface_create_for_data ( uchar* data, cairo_format_t format, int width, int height, int stride ) ; -: cairo_fill_extents ( cairo_t x1 y1 x2 y2 -- ) - "void" "cairo" "cairo_fill_extents" [ "cairo_t*" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: uchar* +cairo_image_surface_get_data ( cairo_surface_t* surface ) ; -! clipping -: cairo_reset_clip ( cairo_t -- ) - "void" "cairo" "cairo_reset_clip" [ "cairo_t*" ] alien-invoke ; +FUNCTION: cairo_format_t +cairo_image_surface_get_format ( cairo_surface_t* surface ) ; -: cairo_clip ( cairo_t -- ) - "void" "cairo" "cairo_clip" [ "cairo_t*" ] alien-invoke ; +FUNCTION: int +cairo_image_surface_get_width ( cairo_surface_t* surface ) ; -: cairo_clip_preserve ( cairo_t -- ) - "void" "cairo" "cairo_clip_preserve" [ "cairo_t*" ] alien-invoke ; +FUNCTION: int +cairo_image_surface_get_height ( cairo_surface_t* surface ) ; +FUNCTION: int +cairo_image_surface_get_stride ( cairo_surface_t* surface ) ; -: cairo_pattern_create_linear ( x0 y0 x1 y1 -- cairo_pattern_t ) - "void*" "cairo" "cairo_pattern_create_linear" [ "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: cairo_surface_t* +cairo_image_surface_create_from_png ( char* filename ) ; -: cairo_pattern_create_radial ( cx0 cy0 radius0 cx1 cy1 radius1 -- cairo_pattern_t ) - "void*" "cairo" "cairo_pattern_create_radial" [ "double" "double" "double" "double" "double" "double" ] alien-invoke ; +FUNCTION: cairo_surface_t* +cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure ) ; -: cairo_pattern_add_color_stop_rgba ( pattern offset red green blue alpha -- status ) - "uint" "cairo" "cairo_pattern_add_color_stop_rgba" [ "void*" "double" "double" "double" "double" "double" ] alien-invoke ; +! Pattern creation functions -: cairo_show_text ( cairo_t msg_utf8 -- ) - "void" "cairo" "cairo_show_text" [ "cairo_t*" "char*" ] alien-invoke ; +FUNCTION: cairo_pattern_t* +cairo_pattern_create_rgb ( double red, double green, double blue ) ; -: cairo_text_path ( cairo_t msg_utf8 -- ) - "void" "cairo" "cairo_text_path" [ "cairo_t*" "char*" ] alien-invoke ; +FUNCTION: cairo_pattern_t* +cairo_pattern_create_rgba ( double red, double green, double blue, double alpha ) ; -: cairo_select_font_face ( cairo_t family font_slant font_weight -- ) - "void" "cairo" "cairo_select_font_face" [ "cairo_t*" "char*" "uint" "uint" ] alien-invoke ; +FUNCTION: cairo_pattern_t* +cairo_pattern_create_for_surface ( cairo_surface_t* surface ) ; -: cairo_set_font_size ( cairo_t scale -- ) - "void" "cairo" "cairo_set_font_size" [ "cairo_t*" "double" ] alien-invoke ; +FUNCTION: cairo_pattern_t* +cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 ) ; -: cairo_set_font_matrix ( cairo_t cairo_matrix_t -- ) - "void" "cairo" "cairo_set_font_matrix" [ "cairo_t*" "cairo_matrix_t*" ] alien-invoke ; +FUNCTION: cairo_pattern_t* +cairo_pattern_create_radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 ) ; -: cairo_get_font_matrix ( cairo_t cairo_matrix_t -- ) - "void" "cairo" "cairo_get_font_matrix" [ "cairo_t*" "cairo_matrix_t*" ] alien-invoke ; +FUNCTION: cairo_pattern_t* +cairo_pattern_reference ( cairo_pattern_t* pattern ) ; -FUNCTION: uchar* cairo_image_surface_get_data ( cairo_surface_t* surface ) ; -FUNCTION: cairo_format_t cairo_image_surface_get_format ( cairo_surface_t* surface ) ; -FUNCTION: int cairo_image_surface_get_width ( cairo_surface_t* surface ) ; -FUNCTION: int cairo_image_surface_get_height ( cairo_surface_t* surface ) ; -FUNCTION: int cairo_image_surface_get_stride ( cairo_surface_t* surface ) ; +FUNCTION: void +cairo_pattern_destroy ( cairo_pattern_t* pattern ) ; -! Cairo pdf +FUNCTION: uint +cairo_pattern_get_reference_count ( cairo_pattern_t* pattern ) ; -: cairo_pdf_surface_create ( filename width height -- surface ) - "void*" "cairo" "cairo_pdf_surface_create" [ "char*" "double" "double" ] alien-invoke ; +FUNCTION: cairo_status_t +cairo_pattern_status ( cairo_pattern_t* pattern ) ; -! Missing: +FUNCTION: void* +cairo_pattern_get_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key ) ; -! cairo_public cairo_surface_t * -! cairo_pdf_surface_create_for_stream (cairo_write_func_t write_func, -! void *closure, -! double width_in_points, -! double height_in_points); +FUNCTION: cairo_status_t +cairo_pattern_set_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ; -: cairo_pdf_surface_set_size ( surface width height -- ) - "void" "cairo" "cairo_pdf_surface_set_size" [ "void*" "double" "double" ] alien-invoke ; +TYPEDEF: int cairo_pattern_type_t +C-ENUM: + CAIRO_PATTERN_TYPE_SOLID + CAIRO_PATTERN_TYPE_SURFACE + CAIRO_PATTERN_TYPE_LINEAR + CAIRO_PATTERN_TYPE_RADIA ; -! Cairo png +FUNCTION: cairo_pattern_type_t +cairo_pattern_get_type ( cairo_pattern_t* pattern ) ; -TYPEDEF: void* cairo_write_func_t -TYPEDEF: void* cairo_read_func_t +FUNCTION: void +cairo_pattern_add_color_stop_rgb ( cairo_pattern_t* pattern, double offset, double red, double green, double blue ) ; + +FUNCTION: void +cairo_pattern_add_color_stop_rgba ( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha ) ; + +FUNCTION: void +cairo_pattern_set_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ; + +FUNCTION: void +cairo_pattern_get_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ; + +TYPEDEF: int cairo_extend_t +C-ENUM: + CAIRO_EXTEND_NONE + CAIRO_EXTEND_REPEAT + CAIRO_EXTEND_REFLECT + CAIRO_EXTEND_PAD ; + +FUNCTION: void +cairo_pattern_set_extend ( cairo_pattern_t* pattern, cairo_extend_t extend ) ; + +FUNCTION: cairo_extend_t +cairo_pattern_get_extend ( cairo_pattern_t* pattern ) ; + +TYPEDEF: int cairo_filter_t +C-ENUM: + CAIRO_FILTER_FAST + CAIRO_FILTER_GOOD + CAIRO_FILTER_BEST + CAIRO_FILTER_NEAREST + CAIRO_FILTER_BILINEAR + CAIRO_FILTER_GAUSSIAN ; + +FUNCTION: void +cairo_pattern_set_filter ( cairo_pattern_t* pattern, cairo_filter_t filter ) ; + +FUNCTION: cairo_filter_t +cairo_pattern_get_filter ( cairo_pattern_t* pattern ) ; + +FUNCTION: cairo_status_t +cairo_pattern_get_rgba ( cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha ) ; + +FUNCTION: cairo_status_t +cairo_pattern_get_surface ( cairo_pattern_t* pattern, cairo_surface_t* *surface ) ; + +FUNCTION: cairo_status_t +cairo_pattern_get_color_stop_rgba ( cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha ) ; + +FUNCTION: cairo_status_t +cairo_pattern_get_color_stop_count ( cairo_pattern_t* pattern, int* count ) ; + +FUNCTION: cairo_status_t +cairo_pattern_get_linear_points ( cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1 ) ; + +FUNCTION: cairo_status_t +cairo_pattern_get_radial_circles ( cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1 ) ; + +! Matrix functions + +FUNCTION: void +cairo_matrix_init ( cairo_matrix_t* matrix, double xx, double yx, double xy, double yy, double x0, double y0 ) ; + +FUNCTION: void +cairo_matrix_init_identity ( cairo_matrix_t* matrix ) ; + +FUNCTION: void +cairo_matrix_init_translate ( cairo_matrix_t* matrix, double tx, double ty ) ; + +FUNCTION: void +cairo_matrix_init_scale ( cairo_matrix_t* matrix, double sx, double sy ) ; + +FUNCTION: void +cairo_matrix_init_rotate ( cairo_matrix_t* matrix, double radians ) ; + +FUNCTION: void +cairo_matrix_translate ( cairo_matrix_t* matrix, double tx, double ty ) ; + +FUNCTION: void +cairo_matrix_scale ( cairo_matrix_t* matrix, double sx, double sy ) ; + +FUNCTION: void +cairo_matrix_rotate ( cairo_matrix_t* matrix, double radians ) ; + +FUNCTION: cairo_status_t +cairo_matrix_invert ( cairo_matrix_t* matrix ) ; -FUNCTION: cairo_surface_t* cairo_image_surface_create_from_png ( char* filename ) ; +FUNCTION: void +cairo_matrix_multiply ( cairo_matrix_t* result, cairo_matrix_t* a, cairo_matrix_t* b ) ; -FUNCTION: cairo_surface_t* cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure ) ; +FUNCTION: void +cairo_matrix_transform_distance ( cairo_matrix_t* matrix, double* dx, double* dy ) ; -FUNCTION: cairo_status_t cairo_surface_write_to_png ( cairo_surface_t* surface, char* filename ) ; +FUNCTION: void +cairo_matrix_transform_point ( cairo_matrix_t* matrix, double* x, double* y ) ; -FUNCTION: cairo_status_t cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ; +! Functions to be used while debugging (not intended for use in production code) +FUNCTION: void +cairo_debug_reset_static_data ( ) ; diff --git a/extra/cairo/lib/lib.factor b/extra/cairo/lib/lib.factor deleted file mode 100755 index c9700e82c0..0000000000 --- a/extra/cairo/lib/lib.factor +++ /dev/null @@ -1,36 +0,0 @@ -! Copyright (C) 2008 Doug Coleman. -! See http://factorcode.org/license.txt for BSD license. -USING: cairo kernel accessors sequences -namespaces fry continuations ; -IN: cairo.lib - -TUPLE: cairo-t alien ; -C: cairo-t -M: cairo-t dispose ( alien -- ) alien>> cairo_destroy ; - -TUPLE: cairo-surface-t alien ; -C: 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 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 r> [ (with-surface) ] curry with-disposal ; inline - -: with-cairo-from-surface ( cairo_surface quot -- ) - '[ cairo_create , with-cairo ] with-surface ; inline -- 2.34.1