
// Pattern:

namespace Pattern {

[[static]] cairo_pattern_t * cairo_pattern_create_rgb (double red, double green, double blue);
[[static]] cairo_pattern_t * cairo_pattern_create_rgba (double red, double green, double blue, double alpha);
[[static]] [[returns(wrap:RadialPattern)]] cairo_pattern_t * cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
[[static]] [[returns(wrap:MeshPattern)]] cairo_pattern_t * cairo_pattern_create_mesh ();
[[static]] [[returns(wrap:LinearPattern)]] cairo_pattern_t * cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
[[static]] cairo_pattern_t * cairo_pattern_create_for_surface (cairo_surface_t *surface);

void cairo_pattern_add_color_stop_rgb (cairo_pattern_t *pattern, double offset, double red, double green, double blue);
void cairo_pattern_add_color_stop_rgba (cairo_pattern_t *pattern, double offset, double red, double green, double blue, double alpha);
[[throws]] cairo_status_t cairo_pattern_get_color_stop_count (cairo_pattern_t *pattern, [[out]] int *count);
[[throws]] cairo_status_t cairo_pattern_get_color_stop_rgba (cairo_pattern_t *pattern, int index, [[out]] double *offset, [[out]] double *red, [[out]] double *green, [[out]] double *blue, [[out]] double *alpha);
[[throws]] cairo_status_t cairo_pattern_get_rgba (cairo_pattern_t *pattern, [[out]] double *red, [[out]] double *green, [[out]] double *blue, [[out]] double *alpha);
/* cairo_status_t cairo_pattern_get_surface (cairo_pattern_t *pattern, [[out]] cairo_surface_t **surface); */

/* cairo_pattern_t * cairo_pattern_reference (cairo_pattern_t *pattern); */
/* void cairo_pattern_destroy (cairo_pattern_t *pattern); */
cairo_status_t cairo_pattern_status (cairo_pattern_t *pattern);
void cairo_pattern_set_extend (cairo_pattern_t *pattern, cairo_extend_t extend);
cairo_extend_t cairo_pattern_get_extend (cairo_pattern_t *pattern);
void cairo_pattern_set_filter (cairo_pattern_t *pattern, cairo_filter_t filter);
cairo_filter_t cairo_pattern_get_filter (cairo_pattern_t *pattern);
void cairo_pattern_set_matrix (cairo_pattern_t *pattern, const cairo_matrix_t *matrix);
void cairo_pattern_get_matrix (cairo_pattern_t *pattern, [[out]] cairo_matrix_t *matrix);
cairo_pattern_type_t cairo_pattern_get_type (cairo_pattern_t *pattern);
unsigned int cairo_pattern_get_reference_count (cairo_pattern_t *pattern);
/* cairo_status_t cairo_pattern_set_user_data (cairo_pattern_t *pattern, const cairo_user_data_key_t *key, void *user_data, cairo_destroy_func_t destroy); */
/* void * cairo_pattern_get_user_data (cairo_pattern_t *pattern, const cairo_user_data_key_t *key); */
/* typedef struct _cairo_pattern cairo_pattern_t; */

}

// Pattern > LinearPattern:

namespace LinearPattern {

[[throws]] cairo_status_t cairo_pattern_get_linear_points (cairo_pattern_t *pattern, [[out]] double *x0, [[out]] double *y0, [[out]] double *x1, [[out]] double *y1);

}

// Pattern > RadialPattern:

namespace RadialPattern {

[[throws]] cairo_status_t cairo_pattern_get_radial_circles (cairo_pattern_t *pattern, [[out]] double *x0, [[out]] double *y0, [[out]] double *r0, [[out]] double *x1, [[out]] double *y1, [[out]] double *r1);

}

// Pattern > MeshPattern:

