gfx/cairo/expose-snapshot.patch

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/cairo/expose-snapshot.patch	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,528 @@
     1.4 +diff --git a/gfx/cairo/cairo/src/cairo-analysis-surface-private.h b/gfx/cairo/cairo/src/cairo-analysis-surface-private.h
     1.5 +--- a/gfx/cairo/cairo/src/cairo-analysis-surface-private.h
     1.6 ++++ b/gfx/cairo/cairo/src/cairo-analysis-surface-private.h
     1.7 +@@ -65,14 +65,11 @@ _cairo_analysis_surface_has_unsupported 
     1.8 + cairo_private void
     1.9 + _cairo_analysis_surface_get_bounding_box (cairo_surface_t *surface,
    1.10 + 					  cairo_box_t     *bbox);
    1.11 + 
    1.12 + cairo_private cairo_int_status_t
    1.13 + _cairo_analysis_surface_merge_status (cairo_int_status_t status_a,
    1.14 + 				      cairo_int_status_t status_b);
    1.15 + 
    1.16 +-cairo_private cairo_surface_t *
    1.17 +-_cairo_null_surface_create (cairo_content_t content);
    1.18 +-
    1.19 + CAIRO_END_DECLS
    1.20 + 
    1.21 + #endif /* CAIRO_ANALYSIS_SURFACE_H */
    1.22 +diff --git a/gfx/cairo/cairo/src/cairo-analysis-surface.c b/gfx/cairo/cairo/src/cairo-analysis-surface.c
    1.23 +--- a/gfx/cairo/cairo/src/cairo-analysis-surface.c
    1.24 ++++ b/gfx/cairo/cairo/src/cairo-analysis-surface.c
    1.25 +@@ -902,17 +902,17 @@ static const cairo_surface_backend_t cai
    1.26 +     NULL, /* fill_stroke */
    1.27 +     NULL, /* create_solid_pattern_surface */
    1.28 +     NULL, /* can_repaint_solid_pattern_surface */
    1.29 +     NULL, /* has_show_text_glyphs */
    1.30 +     NULL  /* show_text_glyphs */
    1.31 + };
    1.32 + 
    1.33 + cairo_surface_t *
    1.34 +-_cairo_null_surface_create (cairo_content_t content)
    1.35 ++cairo_null_surface_create (cairo_content_t content)
    1.36 + {
    1.37 +     cairo_surface_t *surface;
    1.38 + 
    1.39 +     surface = malloc (sizeof (cairo_surface_t));
    1.40 +     if (unlikely (surface == NULL)) {
    1.41 + 	return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
    1.42 +     }
    1.43 + 
    1.44 +diff --git a/gfx/cairo/cairo/src/cairo-d2d-surface.cpp b/gfx/cairo/cairo/src/cairo-d2d-surface.cpp
    1.45 +--- a/gfx/cairo/cairo/src/cairo-d2d-surface.cpp
    1.46 ++++ b/gfx/cairo/cairo/src/cairo-d2d-surface.cpp
    1.47 +@@ -1951,24 +1951,24 @@ _cairo_d2d_create_brush_for_pattern(cair
    1.48 + 			rect = D2D1::RectU(1, 1, srcSurf->width + 1, srcSurf->height + 1);
    1.49 + 		    } else {
    1.50 + 			rect = D2D1::RectU(0, 0, srcSurf->width, srcSurf->height);
    1.51 + 		    }
    1.52 + 		    sourceBitmap->CopyFromMemory(&rect,
    1.53 + 						 srcSurf->data,
    1.54 + 						 srcSurf->stride);
    1.55 + 		    cairo_surface_t *nullSurf =
    1.56 +-			_cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA);
    1.57 ++			cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA);
    1.58 + 		    cachebitmap->refs++;
    1.59 + 		    cachebitmap->dirty = false;
    1.60 + 		    cairo_surface_set_user_data(nullSurf,
    1.61 + 						&bitmap_key_snapshot,
    1.62 + 						cachebitmap,
    1.63 + 						NULL);
    1.64 +-		    _cairo_surface_attach_snapshot(surfacePattern->surface,
    1.65 ++		    cairo_surface_attach_snapshot(surfacePattern->surface,
    1.66 + 						   nullSurf,
    1.67 + 						   _d2d_snapshot_detached);
    1.68 + 		}
    1.69 + 	    } else {
    1.70 + 		if (pattern->extend != CAIRO_EXTEND_NONE) {
    1.71 + 		    d2dsurf->rt->CreateBitmap(D2D1::SizeU(width, height),
    1.72 + 							  data + yoffset * stride + xoffset * Bpp,
    1.73 + 							  stride,
    1.74 +@@ -2015,22 +2015,22 @@ _cairo_d2d_create_brush_for_pattern(cair
    1.75 + 		     * and one more in the user data structure.
    1.76 + 		     */
    1.77 + 		    cachebitmap->refs = 2;
    1.78 + 		    cairo_surface_set_user_data(surfacePattern->surface,
    1.79 + 						key,
    1.80 + 						cachebitmap,
    1.81 + 						_d2d_release_bitmap);
    1.82 + 		    cairo_surface_t *nullSurf =
    1.83 +-			_cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA);
    1.84 ++			cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA);
    1.85 + 		    cairo_surface_set_user_data(nullSurf,
    1.86 + 						&bitmap_key_snapshot,
    1.87 + 						cachebitmap,
    1.88 + 						NULL);
    1.89 +-		    _cairo_surface_attach_snapshot(surfacePattern->surface,
    1.90 ++		    cairo_surface_attach_snapshot(surfacePattern->surface,
    1.91 + 						   nullSurf,
    1.92 + 						   _d2d_snapshot_detached);
    1.93 + 		    cache_usage += _d2d_compute_bitmap_mem_size(sourceBitmap);
    1.94 + 		}
    1.95 + 		if (pix_image) {
    1.96 + 		    pixman_image_unref(pix_image);
    1.97 +   		}
    1.98 + 	    }
    1.99 +diff --git a/gfx/cairo/cairo/src/cairo-recording-surface.c b/gfx/cairo/cairo/src/cairo-recording-surface.c
   1.100 +--- a/gfx/cairo/cairo/src/cairo-recording-surface.c
   1.101 ++++ b/gfx/cairo/cairo/src/cairo-recording-surface.c
   1.102 +@@ -276,17 +276,17 @@ _cairo_recording_surface_acquire_source_
   1.103 + 				     -surface->extents.y);
   1.104 + 
   1.105 +     status = _cairo_recording_surface_replay (&surface->base, image);
   1.106 +     if (unlikely (status)) {
   1.107 + 	cairo_surface_destroy (image);
   1.108 + 	return status;
   1.109 +     }
   1.110 + 
   1.111 +-    _cairo_surface_attach_snapshot (&surface->base, image, NULL);
   1.112 ++    cairo_surface_attach_snapshot (&surface->base, image, NULL);
   1.113 + 
   1.114 +     *image_out = (cairo_image_surface_t *) image;
   1.115 +     *image_extra = NULL;
   1.116 +     return CAIRO_STATUS_SUCCESS;
   1.117 + }
   1.118 + 
   1.119 + static void
   1.120 + _cairo_recording_surface_release_source_image (void			*abstract_surface,
   1.121 +@@ -1046,17 +1046,17 @@ static cairo_status_t
   1.122 + _recording_surface_get_ink_bbox (cairo_recording_surface_t *surface,
   1.123 + 				 cairo_box_t *bbox,
   1.124 + 				 const cairo_matrix_t *transform)
   1.125 + {
   1.126 +     cairo_surface_t *null_surface;
   1.127 +     cairo_surface_t *analysis_surface;
   1.128 +     cairo_status_t status;
   1.129 + 
   1.130 +-    null_surface = _cairo_null_surface_create (surface->content);
   1.131 ++    null_surface = cairo_null_surface_create (surface->content);
   1.132 +     analysis_surface = _cairo_analysis_surface_create (null_surface);
   1.133 +     cairo_surface_destroy (null_surface);
   1.134 + 
   1.135 +     status = analysis_surface->status;
   1.136 +     if (unlikely (status))
   1.137 + 	return status;
   1.138 + 
   1.139 +     if (transform != NULL)
   1.140 +diff --git a/gfx/cairo/cairo/src/cairo-surface-private.h b/gfx/cairo/cairo/src/cairo-surface-private.h
   1.141 +--- a/gfx/cairo/cairo/src/cairo-surface-private.h
   1.142 ++++ b/gfx/cairo/cairo/src/cairo-surface-private.h
   1.143 +@@ -40,18 +40,16 @@
   1.144 + 
   1.145 + #include "cairo.h"
   1.146 + 
   1.147 + #include "cairo-types-private.h"
   1.148 + #include "cairo-list-private.h"
   1.149 + #include "cairo-reference-count-private.h"
   1.150 + #include "cairo-clip-private.h"
   1.151 + 
   1.152 +-typedef void (*cairo_surface_func_t) (cairo_surface_t *);
   1.153 +-
   1.154 + struct _cairo_surface {
   1.155 +     const cairo_surface_backend_t *backend;
   1.156 +     cairo_device_t *device;
   1.157 + 
   1.158 +     /* We allow surfaces to override the backend->type by shoving something
   1.159 +      * else into surface->type. This is for "wrapper" surfaces that want to
   1.160 +      * hide their internal type from the user-level API. */
   1.161 +     cairo_surface_type_t type;
   1.162 +diff --git a/gfx/cairo/cairo/src/cairo-surface-snapshot.c b/gfx/cairo/cairo/src/cairo-surface-snapshot.c
   1.163 +--- a/gfx/cairo/cairo/src/cairo-surface-snapshot.c
   1.164 ++++ b/gfx/cairo/cairo/src/cairo-surface-snapshot.c
   1.165 +@@ -209,17 +209,17 @@ _cairo_surface_snapshot (cairo_surface_t
   1.166 + 	    if (unlikely (status)) {
   1.167 + 		cairo_surface_destroy (snap);
   1.168 + 		return _cairo_surface_create_in_error (status);
   1.169 + 	    }
   1.170 + 
   1.171 + 	    snap->device_transform = surface->device_transform;
   1.172 + 	    snap->device_transform_inverse = surface->device_transform_inverse;
   1.173 + 
   1.174 +-	    _cairo_surface_attach_snapshot (surface, snap, NULL);
   1.175 ++	    cairo_surface_attach_snapshot (surface, snap, NULL);
   1.176 + 
   1.177 + 	    return snap;
   1.178 + 	}
   1.179 +     }
   1.180 + 
   1.181 +     snapshot = (cairo_surface_snapshot_t *)
   1.182 + 	_cairo_surface_has_snapshot (surface, &_cairo_surface_snapshot_backend);
   1.183 +     if (snapshot != NULL)
   1.184 +@@ -242,14 +242,14 @@ _cairo_surface_snapshot (cairo_surface_t
   1.185 +     if (unlikely (status)) {
   1.186 + 	cairo_surface_destroy (&snapshot->base);
   1.187 + 	return _cairo_surface_create_in_error (status);
   1.188 +     }
   1.189 + 
   1.190 +     snapshot->base.device_transform = surface->device_transform;
   1.191 +     snapshot->base.device_transform_inverse = surface->device_transform_inverse;
   1.192 + 
   1.193 +-    _cairo_surface_attach_snapshot (surface,
   1.194 ++    cairo_surface_attach_snapshot (surface,
   1.195 + 				    &snapshot->base,
   1.196 + 				    _cairo_surface_snapshot_copy_on_write);
   1.197 + 
   1.198 +     return &snapshot->base;
   1.199 + }
   1.200 +diff --git a/gfx/cairo/cairo/src/cairo-surface-subsurface.c b/gfx/cairo/cairo/src/cairo-surface-subsurface.c
   1.201 +--- a/gfx/cairo/cairo/src/cairo-surface-subsurface.c
   1.202 ++++ b/gfx/cairo/cairo/src/cairo-surface-subsurface.c
   1.203 +@@ -326,17 +326,17 @@ _cairo_surface_subsurface_acquire_source
   1.204 + 		_cairo_image_surface_create_with_content (meta->content,
   1.205 + 							  surface->extents.width,
   1.206 + 							  surface->extents.height);
   1.207 + 	    if (unlikely (image->base.status))
   1.208 + 		return image->base.status;
   1.209 + 
   1.210 +             cairo_surface_paint_to_target (&image->base, surface);
   1.211 + 
   1.212 +-	    _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL);
   1.213 ++	    cairo_surface_attach_snapshot (&surface->base, &image->base, NULL);
   1.214 + 
   1.215 + 	    *image_out = image;
   1.216 + 	    *extra_out = NULL;
   1.217 + 	    return CAIRO_STATUS_SUCCESS;
   1.218 + 	}
   1.219 +     }
   1.220 + 
   1.221 +     extra = malloc (sizeof (struct extra));
   1.222 +diff --git a/gfx/cairo/cairo/src/cairo-surface.c b/gfx/cairo/cairo/src/cairo-surface.c
   1.223 +--- a/gfx/cairo/cairo/src/cairo-surface.c
   1.224 ++++ b/gfx/cairo/cairo/src/cairo-surface.c
   1.225 +@@ -305,51 +305,51 @@ _cairo_surface_detach_mime_data (cairo_s
   1.226 +     if (! _cairo_surface_has_mime_data (surface))
   1.227 + 	return;
   1.228 + 
   1.229 +     _cairo_user_data_array_fini (&surface->mime_data);
   1.230 +     _cairo_user_data_array_init (&surface->mime_data);
   1.231 + }
   1.232 + 
   1.233 + static void
   1.234 +-_cairo_surface_detach_snapshots (cairo_surface_t *surface)
   1.235 ++cairo_surface_detach_snapshots (cairo_surface_t *surface)
   1.236 + {
   1.237 +     while (_cairo_surface_has_snapshots (surface)) {
   1.238 +-	_cairo_surface_detach_snapshot (cairo_list_first_entry (&surface->snapshots,
   1.239 ++	cairo_surface_detach_snapshot (cairo_list_first_entry (&surface->snapshots,
   1.240 + 								cairo_surface_t,
   1.241 + 								snapshot));
   1.242 +     }
   1.243 + }
   1.244 + 
   1.245 + void
   1.246 +-_cairo_surface_detach_snapshot (cairo_surface_t *snapshot)
   1.247 ++cairo_surface_detach_snapshot (cairo_surface_t *snapshot)
   1.248 + {
   1.249 +     assert (snapshot->snapshot_of != NULL);
   1.250 + 
   1.251 +     snapshot->snapshot_of = NULL;
   1.252 +     cairo_list_del (&snapshot->snapshot);
   1.253 + 
   1.254 +     if (snapshot->snapshot_detach != NULL)
   1.255 + 	snapshot->snapshot_detach (snapshot);
   1.256 + 
   1.257 +     cairo_surface_destroy (snapshot);
   1.258 + }
   1.259 + 
   1.260 + void
   1.261 +-_cairo_surface_attach_snapshot (cairo_surface_t *surface,
   1.262 ++cairo_surface_attach_snapshot (cairo_surface_t *surface,
   1.263 + 				 cairo_surface_t *snapshot,
   1.264 + 				 cairo_surface_func_t detach_func)
   1.265 + {
   1.266 +     assert (surface != snapshot);
   1.267 +     assert (snapshot->snapshot_of != surface);
   1.268 + 
   1.269 +     cairo_surface_reference (snapshot);
   1.270 + 
   1.271 +     if (snapshot->snapshot_of != NULL)
   1.272 +-	_cairo_surface_detach_snapshot (snapshot);
   1.273 ++	cairo_surface_detach_snapshot (snapshot);
   1.274 + 
   1.275 +     snapshot->snapshot_of = surface;
   1.276 +     snapshot->snapshot_detach = detach_func;
   1.277 + 
   1.278 +     cairo_list_add (&snapshot->snapshot, &surface->snapshots);
   1.279 + 
   1.280 +     assert (_cairo_surface_has_snapshot (surface, snapshot->backend) == snapshot);
   1.281 + }
   1.282 +@@ -382,17 +382,17 @@ _cairo_surface_is_writable (cairo_surfac
   1.283 + 
   1.284 + static void
   1.285 + _cairo_surface_begin_modification (cairo_surface_t *surface)
   1.286 + {
   1.287 +     assert (surface->status == CAIRO_STATUS_SUCCESS);
   1.288 +     assert (! surface->finished);
   1.289 +     assert (surface->snapshot_of == NULL);
   1.290 + 
   1.291 +-    _cairo_surface_detach_snapshots (surface);
   1.292 ++    cairo_surface_detach_snapshots (surface);
   1.293 +     _cairo_surface_detach_mime_data (surface);
   1.294 + }
   1.295 + 
   1.296 + void
   1.297 + _cairo_surface_init (cairo_surface_t			*surface,
   1.298 + 		     const cairo_surface_backend_t	*backend,
   1.299 + 		     cairo_device_t			*device,
   1.300 + 		     cairo_content_t			 content)
   1.301 +@@ -711,19 +711,19 @@ cairo_surface_finish (cairo_surface_t *s
   1.302 + 
   1.303 +     if (CAIRO_REFERENCE_COUNT_IS_INVALID (&surface->ref_count))
   1.304 + 	return;
   1.305 + 
   1.306 +     if (surface->finished)
   1.307 + 	return;
   1.308 + 
   1.309 +     /* update the snapshots *before* we declare the surface as finished */
   1.310 +-    _cairo_surface_detach_snapshots (surface);
   1.311 ++    cairo_surface_detach_snapshots (surface);
   1.312 +     if (surface->snapshot_of != NULL)
   1.313 +-	_cairo_surface_detach_snapshot (surface);
   1.314 ++	cairo_surface_detach_snapshot (surface);
   1.315 + 
   1.316 +     cairo_surface_flush (surface);
   1.317 +     surface->finished = TRUE;
   1.318 + 
   1.319 +     /* call finish even if in error mode */
   1.320 +     if (surface->backend->finish) {
   1.321 + 	status = surface->backend->finish (surface);
   1.322 + 	if (unlikely (status))
   1.323 +@@ -1106,17 +1106,17 @@ cairo_surface_flush (cairo_surface_t *su
   1.324 + 
   1.325 +     if (surface->status)
   1.326 + 	return;
   1.327 + 
   1.328 +     if (surface->finished)
   1.329 + 	return;
   1.330 + 
   1.331 +     /* update the current snapshots *before* the user updates the surface */
   1.332 +-    _cairo_surface_detach_snapshots (surface);
   1.333 ++    cairo_surface_detach_snapshots (surface);
   1.334 + 
   1.335 +     if (surface->backend->flush) {
   1.336 + 	status = surface->backend->flush (surface);
   1.337 + 	if (unlikely (status))
   1.338 + 	    status = _cairo_surface_set_error (surface, status);
   1.339 +     }
   1.340 + }
   1.341 + slim_hidden_def (cairo_surface_flush);
   1.342 +@@ -1628,17 +1628,17 @@ _cairo_recording_surface_clone_similar (
   1.343 + 	    return similar->status;
   1.344 + 
   1.345 + 	status = _cairo_recording_surface_replay (src, similar);
   1.346 + 	if (unlikely (status)) {
   1.347 + 	    cairo_surface_destroy (similar);
   1.348 + 	    return status;
   1.349 + 	}
   1.350 + 
   1.351 +-	_cairo_surface_attach_snapshot (src, similar, NULL);
   1.352 ++	cairo_surface_attach_snapshot (src, similar, NULL);
   1.353 + 
   1.354 + 	src_x = src_y = 0;
   1.355 +     }
   1.356 + 
   1.357 +     *clone_out = similar;
   1.358 +     *clone_offset_x = src_x;
   1.359 +     *clone_offset_y = src_y;
   1.360 +     return CAIRO_STATUS_SUCCESS;
   1.361 +diff --git a/gfx/cairo/cairo/src/cairo-vg-surface.c b/gfx/cairo/cairo/src/cairo-vg-surface.c
   1.362 +--- a/gfx/cairo/cairo/src/cairo-vg-surface.c
   1.363 ++++ b/gfx/cairo/cairo/src/cairo-vg-surface.c
   1.364 +@@ -977,17 +977,17 @@ _vg_setup_surface_source (cairo_vg_conte
   1.365 +     status = _cairo_cache_insert (&context->snapshot_cache,
   1.366 + 				  &clone->snapshot_cache_entry);
   1.367 +     if (unlikely (status)) {
   1.368 + 	clone->snapshot_cache_entry.hash = 0;
   1.369 + 	cairo_surface_destroy (&clone->base);
   1.370 + 	return status;
   1.371 +     }
   1.372 + 
   1.373 +-    _cairo_surface_attach_snapshot (spat->surface, &clone->base,
   1.374 ++    cairo_surface_attach_snapshot (spat->surface, &clone->base,
   1.375 + 				    _vg_surface_remove_from_cache);
   1.376 + 
   1.377 + DONE:
   1.378 +     cairo_surface_destroy (&context->source->base);
   1.379 +     context->source = clone;
   1.380 + 
   1.381 +     vgSetParameteri (context->paint, VG_PAINT_TYPE, VG_PAINT_TYPE_PATTERN);
   1.382 + 
   1.383 +diff --git a/gfx/cairo/cairo/src/cairo-xcb-surface.c b/gfx/cairo/cairo/src/cairo-xcb-surface.c
   1.384 +--- a/gfx/cairo/cairo/src/cairo-xcb-surface.c
   1.385 ++++ b/gfx/cairo/cairo/src/cairo-xcb-surface.c
   1.386 +@@ -560,17 +560,17 @@ _cairo_xcb_surface_acquire_source_image 
   1.387 + 	image = (cairo_image_surface_t *) cairo_surface_reference (&image->base);
   1.388 + 	goto DONE;
   1.389 +     }
   1.390 + 
   1.391 +     status = _get_image (surface, FALSE, &image);
   1.392 +     if (unlikely (status))
   1.393 + 	return status;
   1.394 + 
   1.395 +-    _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL);
   1.396 ++    cairo_surface_attach_snapshot (&surface->base, &image->base, NULL);
   1.397 + 
   1.398 + DONE:
   1.399 +     *image_out = image;
   1.400 +     *image_extra = NULL;
   1.401 +     return CAIRO_STATUS_SUCCESS;
   1.402 + }
   1.403 + 
   1.404 + static void
   1.405 +@@ -713,17 +713,17 @@ _cairo_xcb_surface_flush (void *abstract
   1.406 + 	status = cairo_surface_status (surface->fallback);
   1.407 + 
   1.408 + 	if (status == CAIRO_STATUS_SUCCESS) {
   1.409 + 	    status = _put_image (surface,
   1.410 + 				 (cairo_image_surface_t *) surface->fallback);
   1.411 + 	}
   1.412 + 
   1.413 + 	if (status == CAIRO_STATUS_SUCCESS) {
   1.414 +-	    _cairo_surface_attach_snapshot (&surface->base,
   1.415 ++	    cairo_surface_attach_snapshot (&surface->base,
   1.416 + 					    surface->fallback,
   1.417 + 					    cairo_surface_finish);
   1.418 + 	}
   1.419 +     }
   1.420 + 
   1.421 +     cairo_surface_destroy (surface->fallback);
   1.422 +     surface->fallback = NULL;
   1.423 + 
   1.424 +diff --git a/gfx/cairo/cairo/src/cairo.h b/gfx/cairo/cairo/src/cairo.h
   1.425 +--- a/gfx/cairo/cairo/src/cairo.h
   1.426 ++++ b/gfx/cairo/cairo/src/cairo.h
   1.427 +@@ -214,16 +214,25 @@ typedef struct _cairo_pattern cairo_patt
   1.428 +  *
   1.429 +  * #cairo_destroy_func_t the type of function which is called when a
   1.430 +  * data element is destroyed. It is passed the pointer to the data
   1.431 +  * element and should free any memory and resources allocated for it.
   1.432 +  **/
   1.433 + typedef void (*cairo_destroy_func_t) (void *data);
   1.434 + 
   1.435 + /**
   1.436 ++ * cairo_surface_func_t:
   1.437 ++ * @surface: The surface being referred to.
   1.438 ++ *
   1.439 ++ * #cairo_surface_func_t the type of function which is used for callback
   1.440 ++ * when a surface needs to be apssed as a parameter.
   1.441 ++ */
   1.442 ++typedef void (*cairo_surface_func_t) (cairo_surface_t *surface);
   1.443 ++
   1.444 ++/**
   1.445 +  * cairo_user_data_key_t:
   1.446 +  * @unused: not used; ignore.
   1.447 +  *
   1.448 +  * #cairo_user_data_key_t is used for attaching user data to cairo
   1.449 +  * data structures.  The actual contents of the struct is never used,
   1.450 +  * and there is no need to initialize the object; only the unique
   1.451 +  * address of a #cairo_data_key_t object is used.  Typically, you
   1.452 +  * would just use the address of a static #cairo_data_key_t object.
   1.453 +@@ -2150,16 +2159,24 @@ cairo_surface_get_user_data (cairo_surfa
   1.454 + 			     const cairo_user_data_key_t *key);
   1.455 + 
   1.456 + cairo_public cairo_status_t
   1.457 + cairo_surface_set_user_data (cairo_surface_t		 *surface,
   1.458 + 			     const cairo_user_data_key_t *key,
   1.459 + 			     void			 *user_data,
   1.460 + 			     cairo_destroy_func_t	 destroy);
   1.461 + 
   1.462 ++cairo_public void
   1.463 ++cairo_surface_attach_snapshot (cairo_surface_t *surface,
   1.464 ++				cairo_surface_t *snapshot,
   1.465 ++				cairo_surface_func_t detach_func);
   1.466 ++
   1.467 ++cairo_public void
   1.468 ++cairo_surface_detach_snapshot (cairo_surface_t *snapshot);
   1.469 ++
   1.470 + #define CAIRO_MIME_TYPE_JPEG "image/jpeg"
   1.471 + #define CAIRO_MIME_TYPE_PNG "image/png"
   1.472 + #define CAIRO_MIME_TYPE_JP2 "image/jp2"
   1.473 + #define CAIRO_MIME_TYPE_URI "text/x-uri"
   1.474 + 
   1.475 + cairo_public void
   1.476 + cairo_surface_get_mime_data (cairo_surface_t		*surface,
   1.477 +                              const char			*mime_type,
   1.478 +@@ -2328,16 +2345,21 @@ cairo_recording_surface_create (cairo_co
   1.479 + 
   1.480 + cairo_public void
   1.481 + cairo_recording_surface_ink_extents (cairo_surface_t *surface,
   1.482 +                                      double *x0,
   1.483 +                                      double *y0,
   1.484 +                                      double *width,
   1.485 +                                      double *height);
   1.486 + 
   1.487 ++/* Null-surface functions */
   1.488 ++
   1.489 ++cairo_public cairo_surface_t *
   1.490 ++cairo_null_surface_create (cairo_content_t content);
   1.491 ++
   1.492 + /* Pattern creation functions */
   1.493 + 
   1.494 + cairo_public cairo_pattern_t *
   1.495 + cairo_pattern_create_rgb (double red, double green, double blue);
   1.496 + 
   1.497 + cairo_public cairo_pattern_t *
   1.498 + cairo_pattern_create_rgba (double red, double green, double blue,
   1.499 + 			   double alpha);
   1.500 +diff --git a/gfx/cairo/cairo/src/cairoint.h b/gfx/cairo/cairo/src/cairoint.h
   1.501 +--- a/gfx/cairo/cairo/src/cairoint.h
   1.502 ++++ b/gfx/cairo/cairo/src/cairoint.h
   1.503 +@@ -1770,27 +1770,19 @@ _cairo_surface_clone_similar (cairo_surf
   1.504 + 			      int               height,
   1.505 + 			      int              *clone_offset_x,
   1.506 + 			      int              *clone_offset_y,
   1.507 + 			      cairo_surface_t **clone_out);
   1.508 + 
   1.509 + cairo_private cairo_surface_t *
   1.510 + _cairo_surface_snapshot (cairo_surface_t *surface);
   1.511 + 
   1.512 +-cairo_private void
   1.513 +-_cairo_surface_attach_snapshot (cairo_surface_t *surface,
   1.514 +-				cairo_surface_t *snapshot,
   1.515 +-				cairo_surface_func_t detach_func);
   1.516 +-
   1.517 + cairo_private cairo_surface_t *
   1.518 + _cairo_surface_has_snapshot (cairo_surface_t *surface,
   1.519 +-			     const cairo_surface_backend_t *backend);
   1.520 +-
   1.521 +-cairo_private void
   1.522 +-_cairo_surface_detach_snapshot (cairo_surface_t *snapshot);
   1.523 ++		 	     const cairo_surface_backend_t *backend);
   1.524 + 
   1.525 + cairo_private cairo_bool_t
   1.526 + _cairo_surface_is_similar (cairo_surface_t *surface_a,
   1.527 + 	                   cairo_surface_t *surface_b);
   1.528 + 
   1.529 + cairo_private cairo_bool_t
   1.530 + _cairo_surface_get_extents (cairo_surface_t         *surface,
   1.531 + 			    cairo_rectangle_int_t   *extents);

mercurial