summaryrefslogtreecommitdiff
path: root/src/cairo-pattern-private.h
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-11-25 00:59:31 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2011-11-25 10:35:42 +0000
commit8844d50308e03e7eb1d6e1530bb4bd98be490cea (patch)
tree655923fadb907cc692a02d8a4a452e8e3774a225 /src/cairo-pattern-private.h
parent2c4f6bbfbcaacea41386c36f42210120ee815055 (diff)
downloadcairo-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.h41
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);