This fixes the build with firefox-12.0 by exposing some private functions. https://bugzilla.mozilla.org/show_bug.cgi?id=722975 https://bug722975.bugzilla.mozilla.org/attachment.cgi?id=595138 diff -Naurp cairo-1.10.2/src/cairo-analysis-surface-private.h cairo-1.10.2.oden/src/cairo-analysis-surface-private.h --- cairo-1.10.2/src/cairo-analysis-surface-private.h 2010-06-18 11:47:11.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-analysis-surface-private.h 2012-04-26 07:41:40.000000000 +0000 @@ -68,7 +68,4 @@ cairo_private cairo_int_status_t _cairo_analysis_surface_merge_status (cairo_int_status_t status_a, cairo_int_status_t status_b); -cairo_private cairo_surface_t * -_cairo_null_surface_create (cairo_content_t content); - #endif /* CAIRO_ANALYSIS_SURFACE_H */ diff -Naurp cairo-1.10.2/src/cairo-analysis-surface.c cairo-1.10.2.oden/src/cairo-analysis-surface.c --- cairo-1.10.2/src/cairo-analysis-surface.c 2010-12-13 16:30:14.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-analysis-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -887,7 +887,7 @@ static const cairo_surface_backend_t cai }; cairo_surface_t * -_cairo_null_surface_create (cairo_content_t content) +cairo_null_surface_create (cairo_content_t content) { cairo_surface_t *surface; diff -Naurp cairo-1.10.2/src/cairo-recording-surface.c cairo-1.10.2.oden/src/cairo-recording-surface.c --- cairo-1.10.2/src/cairo-recording-surface.c 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-recording-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -281,7 +281,7 @@ _cairo_recording_surface_acquire_source_ return status; } - _cairo_surface_attach_snapshot (&surface->base, image, NULL); + cairo_surface_attach_snapshot (&surface->base, image, NULL); *image_out = (cairo_image_surface_t *) image; *image_extra = NULL; @@ -1051,7 +1051,7 @@ _recording_surface_get_ink_bbox (cairo_r cairo_surface_t *analysis_surface; cairo_status_t status; - null_surface = _cairo_null_surface_create (surface->content); + null_surface = cairo_null_surface_create (surface->content); analysis_surface = _cairo_analysis_surface_create (null_surface); cairo_surface_destroy (null_surface); diff -Naurp cairo-1.10.2/src/cairo-surface-private.h cairo-1.10.2.oden/src/cairo-surface-private.h --- cairo-1.10.2/src/cairo-surface-private.h 2010-06-18 11:47:13.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-surface-private.h 2012-04-26 07:41:40.000000000 +0000 @@ -45,8 +45,6 @@ #include "cairo-reference-count-private.h" #include "cairo-clip-private.h" -typedef void (*cairo_surface_func_t) (cairo_surface_t *); - struct _cairo_surface { const cairo_surface_backend_t *backend; cairo_device_t *device; diff -Naurp cairo-1.10.2/src/cairo-surface-snapshot.c cairo-1.10.2.oden/src/cairo-surface-snapshot.c --- cairo-1.10.2/src/cairo-surface-snapshot.c 2010-06-18 11:47:13.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-surface-snapshot.c 2012-04-26 07:41:40.000000000 +0000 @@ -214,7 +214,7 @@ _cairo_surface_snapshot (cairo_surface_t snap->device_transform = surface->device_transform; snap->device_transform_inverse = surface->device_transform_inverse; - _cairo_surface_attach_snapshot (surface, snap, NULL); + cairo_surface_attach_snapshot (surface, snap, NULL); return snap; } @@ -247,7 +247,7 @@ _cairo_surface_snapshot (cairo_surface_t snapshot->base.device_transform = surface->device_transform; snapshot->base.device_transform_inverse = surface->device_transform_inverse; - _cairo_surface_attach_snapshot (surface, + cairo_surface_attach_snapshot (surface, &snapshot->base, _cairo_surface_snapshot_copy_on_write); diff -Naurp cairo-1.10.2/src/cairo-surface-subsurface.c cairo-1.10.2.oden/src/cairo-surface-subsurface.c --- cairo-1.10.2/src/cairo-surface-subsurface.c 2010-09-09 15:56:24.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-surface-subsurface.c 2012-04-26 07:41:40.000000000 +0000 @@ -331,7 +331,7 @@ _cairo_surface_subsurface_acquire_source cairo_surface_paint_to_target (&image->base, surface); - _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); + cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); *image_out = image; *extra_out = NULL; diff -Naurp cairo-1.10.2/src/cairo-surface.c cairo-1.10.2.oden/src/cairo-surface.c --- cairo-1.10.2/src/cairo-surface.c 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -308,17 +308,17 @@ _cairo_surface_detach_mime_data (cairo_s } static void -_cairo_surface_detach_snapshots (cairo_surface_t *surface) +cairo_surface_detach_snapshots (cairo_surface_t *surface) { while (_cairo_surface_has_snapshots (surface)) { - _cairo_surface_detach_snapshot (cairo_list_first_entry (&surface->snapshots, + cairo_surface_detach_snapshot (cairo_list_first_entry (&surface->snapshots, cairo_surface_t, snapshot)); } } void -_cairo_surface_detach_snapshot (cairo_surface_t *snapshot) +cairo_surface_detach_snapshot (cairo_surface_t *snapshot) { assert (snapshot->snapshot_of != NULL); @@ -332,7 +332,7 @@ _cairo_surface_detach_snapshot (cairo_su } void -_cairo_surface_attach_snapshot (cairo_surface_t *surface, +cairo_surface_attach_snapshot (cairo_surface_t *surface, cairo_surface_t *snapshot, cairo_surface_func_t detach_func) { @@ -342,7 +342,7 @@ _cairo_surface_attach_snapshot (cairo_su cairo_surface_reference (snapshot); if (snapshot->snapshot_of != NULL) - _cairo_surface_detach_snapshot (snapshot); + cairo_surface_detach_snapshot (snapshot); snapshot->snapshot_of = surface; snapshot->snapshot_detach = detach_func; @@ -385,7 +385,7 @@ _cairo_surface_begin_modification (cairo assert (! surface->finished); assert (surface->snapshot_of == NULL); - _cairo_surface_detach_snapshots (surface); + cairo_surface_detach_snapshots (surface); _cairo_surface_detach_mime_data (surface); } @@ -712,9 +712,9 @@ cairo_surface_finish (cairo_surface_t *s return; /* update the snapshots *before* we declare the surface as finished */ - _cairo_surface_detach_snapshots (surface); + cairo_surface_detach_snapshots (surface); if (surface->snapshot_of != NULL) - _cairo_surface_detach_snapshot (surface); + cairo_surface_detach_snapshot (surface); cairo_surface_flush (surface); surface->finished = TRUE; @@ -1107,7 +1107,7 @@ cairo_surface_flush (cairo_surface_t *su return; /* update the current snapshots *before* the user updates the surface */ - _cairo_surface_detach_snapshots (surface); + cairo_surface_detach_snapshots (surface); if (surface->backend->flush) { status = surface->backend->flush (surface); @@ -1613,7 +1613,7 @@ _cairo_recording_surface_clone_similar ( return status; } - _cairo_surface_attach_snapshot (src, similar, NULL); + cairo_surface_attach_snapshot (src, similar, NULL); src_x = src_y = 0; } diff -Naurp cairo-1.10.2/src/cairo-vg-surface.c cairo-1.10.2.oden/src/cairo-vg-surface.c --- cairo-1.10.2/src/cairo-vg-surface.c 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-vg-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -982,7 +982,7 @@ _vg_setup_surface_source (cairo_vg_conte return status; } - _cairo_surface_attach_snapshot (spat->surface, &clone->base, + cairo_surface_attach_snapshot (spat->surface, &clone->base, _vg_surface_remove_from_cache); DONE: diff -Naurp cairo-1.10.2/src/cairo-xcb-screen.c cairo-1.10.2.oden/src/cairo-xcb-screen.c --- cairo-1.10.2/src/cairo-xcb-screen.c 2010-06-18 11:47:14.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-xcb-screen.c 2012-04-26 07:41:40.000000000 +0000 @@ -117,7 +117,7 @@ _surface_cache_entry_destroy (void *clos struct pattern_cache_entry *entry = closure; if (entry->picture->snapshot_of != NULL) - _cairo_surface_detach_snapshot (entry->picture); + cairo_surface_detach_snapshot (entry->picture); cairo_surface_destroy (entry->picture); _cairo_freelist_free (&entry->screen->pattern_cache_entry_freelist, entry); } diff -Naurp cairo-1.10.2/src/cairo-xcb-surface-core.c cairo-1.10.2.oden/src/cairo-xcb-surface-core.c --- cairo-1.10.2/src/cairo-xcb-surface-core.c 2010-06-18 11:47:14.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-xcb-surface-core.c 2012-04-26 07:41:40.000000000 +0000 @@ -404,7 +404,7 @@ _cairo_xcb_surface_pixmap (cairo_xcb_sur if (unlikely (pixmap->base.status)) return pixmap; - _cairo_surface_attach_snapshot (source, &pixmap->base, NULL); + cairo_surface_attach_snapshot (source, &pixmap->base, NULL); if (pattern->base.extend != CAIRO_EXTEND_NONE) { if (extents->x < 0 || extents->y < 0 || diff -Naurp cairo-1.10.2/src/cairo-xcb-surface-render.c cairo-1.10.2.oden/src/cairo-xcb-surface-render.c --- cairo-1.10.2/src/cairo-xcb-surface-render.c 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-xcb-surface-render.c 2012-04-26 07:41:40.000000000 +0000 @@ -1391,7 +1391,7 @@ _cairo_xcb_surface_picture (cairo_xcb_su return (cairo_xcb_picture_t *) _cairo_surface_create_in_error (status); } - _cairo_surface_attach_snapshot (source, + cairo_surface_attach_snapshot (source, &picture->base, cairo_surface_finish); @@ -2743,7 +2743,7 @@ _upload_image_inplace (cairo_xcb_surface if (surface->width == image->width && surface->height == image->height && extents->width == image->width && extents->height == image->height) { - _cairo_surface_attach_snapshot (&image->base, &surface->base, NULL); + cairo_surface_attach_snapshot (&image->base, &surface->base, NULL); } return CAIRO_STATUS_SUCCESS; diff -Naurp cairo-1.10.2/src/cairo-xcb-surface.c cairo-1.10.2.oden/src/cairo-xcb-surface.c --- cairo-1.10.2/src/cairo-xcb-surface.c 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo-xcb-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -565,7 +565,7 @@ _cairo_xcb_surface_acquire_source_image if (unlikely (status)) return status; - _cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); + cairo_surface_attach_snapshot (&surface->base, &image->base, NULL); DONE: *image_out = image; @@ -715,7 +715,7 @@ _cairo_xcb_surface_flush (void *abstract } if (status == CAIRO_STATUS_SUCCESS) { - _cairo_surface_attach_snapshot (&surface->base, + cairo_surface_attach_snapshot (&surface->base, surface->fallback, cairo_surface_finish); } diff -Naurp cairo-1.10.2/src/cairo.h cairo-1.10.2.oden/src/cairo.h --- cairo-1.10.2/src/cairo.h 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairo.h 2012-04-26 07:41:40.000000000 +0000 @@ -219,6 +219,15 @@ typedef struct _cairo_pattern cairo_patt typedef void (*cairo_destroy_func_t) (void *data); /** + * cairo_surface_func_t: + * @surface: The surface being referred to. + * + * #cairo_surface_func_t the type of function which is used for callback + * when a surface needs to be passed as a parameter. + */ +typedef void (*cairo_surface_func_t) (cairo_surface_t *surface); + +/** * cairo_user_data_key_t: * @unused: not used; ignore. * @@ -2151,6 +2160,14 @@ cairo_surface_set_user_data (cairo_surfa void *user_data, cairo_destroy_func_t destroy); +cairo_public void +cairo_surface_attach_snapshot (cairo_surface_t *surface, + cairo_surface_t *snapshot, + cairo_surface_func_t detach_func); + +cairo_public void +cairo_surface_detach_snapshot (cairo_surface_t *snapshot); + #define CAIRO_MIME_TYPE_JPEG "image/jpeg" #define CAIRO_MIME_TYPE_PNG "image/png" #define CAIRO_MIME_TYPE_JP2 "image/jp2" @@ -2310,6 +2327,11 @@ cairo_recording_surface_ink_extents (cai double *width, double *height); +/* Null-surface functions */ + +cairo_public cairo_surface_t * +cairo_null_surface_create (cairo_content_t content); + /* Pattern creation functions */ cairo_public cairo_pattern_t * diff -Naurp cairo-1.10.2/src/cairoint.h cairo-1.10.2.oden/src/cairoint.h --- cairo-1.10.2/src/cairoint.h 2010-12-25 14:21:34.000000000 +0000 +++ cairo-1.10.2.oden/src/cairoint.h 2012-04-26 07:41:40.000000000 +0000 @@ -1746,17 +1746,9 @@ _cairo_surface_clone_similar (cairo_surf cairo_private cairo_surface_t * _cairo_surface_snapshot (cairo_surface_t *surface); -cairo_private void -_cairo_surface_attach_snapshot (cairo_surface_t *surface, - cairo_surface_t *snapshot, - cairo_surface_func_t detach_func); - cairo_private cairo_surface_t * _cairo_surface_has_snapshot (cairo_surface_t *surface, - const cairo_surface_backend_t *backend); - -cairo_private void -_cairo_surface_detach_snapshot (cairo_surface_t *snapshot); + const cairo_surface_backend_t *backend); cairo_private cairo_bool_t _cairo_surface_is_similar (cairo_surface_t *surface_a, diff -Naurp cairo-1.10.2/src/drm/cairo-drm-i915-shader.c cairo-1.10.2.oden/src/drm/cairo-drm-i915-shader.c --- cairo-1.10.2/src/drm/cairo-drm-i915-shader.c 2010-09-09 15:56:24.000000000 +0000 +++ cairo-1.10.2.oden/src/drm/cairo-drm-i915-shader.c 2012-04-26 07:41:40.000000000 +0000 @@ -1682,7 +1682,7 @@ i915_shader_acquire_surface (i915_shader image, &s); if (likely (status == CAIRO_STATUS_SUCCESS)) { - _cairo_surface_attach_snapshot (surface, + cairo_surface_attach_snapshot (surface, &s->intel.drm.base, intel_surface_detach_snapshot); diff -Naurp cairo-1.10.2/src/drm/cairo-drm-i965-shader.c cairo-1.10.2.oden/src/drm/cairo-drm-i965-shader.c --- cairo-1.10.2/src/drm/cairo-drm-i965-shader.c 2010-09-09 15:56:24.000000000 +0000 +++ cairo-1.10.2.oden/src/drm/cairo-drm-i965-shader.c 2012-04-26 07:41:40.000000000 +0000 @@ -284,7 +284,7 @@ i965_surface_clone (i965_device_t *devic return status; } - _cairo_surface_attach_snapshot (&image->base, + cairo_surface_attach_snapshot (&image->base, &clone->intel.drm.base, intel_surface_detach_snapshot); @@ -589,7 +589,7 @@ i965_shader_acquire_surface (i965_shader if (bo->purgeable && ! intel_bo_madvise (&device->intel, bo, I915_MADV_WILLNEED)) { - _cairo_surface_detach_snapshot (&s->intel.drm.base); + cairo_surface_detach_snapshot (&s->intel.drm.base); s = NULL; } diff -Naurp cairo-1.10.2/src/drm/cairo-drm-intel-surface.c cairo-1.10.2.oden/src/drm/cairo-drm-intel-surface.c --- cairo-1.10.2/src/drm/cairo-drm-intel-surface.c 2010-06-18 11:47:15.000000000 +0000 +++ cairo-1.10.2.oden/src/drm/cairo-drm-intel-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -104,7 +104,7 @@ intel_surface_acquire_source_image (void if (unlikely (image->status)) return image->status; - _cairo_surface_attach_snapshot (&surface->drm.base, image, surface_finish_and_destroy); + cairo_surface_attach_snapshot (&surface->drm.base, image, surface_finish_and_destroy); DONE: *image_out = (cairo_image_surface_t *) cairo_surface_reference (image); diff -Naurp cairo-1.10.2/src/drm/cairo-drm-radeon-surface.c cairo-1.10.2.oden/src/drm/cairo-drm-radeon-surface.c --- cairo-1.10.2/src/drm/cairo-drm-radeon-surface.c 2010-06-18 11:47:15.000000000 +0000 +++ cairo-1.10.2.oden/src/drm/cairo-drm-radeon-surface.c 2012-04-26 07:41:40.000000000 +0000 @@ -106,7 +106,7 @@ radeon_surface_acquire_source_image (voi if (unlikely (status)) return status; - _cairo_surface_attach_snapshot (&surface->base.base, image, cairo_surface_destroy); + cairo_surface_attach_snapshot (&surface->base.base, image, cairo_surface_destroy); DONE: *image_out = (cairo_image_surface_t *) cairo_surface_reference (image);