diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-25 00:59:31 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-25 10:35:42 +0000 |
commit | 8844d50308e03e7eb1d6e1530bb4bd98be490cea (patch) | |
tree | 655923fadb907cc692a02d8a4a452e8e3774a225 /src/cairo-pattern-private.h | |
parent | 2c4f6bbfbcaacea41386c36f42210120ee815055 (diff) | |
download | cairo-8844d50308e03e7eb1d6e1530bb4bd98be490cea.tar.gz |
Convert cairo_mime_surface_t to cairo_raster_source_pattern_t
As discussed, overloading the cairo_surface_t semantics to include
sources (i.e. read-only surfaces) was duplicating the definition of
cairo_pattern_t. So rather than introduce a new surface type with
pattern semantics, start along the thorny road of extensible pattern
types.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-pattern-private.h')
-rw-r--r-- | src/cairo-pattern-private.h | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/cairo-pattern-private.h b/src/cairo-pattern-private.h index 8be319e13..9b2f875e8 100644 --- a/src/cairo-pattern-private.h +++ b/src/cairo-pattern-private.h @@ -167,6 +167,22 @@ typedef struct _cairo_mesh_pattern { cairo_bool_t has_color[4]; } cairo_mesh_pattern_t; +typedef struct _cairo_raster_source_pattern { + cairo_pattern_t base; + + cairo_content_t content; + cairo_rectangle_int_t extents; + + cairo_raster_source_acquire_func_t acquire; + cairo_raster_source_release_func_t release; + cairo_raster_source_snapshot_func_t snapshot; + cairo_raster_source_copy_func_t copy; + cairo_raster_source_finish_func_t finish; + + /* an explicit pre-allocated member in preference to the general user-data */ + void *user_data; +} cairo_raster_source_pattern_t; + typedef union { cairo_pattern_t base; @@ -174,9 +190,9 @@ typedef union { cairo_surface_pattern_t surface; cairo_gradient_pattern_union_t gradient; cairo_mesh_pattern_t mesh; + cairo_raster_source_pattern_t raster_source; } cairo_pattern_union_t; - /* cairo-pattern.c */ cairo_private cairo_pattern_t * @@ -186,6 +202,10 @@ cairo_private cairo_status_t _cairo_pattern_create_copy (cairo_pattern_t **pattern, const cairo_pattern_t *other); +cairo_private void +_cairo_pattern_init (cairo_pattern_t *pattern, + cairo_pattern_type_t type); + cairo_private cairo_status_t _cairo_pattern_init_copy (cairo_pattern_t *pattern, const cairo_pattern_t *other); @@ -328,6 +348,25 @@ _cairo_mesh_pattern_rasterize (const cairo_mesh_pattern_t *mesh, double x_offset, double y_offset); +cairo_private cairo_surface_t * +_cairo_raster_source_pattern_acquire (const cairo_pattern_t *abstract_pattern, + cairo_surface_t *target, + const cairo_rectangle_int_t *extents); + +cairo_private void +_cairo_raster_source_pattern_release (const cairo_pattern_t *abstract_pattern, + cairo_surface_t *surface); + +cairo_private cairo_status_t +_cairo_raster_source_pattern_snapshot (cairo_pattern_t *abstract_pattern); + +cairo_private cairo_status_t +_cairo_raster_source_pattern_init_copy (cairo_pattern_t *pattern, + const cairo_pattern_t *other); + +cairo_private void +_cairo_raster_source_pattern_finish (cairo_pattern_t *abstract_pattern); + cairo_private void _cairo_debug_print_pattern (FILE *file, const cairo_pattern_t *pattern); |