michael@0: diff --git a/gfx/cairo/cairo/src/cairo-analysis-surface-private.h b/gfx/cairo/cairo/src/cairo-analysis-surface-private.h michael@0: --- a/gfx/cairo/cairo/src/cairo-analysis-surface-private.h michael@0: +++ b/gfx/cairo/cairo/src/cairo-analysis-surface-private.h michael@0: @@ -65,14 +65,11 @@ _cairo_analysis_surface_has_unsupported michael@0: cairo_private void michael@0: _cairo_analysis_surface_get_bounding_box (cairo_surface_t *surface, michael@0: cairo_box_t *bbox); michael@0: michael@0: cairo_private cairo_int_status_t michael@0: _cairo_analysis_surface_merge_status (cairo_int_status_t status_a, michael@0: cairo_int_status_t status_b); michael@0: michael@0: -cairo_private cairo_surface_t * michael@0: -_cairo_null_surface_create (cairo_content_t content); michael@0: - michael@0: CAIRO_END_DECLS michael@0: michael@0: #endif /* CAIRO_ANALYSIS_SURFACE_H */ michael@0: diff --git a/gfx/cairo/cairo/src/cairo-analysis-surface.c b/gfx/cairo/cairo/src/cairo-analysis-surface.c michael@0: --- a/gfx/cairo/cairo/src/cairo-analysis-surface.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-analysis-surface.c michael@0: @@ -902,17 +902,17 @@ static const cairo_surface_backend_t cai michael@0: NULL, /* fill_stroke */ michael@0: NULL, /* create_solid_pattern_surface */ michael@0: NULL, /* can_repaint_solid_pattern_surface */ michael@0: NULL, /* has_show_text_glyphs */ michael@0: NULL /* show_text_glyphs */ michael@0: }; michael@0: michael@0: cairo_surface_t * michael@0: -_cairo_null_surface_create (cairo_content_t content) michael@0: +cairo_null_surface_create (cairo_content_t content) michael@0: { michael@0: cairo_surface_t *surface; michael@0: michael@0: surface = malloc (sizeof (cairo_surface_t)); michael@0: if (unlikely (surface == NULL)) { michael@0: return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); michael@0: } michael@0: michael@0: diff --git a/gfx/cairo/cairo/src/cairo-d2d-surface.cpp b/gfx/cairo/cairo/src/cairo-d2d-surface.cpp michael@0: --- a/gfx/cairo/cairo/src/cairo-d2d-surface.cpp michael@0: +++ b/gfx/cairo/cairo/src/cairo-d2d-surface.cpp michael@0: @@ -1951,24 +1951,24 @@ _cairo_d2d_create_brush_for_pattern(cair michael@0: rect = D2D1::RectU(1, 1, srcSurf->width + 1, srcSurf->height + 1); michael@0: } else { michael@0: rect = D2D1::RectU(0, 0, srcSurf->width, srcSurf->height); michael@0: } michael@0: sourceBitmap->CopyFromMemory(&rect, michael@0: srcSurf->data, michael@0: srcSurf->stride); michael@0: cairo_surface_t *nullSurf = michael@0: - _cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA); michael@0: + cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA); michael@0: cachebitmap->refs++; michael@0: cachebitmap->dirty = false; michael@0: cairo_surface_set_user_data(nullSurf, michael@0: &bitmap_key_snapshot, michael@0: cachebitmap, michael@0: NULL); michael@0: - _cairo_surface_attach_snapshot(surfacePattern->surface, michael@0: + cairo_surface_attach_snapshot(surfacePattern->surface, michael@0: nullSurf, michael@0: _d2d_snapshot_detached); michael@0: } michael@0: } else { michael@0: if (pattern->extend != CAIRO_EXTEND_NONE) { michael@0: d2dsurf->rt->CreateBitmap(D2D1::SizeU(width, height), michael@0: data + yoffset * stride + xoffset * Bpp, michael@0: stride, michael@0: @@ -2015,22 +2015,22 @@ _cairo_d2d_create_brush_for_pattern(cair michael@0: * and one more in the user data structure. michael@0: */ michael@0: cachebitmap->refs = 2; michael@0: cairo_surface_set_user_data(surfacePattern->surface, michael@0: key, michael@0: cachebitmap, michael@0: _d2d_release_bitmap); michael@0: cairo_surface_t *nullSurf = michael@0: - _cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA); michael@0: + cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA); michael@0: cairo_surface_set_user_data(nullSurf, michael@0: &bitmap_key_snapshot, michael@0: cachebitmap, michael@0: NULL); michael@0: - _cairo_surface_attach_snapshot(surfacePattern->surface, michael@0: + cairo_surface_attach_snapshot(surfacePattern->surface, michael@0: nullSurf, michael@0: _d2d_snapshot_detached); michael@0: cache_usage += _d2d_compute_bitmap_mem_size(sourceBitmap); michael@0: } michael@0: if (pix_image) { michael@0: pixman_image_unref(pix_image); michael@0: } michael@0: } michael@0: diff --git a/gfx/cairo/cairo/src/cairo-recording-surface.c b/gfx/cairo/cairo/src/cairo-recording-surface.c michael@0: --- a/gfx/cairo/cairo/src/cairo-recording-surface.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-recording-surface.c michael@0: @@ -276,17 +276,17 @@ _cairo_recording_surface_acquire_source_ michael@0: -surface->extents.y); michael@0: michael@0: status = _cairo_recording_surface_replay (&surface->base, image); michael@0: if (unlikely (status)) { michael@0: cairo_surface_destroy (image); michael@0: return status; michael@0: } michael@0: michael@0: - _cairo_surface_attach_snapshot (&surface->base, image, NULL); michael@0: + cairo_surface_attach_snapshot (&surface->base, image, NULL); michael@0: michael@0: *image_out = (cairo_image_surface_t *) image; michael@0: *image_extra = NULL; michael@0: return CAIRO_STATUS_SUCCESS; michael@0: } michael@0: michael@0: static void michael@0: _cairo_recording_surface_release_source_image (void *abstract_surface, michael@0: @@ -1046,17 +1046,17 @@ static cairo_status_t michael@0: _recording_surface_get_ink_bbox (cairo_recording_surface_t *surface, michael@0: cairo_box_t *bbox, michael@0: const cairo_matrix_t *transform) michael@0: { michael@0: cairo_surface_t *null_surface; michael@0: cairo_surface_t *analysis_surface; michael@0: cairo_status_t status; michael@0: michael@0: - null_surface = _cairo_null_surface_create (surface->content); michael@0: + null_surface = cairo_null_surface_create (surface->content); michael@0: analysis_surface = _cairo_analysis_surface_create (null_surface); michael@0: cairo_surface_destroy (null_surface); michael@0: michael@0: status = analysis_surface->status; michael@0: if (unlikely (status)) michael@0: return status; michael@0: michael@0: if (transform != NULL) michael@0: diff --git a/gfx/cairo/cairo/src/cairo-surface-private.h b/gfx/cairo/cairo/src/cairo-surface-private.h michael@0: --- a/gfx/cairo/cairo/src/cairo-surface-private.h michael@0: +++ b/gfx/cairo/cairo/src/cairo-surface-private.h michael@0: @@ -40,18 +40,16 @@ michael@0: michael@0: #include "cairo.h" michael@0: michael@0: #include "cairo-types-private.h" michael@0: #include "cairo-list-private.h" michael@0: #include "cairo-reference-count-private.h" michael@0: #include "cairo-clip-private.h" michael@0: michael@0: -typedef void (*cairo_surface_func_t) (cairo_surface_t *); michael@0: - michael@0: struct _cairo_surface { michael@0: const cairo_surface_backend_t *backend; michael@0: cairo_device_t *device; michael@0: michael@0: /* We allow surfaces to override the backend->type by shoving something michael@0: * else into surface->type. This is for "wrapper" surfaces that want to michael@0: * hide their internal type from the user-level API. */ michael@0: cairo_surface_type_t type; michael@0: diff --git a/gfx/cairo/cairo/src/cairo-surface-snapshot.c b/gfx/cairo/cairo/src/cairo-surface-snapshot.c michael@0: --- a/gfx/cairo/cairo/src/cairo-surface-snapshot.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-surface-snapshot.c michael@0: @@ -209,17 +209,17 @@ _cairo_surface_snapshot (cairo_surface_t michael@0: if (unlikely (status)) { michael@0: cairo_surface_destroy (snap); michael@0: return _cairo_surface_create_in_error (status); michael@0: } michael@0: michael@0: snap->device_transform = surface->device_transform; michael@0: snap->device_transform_inverse = surface->device_transform_inverse; michael@0: michael@0: - _cairo_surface_attach_snapshot (surface, snap, NULL); michael@0: + cairo_surface_attach_snapshot (surface, snap, NULL); michael@0: michael@0: return snap; michael@0: } michael@0: } michael@0: michael@0: snapshot = (cairo_surface_snapshot_t *) michael@0: _cairo_surface_has_snapshot (surface, &_cairo_surface_snapshot_backend); michael@0: if (snapshot != NULL) michael@0: @@ -242,14 +242,14 @@ _cairo_surface_snapshot (cairo_surface_t michael@0: if (unlikely (status)) { michael@0: cairo_surface_destroy (&snapshot->base); michael@0: return _cairo_surface_create_in_error (status); michael@0: } michael@0: michael@0: snapshot->base.device_transform = surface->device_transform; michael@0: snapshot->base.device_transform_inverse = surface->device_transform_inverse; michael@0: michael@0: - _cairo_surface_attach_snapshot (surface, michael@0: + cairo_surface_attach_snapshot (surface, michael@0: &snapshot->base, michael@0: _cairo_surface_snapshot_copy_on_write); michael@0: michael@0: return &snapshot->base; michael@0: } michael@0: diff --git a/gfx/cairo/cairo/src/cairo-surface-subsurface.c b/gfx/cairo/cairo/src/cairo-surface-subsurface.c michael@0: --- a/gfx/cairo/cairo/src/cairo-surface-subsurface.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-surface-subsurface.c michael@0: @@ -326,17 +326,17 @@ _cairo_surface_subsurface_acquire_source michael@0: _cairo_image_surface_create_with_content (meta->content, michael@0: surface->extents.width, michael@0: surface->extents.height); michael@0: if (unlikely (image->base.status)) michael@0: return image->base.status; michael@0: michael@0: cairo_surface_paint_to_target (&image->base, surface); michael@0: michael@0: - _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); michael@0: + cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); michael@0: michael@0: *image_out = image; michael@0: *extra_out = NULL; michael@0: return CAIRO_STATUS_SUCCESS; michael@0: } michael@0: } michael@0: michael@0: extra = malloc (sizeof (struct extra)); michael@0: diff --git a/gfx/cairo/cairo/src/cairo-surface.c b/gfx/cairo/cairo/src/cairo-surface.c michael@0: --- a/gfx/cairo/cairo/src/cairo-surface.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-surface.c michael@0: @@ -305,51 +305,51 @@ _cairo_surface_detach_mime_data (cairo_s michael@0: if (! _cairo_surface_has_mime_data (surface)) michael@0: return; michael@0: michael@0: _cairo_user_data_array_fini (&surface->mime_data); michael@0: _cairo_user_data_array_init (&surface->mime_data); michael@0: } michael@0: michael@0: static void michael@0: -_cairo_surface_detach_snapshots (cairo_surface_t *surface) michael@0: +cairo_surface_detach_snapshots (cairo_surface_t *surface) michael@0: { michael@0: while (_cairo_surface_has_snapshots (surface)) { michael@0: - _cairo_surface_detach_snapshot (cairo_list_first_entry (&surface->snapshots, michael@0: + cairo_surface_detach_snapshot (cairo_list_first_entry (&surface->snapshots, michael@0: cairo_surface_t, michael@0: snapshot)); michael@0: } michael@0: } michael@0: michael@0: void michael@0: -_cairo_surface_detach_snapshot (cairo_surface_t *snapshot) michael@0: +cairo_surface_detach_snapshot (cairo_surface_t *snapshot) michael@0: { michael@0: assert (snapshot->snapshot_of != NULL); michael@0: michael@0: snapshot->snapshot_of = NULL; michael@0: cairo_list_del (&snapshot->snapshot); michael@0: michael@0: if (snapshot->snapshot_detach != NULL) michael@0: snapshot->snapshot_detach (snapshot); michael@0: michael@0: cairo_surface_destroy (snapshot); michael@0: } michael@0: michael@0: void michael@0: -_cairo_surface_attach_snapshot (cairo_surface_t *surface, michael@0: +cairo_surface_attach_snapshot (cairo_surface_t *surface, michael@0: cairo_surface_t *snapshot, michael@0: cairo_surface_func_t detach_func) michael@0: { michael@0: assert (surface != snapshot); michael@0: assert (snapshot->snapshot_of != surface); michael@0: michael@0: cairo_surface_reference (snapshot); michael@0: michael@0: if (snapshot->snapshot_of != NULL) michael@0: - _cairo_surface_detach_snapshot (snapshot); michael@0: + cairo_surface_detach_snapshot (snapshot); michael@0: michael@0: snapshot->snapshot_of = surface; michael@0: snapshot->snapshot_detach = detach_func; michael@0: michael@0: cairo_list_add (&snapshot->snapshot, &surface->snapshots); michael@0: michael@0: assert (_cairo_surface_has_snapshot (surface, snapshot->backend) == snapshot); michael@0: } michael@0: @@ -382,17 +382,17 @@ _cairo_surface_is_writable (cairo_surfac michael@0: michael@0: static void michael@0: _cairo_surface_begin_modification (cairo_surface_t *surface) michael@0: { michael@0: assert (surface->status == CAIRO_STATUS_SUCCESS); michael@0: assert (! surface->finished); michael@0: assert (surface->snapshot_of == NULL); michael@0: michael@0: - _cairo_surface_detach_snapshots (surface); michael@0: + cairo_surface_detach_snapshots (surface); michael@0: _cairo_surface_detach_mime_data (surface); michael@0: } michael@0: michael@0: void michael@0: _cairo_surface_init (cairo_surface_t *surface, michael@0: const cairo_surface_backend_t *backend, michael@0: cairo_device_t *device, michael@0: cairo_content_t content) michael@0: @@ -711,19 +711,19 @@ cairo_surface_finish (cairo_surface_t *s michael@0: michael@0: if (CAIRO_REFERENCE_COUNT_IS_INVALID (&surface->ref_count)) michael@0: return; michael@0: michael@0: if (surface->finished) michael@0: return; michael@0: michael@0: /* update the snapshots *before* we declare the surface as finished */ michael@0: - _cairo_surface_detach_snapshots (surface); michael@0: + cairo_surface_detach_snapshots (surface); michael@0: if (surface->snapshot_of != NULL) michael@0: - _cairo_surface_detach_snapshot (surface); michael@0: + cairo_surface_detach_snapshot (surface); michael@0: michael@0: cairo_surface_flush (surface); michael@0: surface->finished = TRUE; michael@0: michael@0: /* call finish even if in error mode */ michael@0: if (surface->backend->finish) { michael@0: status = surface->backend->finish (surface); michael@0: if (unlikely (status)) michael@0: @@ -1106,17 +1106,17 @@ cairo_surface_flush (cairo_surface_t *su michael@0: michael@0: if (surface->status) michael@0: return; michael@0: michael@0: if (surface->finished) michael@0: return; michael@0: michael@0: /* update the current snapshots *before* the user updates the surface */ michael@0: - _cairo_surface_detach_snapshots (surface); michael@0: + cairo_surface_detach_snapshots (surface); michael@0: michael@0: if (surface->backend->flush) { michael@0: status = surface->backend->flush (surface); michael@0: if (unlikely (status)) michael@0: status = _cairo_surface_set_error (surface, status); michael@0: } michael@0: } michael@0: slim_hidden_def (cairo_surface_flush); michael@0: @@ -1628,17 +1628,17 @@ _cairo_recording_surface_clone_similar ( michael@0: return similar->status; michael@0: michael@0: status = _cairo_recording_surface_replay (src, similar); michael@0: if (unlikely (status)) { michael@0: cairo_surface_destroy (similar); michael@0: return status; michael@0: } michael@0: michael@0: - _cairo_surface_attach_snapshot (src, similar, NULL); michael@0: + cairo_surface_attach_snapshot (src, similar, NULL); michael@0: michael@0: src_x = src_y = 0; michael@0: } michael@0: michael@0: *clone_out = similar; michael@0: *clone_offset_x = src_x; michael@0: *clone_offset_y = src_y; michael@0: return CAIRO_STATUS_SUCCESS; michael@0: diff --git a/gfx/cairo/cairo/src/cairo-vg-surface.c b/gfx/cairo/cairo/src/cairo-vg-surface.c michael@0: --- a/gfx/cairo/cairo/src/cairo-vg-surface.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-vg-surface.c michael@0: @@ -977,17 +977,17 @@ _vg_setup_surface_source (cairo_vg_conte michael@0: status = _cairo_cache_insert (&context->snapshot_cache, michael@0: &clone->snapshot_cache_entry); michael@0: if (unlikely (status)) { michael@0: clone->snapshot_cache_entry.hash = 0; michael@0: cairo_surface_destroy (&clone->base); michael@0: return status; michael@0: } michael@0: michael@0: - _cairo_surface_attach_snapshot (spat->surface, &clone->base, michael@0: + cairo_surface_attach_snapshot (spat->surface, &clone->base, michael@0: _vg_surface_remove_from_cache); michael@0: michael@0: DONE: michael@0: cairo_surface_destroy (&context->source->base); michael@0: context->source = clone; michael@0: michael@0: vgSetParameteri (context->paint, VG_PAINT_TYPE, VG_PAINT_TYPE_PATTERN); michael@0: michael@0: diff --git a/gfx/cairo/cairo/src/cairo-xcb-surface.c b/gfx/cairo/cairo/src/cairo-xcb-surface.c michael@0: --- a/gfx/cairo/cairo/src/cairo-xcb-surface.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-xcb-surface.c michael@0: @@ -560,17 +560,17 @@ _cairo_xcb_surface_acquire_source_image michael@0: image = (cairo_image_surface_t *) cairo_surface_reference (&image->base); michael@0: goto DONE; michael@0: } michael@0: michael@0: status = _get_image (surface, FALSE, &image); michael@0: if (unlikely (status)) michael@0: return status; michael@0: michael@0: - _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); michael@0: + cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); michael@0: michael@0: DONE: michael@0: *image_out = image; michael@0: *image_extra = NULL; michael@0: return CAIRO_STATUS_SUCCESS; michael@0: } michael@0: michael@0: static void michael@0: @@ -713,17 +713,17 @@ _cairo_xcb_surface_flush (void *abstract michael@0: status = cairo_surface_status (surface->fallback); michael@0: michael@0: if (status == CAIRO_STATUS_SUCCESS) { michael@0: status = _put_image (surface, michael@0: (cairo_image_surface_t *) surface->fallback); michael@0: } michael@0: michael@0: if (status == CAIRO_STATUS_SUCCESS) { michael@0: - _cairo_surface_attach_snapshot (&surface->base, michael@0: + cairo_surface_attach_snapshot (&surface->base, michael@0: surface->fallback, michael@0: cairo_surface_finish); michael@0: } michael@0: } michael@0: michael@0: cairo_surface_destroy (surface->fallback); michael@0: surface->fallback = NULL; michael@0: michael@0: diff --git a/gfx/cairo/cairo/src/cairo.h b/gfx/cairo/cairo/src/cairo.h michael@0: --- a/gfx/cairo/cairo/src/cairo.h michael@0: +++ b/gfx/cairo/cairo/src/cairo.h michael@0: @@ -214,16 +214,25 @@ typedef struct _cairo_pattern cairo_patt michael@0: * michael@0: * #cairo_destroy_func_t the type of function which is called when a michael@0: * data element is destroyed. It is passed the pointer to the data michael@0: * element and should free any memory and resources allocated for it. michael@0: **/ michael@0: typedef void (*cairo_destroy_func_t) (void *data); michael@0: michael@0: /** michael@0: + * cairo_surface_func_t: michael@0: + * @surface: The surface being referred to. michael@0: + * michael@0: + * #cairo_surface_func_t the type of function which is used for callback michael@0: + * when a surface needs to be apssed as a parameter. michael@0: + */ michael@0: +typedef void (*cairo_surface_func_t) (cairo_surface_t *surface); michael@0: + michael@0: +/** michael@0: * cairo_user_data_key_t: michael@0: * @unused: not used; ignore. michael@0: * michael@0: * #cairo_user_data_key_t is used for attaching user data to cairo michael@0: * data structures. The actual contents of the struct is never used, michael@0: * and there is no need to initialize the object; only the unique michael@0: * address of a #cairo_data_key_t object is used. Typically, you michael@0: * would just use the address of a static #cairo_data_key_t object. michael@0: @@ -2150,16 +2159,24 @@ cairo_surface_get_user_data (cairo_surfa michael@0: const cairo_user_data_key_t *key); michael@0: michael@0: cairo_public cairo_status_t michael@0: cairo_surface_set_user_data (cairo_surface_t *surface, michael@0: const cairo_user_data_key_t *key, michael@0: void *user_data, michael@0: cairo_destroy_func_t destroy); michael@0: michael@0: +cairo_public void michael@0: +cairo_surface_attach_snapshot (cairo_surface_t *surface, michael@0: + cairo_surface_t *snapshot, michael@0: + cairo_surface_func_t detach_func); michael@0: + michael@0: +cairo_public void michael@0: +cairo_surface_detach_snapshot (cairo_surface_t *snapshot); michael@0: + michael@0: #define CAIRO_MIME_TYPE_JPEG "image/jpeg" michael@0: #define CAIRO_MIME_TYPE_PNG "image/png" michael@0: #define CAIRO_MIME_TYPE_JP2 "image/jp2" michael@0: #define CAIRO_MIME_TYPE_URI "text/x-uri" michael@0: michael@0: cairo_public void michael@0: cairo_surface_get_mime_data (cairo_surface_t *surface, michael@0: const char *mime_type, michael@0: @@ -2328,16 +2345,21 @@ cairo_recording_surface_create (cairo_co michael@0: michael@0: cairo_public void michael@0: cairo_recording_surface_ink_extents (cairo_surface_t *surface, michael@0: double *x0, michael@0: double *y0, michael@0: double *width, michael@0: double *height); michael@0: michael@0: +/* Null-surface functions */ michael@0: + michael@0: +cairo_public cairo_surface_t * michael@0: +cairo_null_surface_create (cairo_content_t content); michael@0: + michael@0: /* Pattern creation functions */ michael@0: michael@0: cairo_public cairo_pattern_t * michael@0: cairo_pattern_create_rgb (double red, double green, double blue); michael@0: michael@0: cairo_public cairo_pattern_t * michael@0: cairo_pattern_create_rgba (double red, double green, double blue, michael@0: double alpha); michael@0: diff --git a/gfx/cairo/cairo/src/cairoint.h b/gfx/cairo/cairo/src/cairoint.h michael@0: --- a/gfx/cairo/cairo/src/cairoint.h michael@0: +++ b/gfx/cairo/cairo/src/cairoint.h michael@0: @@ -1770,27 +1770,19 @@ _cairo_surface_clone_similar (cairo_surf michael@0: int height, michael@0: int *clone_offset_x, michael@0: int *clone_offset_y, michael@0: cairo_surface_t **clone_out); michael@0: michael@0: cairo_private cairo_surface_t * michael@0: _cairo_surface_snapshot (cairo_surface_t *surface); michael@0: michael@0: -cairo_private void michael@0: -_cairo_surface_attach_snapshot (cairo_surface_t *surface, michael@0: - cairo_surface_t *snapshot, michael@0: - cairo_surface_func_t detach_func); michael@0: - michael@0: cairo_private cairo_surface_t * michael@0: _cairo_surface_has_snapshot (cairo_surface_t *surface, michael@0: - const cairo_surface_backend_t *backend); michael@0: - michael@0: -cairo_private void michael@0: -_cairo_surface_detach_snapshot (cairo_surface_t *snapshot); michael@0: + const cairo_surface_backend_t *backend); michael@0: michael@0: cairo_private cairo_bool_t michael@0: _cairo_surface_is_similar (cairo_surface_t *surface_a, michael@0: cairo_surface_t *surface_b); michael@0: michael@0: cairo_private cairo_bool_t michael@0: _cairo_surface_get_extents (cairo_surface_t *surface, michael@0: cairo_rectangle_int_t *extents);