From 1bcc3a3fa00445667adc47d4852237271c7eec0f Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 1 Sep 2009 14:24:06 +0100 Subject: [tee] Rename 'append' to 'add' and add symmetric 'remove' --- src/cairo-tee-surface.c | 51 ++++++++++++++++++++++++++++++++++++++++++++----- src/cairo.h | 8 ++++++-- 2 files changed, 52 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/cairo-tee-surface.c b/src/cairo-tee-surface.c index 0a7842f7..56f3cc26 100644 --- a/src/cairo-tee-surface.c +++ b/src/cairo-tee-surface.c @@ -51,7 +51,7 @@ typedef struct _cairo_tee_surface { } cairo_tee_surface_t; slim_hidden_proto (cairo_tee_surface_create); -slim_hidden_proto (cairo_tee_surface_append); +slim_hidden_proto (cairo_tee_surface_add); static cairo_surface_t * _cairo_tee_surface_create_similar (void *abstract_surface, @@ -80,7 +80,7 @@ _cairo_tee_surface_create_similar (void *abstract_surface, similar = _cairo_surface_wrapper_create_similar (&slaves[n], content, width, height); - cairo_tee_surface_append (surface, similar); + cairo_tee_surface_add (surface, similar); cairo_surface_destroy (similar); } @@ -457,8 +457,8 @@ cairo_tee_surface_create (cairo_surface_t *master) slim_hidden_def (cairo_tee_surface_create); void -cairo_tee_surface_append (cairo_surface_t *abstract_surface, - cairo_surface_t *target) +cairo_tee_surface_add (cairo_surface_t *abstract_surface, + cairo_surface_t *target) { cairo_tee_surface_t *surface; cairo_surface_wrapper_t slave; @@ -487,7 +487,48 @@ cairo_tee_surface_append (cairo_surface_t *abstract_surface, status = _cairo_surface_set_error (&surface->base, status); } } -slim_hidden_def (cairo_tee_surface_append); +slim_hidden_def (cairo_tee_surface_add); + +void +cairo_tee_surface_remove (cairo_surface_t *abstract_surface, + cairo_surface_t *target) +{ + cairo_tee_surface_t *surface; + cairo_surface_wrapper_t *slaves; + int n, num_slaves; + cairo_status_t status; + + if (abstract_surface->backend != &cairo_tee_surface_backend) { + status = _cairo_surface_set_error (abstract_surface, + _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH)); + return; + } + + surface = (cairo_tee_surface_t *) abstract_surface; + if (target == surface->master.target) { + status = _cairo_surface_set_error (abstract_surface, + _cairo_error (CAIRO_STATUS_INVALID_INDEX)); + return; + } + + num_slaves = _cairo_array_num_elements (&surface->slaves); + slaves = _cairo_array_index (&surface->slaves, 0); + for (n = 0; n < num_slaves; n++) { + if (slaves[n].target == target) + break; + } + + if (n == num_slaves) { + status = _cairo_surface_set_error (abstract_surface, + _cairo_error (CAIRO_STATUS_INVALID_INDEX)); + return; + } + + _cairo_surface_wrapper_fini (&slaves[n]); + for (n++; n < num_slaves; n++) + slaves[n-1] = slaves[n]; + surface->slaves.num_elements--; /* XXX: cairo_array_remove()? */ +} cairo_surface_t * cairo_tee_surface_index (cairo_surface_t *abstract_surface, diff --git a/src/cairo.h b/src/cairo.h index a046a471..3b5eb36e 100644 --- a/src/cairo.h +++ b/src/cairo.h @@ -2199,11 +2199,15 @@ cairo_public cairo_surface_t * cairo_tee_surface_create (cairo_surface_t *master); cairo_public void -cairo_tee_surface_append (cairo_surface_t *surface, +cairo_tee_surface_add (cairo_surface_t *surface, + cairo_surface_t *target); + +cairo_public void +cairo_tee_surface_remove (cairo_surface_t *surface, cairo_surface_t *target); cairo_public cairo_surface_t * -cairo_tee_surface_index (cairo_surface_t *abstract_surface, +cairo_tee_surface_index (cairo_surface_t *surface, int index); /* Pattern creation functions */ -- cgit v1.2.3