namespace MeshPattern {

void cairo_mesh_pattern_begin_patch (cairo_pattern_t *pattern);
void cairo_mesh_pattern_end_patch (cairo_pattern_t *pattern);
void cairo_mesh_pattern_move_to (cairo_pattern_t *pattern, double x, double y);
void cairo_mesh_pattern_line_to (cairo_pattern_t *pattern, double x, double y);
void cairo_mesh_pattern_curve_to (cairo_pattern_t *pattern, double x1, double y1, double x2, double y2, double x3, double y3);
void cairo_mesh_pattern_set_control_point (cairo_pattern_t *pattern, unsigned int point_num, double x, double y);
void cairo_mesh_pattern_set_corner_color_rgb (cairo_pattern_t *pattern, unsigned int corner_num, double red, double green, double blue);
void cairo_mesh_pattern_set_corner_color_rgba (cairo_pattern_t *pattern, unsigned int corner_num, double red, double green, double blue, double alpha);
[[throws]] cairo_status_t cairo_mesh_pattern_get_patch_count (cairo_pattern_t *pattern, [[out]] unsigned int *count);
cairo_path_t * cairo_mesh_pattern_get_path (cairo_pattern_t *pattern, unsigned int patch_num);
[[throws]] cairo_status_t cairo_mesh_pattern_get_control_point (cairo_pattern_t *pattern, unsigned int patch_num, unsigned int point_num, [[out]] double *x, [[out]] double *y);
[[throws]] cairo_status_t cairo_mesh_pattern_get_corner_color_rgba (cairo_pattern_t *pattern, unsigned int patch_num, unsigned int corner_num, [[out]] double *red, [[out]] double *green, [[out]] double *blue, [[out]] double *alpha);

}

// Pattern > RasterSourcePattern:

/* namespace RasterSourcePattern {
 *
 * cairo_pattern_t * cairo_pattern_create_raster_source (void *user_data, cairo_content_t content, int width, int height);
 * void cairo_raster_source_pattern_set_callback_data (cairo_pattern_t *pattern, void *data);
 * void * cairo_raster_source_pattern_get_callback_data (cairo_pattern_t *pattern);
 * void cairo_raster_source_pattern_set_acquire (cairo_pattern_t *pattern, cairo_raster_source_acquire_func_t acquire, cairo_raster_source_release_func_t release);
 * void cairo_raster_source_pattern_get_acquire (cairo_pattern_t *pattern, cairo_raster_source_acquire_func_t *acquire, cairo_raster_source_release_func_t *release);
 * void cairo_raster_source_pattern_set_snapshot (cairo_pattern_t *pattern, cairo_raster_source_snapshot_func_t snapshot);
 * cairo_raster_source_snapshot_func_t cairo_raster_source_pattern_get_snapshot (cairo_pattern_t *pattern);
 * void cairo_raster_source_pattern_set_copy (cairo_pattern_t *pattern, cairo_raster_source_copy_func_t copy);
 * cairo_raster_source_copy_func_t cairo_raster_source_pattern_get_copy (cairo_pattern_t *pattern);
 * void cairo_raster_source_pattern_set_finish (cairo_pattern_t *pattern, cairo_raster_source_finish_func_t finish);
 * cairo_raster_source_finish_func_t cairo_raster_source_pattern_get_finish (cairo_pattern_t *pattern);
 * cairo_surface_t (*cairo_raster_source_acquire_func_t) (cairo_pattern_t *pattern, void *callback_data, cairo_surface_t *target, const cairo_rectangle_int_t *extents);
 * void (*cairo_raster_source_release_func_t) (cairo_pattern_t *pattern, void *callback_data, cairo_surface_t *surface);
 * cairo_status_t (*cairo_raster_source_snapshot_func_t) (cairo_pattern_t *pattern, void *callback_data);
 * cairo_status_t (*cairo_raster_source_copy_func_t) (cairo_pattern_t *pattern, void *callback_data, const cairo_pattern_t *other);
 * void (*cairo_raster_source_finish_func_t) (cairo_pattern_t *pattern, void *callback_data);
 *
 * } */

// vim: ft=c
