diff --git a/src/cairo-analysis-surface.c b/src/cairo-analysis-surface.c index 0ae09a8c1..10dbaf1bb 100644 --- a/src/cairo-analysis-surface.c +++ b/src/cairo-analysis-surface.c @@ -120,7 +120,7 @@ _analyze_recording_surface_pattern (cairo_analysis_surface_t *surface, surface->has_ctm = ! _cairo_matrix_is_identity (&surface->ctm); source = surface_pattern->surface; - if (source->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) + if (_cairo_surface_is_snapshot (source)) source = _cairo_surface_snapshot_get_target (source); if (source->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) { cairo_surface_subsurface_t *sub = (cairo_surface_subsurface_t *) source; diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 7efcc7804..bda05eb9f 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -1406,8 +1406,8 @@ _pixman_image_for_surface (const cairo_surface_pattern_t *pattern, cairo_image_surface_t *source = (cairo_image_surface_t *) pattern->surface; cairo_surface_type_t type; - if (source->base.backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) - source = (cairo_image_surface_t *) ((cairo_surface_snapshot_t *) pattern->surface)->target; + if (_cairo_surface_is_snapshot (&source->base)) + source = (cairo_image_surface_t *) _cairo_surface_snapshot_get_target (&source->base); type = source->base.backend->type; if (type == CAIRO_SURFACE_TYPE_IMAGE) { @@ -2963,6 +2963,8 @@ is_recording_pattern (const cairo_pattern_t *pattern) surface = ((const cairo_surface_pattern_t *) pattern)->surface; if (_cairo_surface_is_paginated (surface)) surface = _cairo_paginated_surface_get_recording (surface); + if (_cairo_surface_is_snapshot (surface)) + surface = _cairo_surface_snapshot_get_target (surface); return _cairo_surface_is_recording (surface); } @@ -2974,6 +2976,8 @@ recording_pattern_get_surface (const cairo_pattern_t *pattern) surface = ((const cairo_surface_pattern_t *) pattern)->surface; if (_cairo_surface_is_paginated (surface)) surface = _cairo_paginated_surface_get_recording (surface); + if (_cairo_surface_is_snapshot (surface)) + surface = _cairo_surface_snapshot_get_target (surface); return surface; } diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 0e531701d..3a4a4025b 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -1114,7 +1114,7 @@ _get_source_surface_size (cairo_surface_t *source, cairo_recording_surface_t *recording_surface; cairo_box_t bbox; - if (source->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) + if (_cairo_surface_is_snapshot (source)) source = _cairo_surface_snapshot_get_target (source); recording_surface = (cairo_recording_surface_t *) source; @@ -2381,7 +2381,7 @@ _cairo_pdf_surface_emit_recording_surface (cairo_pdf_surface_t *surface, cairo_int_status_t status; int alpha = 0; - if (source->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) + if (_cairo_surface_is_snapshot (source)) source = _cairo_surface_snapshot_get_target (source); is_bounded = _cairo_surface_get_extents (source, @@ -5957,7 +5957,7 @@ _cairo_pdf_surface_mask (void *abstract_surface, cairo_status_t source_status, mask_status; status = _cairo_pdf_surface_analyze_operation (surface, op, source, &extents.bounded); - if (_cairo_status_is_error (status)) + if (_cairo_int_status_is_error (status)) goto cleanup; source_status = status; @@ -5965,7 +5965,7 @@ _cairo_pdf_surface_mask (void *abstract_surface, status = CAIRO_INT_STATUS_UNSUPPORTED; } else { status = _cairo_pdf_surface_analyze_operation (surface, op, mask, &extents.bounded); - if (_cairo_status_is_error (status)) + if (_cairo_int_status_is_error (status)) goto cleanup; } mask_status = status; diff --git a/src/cairo-script-surface.c b/src/cairo-script-surface.c index a93b0caff..44a92289b 100644 --- a/src/cairo-script-surface.c +++ b/src/cairo-script-surface.c @@ -1570,7 +1570,7 @@ _emit_surface_pattern (cairo_script_surface_t *surface, surface_pattern = (cairo_surface_pattern_t *) pattern; source = surface_pattern->surface; - if (source->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) { + if (_cairo_surface_is_snapshot (source)) { snapshot = _cairo_surface_has_snapshot (source, &script_snapshot_backend); if (snapshot) { _cairo_output_stream_printf (ctx->stream, diff --git a/src/cairo-surface-snapshot-private.h b/src/cairo-surface-snapshot-private.h index 4d88b68e7..7e0ace186 100644 --- a/src/cairo-surface-snapshot-private.h +++ b/src/cairo-surface-snapshot-private.h @@ -57,4 +57,10 @@ _cairo_surface_snapshot_get_target (cairo_surface_t *surface) return ((cairo_surface_snapshot_t *) surface)->target; } +static inline cairo_bool_t +_cairo_surface_is_snapshot (cairo_surface_t *surface) +{ + return surface->backend->type == (cairo_surface_type_t)CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT; +} + #endif /* CAIRO_SURFACE_SNAPSHOT_PRIVATE_H */ diff --git a/src/cairo-surface-subsurface.c b/src/cairo-surface-subsurface.c index b57c97b77..73be5f2d7 100644 --- a/src/cairo-surface-subsurface.c +++ b/src/cairo-surface-subsurface.c @@ -316,7 +316,7 @@ _cairo_surface_subsurface_acquire_source_image (void *abstrac } meta = surface->target; - if (surface->target->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) + if (_cairo_surface_is_snapshot (meta)) meta = _cairo_surface_snapshot_get_target (meta); if (! _cairo_surface_has_snapshot (meta, &_cairo_image_surface_backend)) { diff --git a/src/cairo-xcb-surface-render.c b/src/cairo-xcb-surface-render.c index b42795e84..d146fe955 100644 --- a/src/cairo-xcb-surface-render.c +++ b/src/cairo-xcb-surface-render.c @@ -1084,7 +1084,7 @@ _cairo_xcb_surface_picture (cairo_xcb_surface_t *target, picture->width = rect.width; picture->height = rect.height; } - } else if (source->backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) { + } else if (_cairo_surface_is_snapshot (source)) { cairo_surface_snapshot_t *snap = (cairo_surface_snapshot_t *) source; cairo_xcb_surface_t *xcb = (cairo_xcb_surface_t *) snap->target; diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c index b2fa0a7a1..885dc5928 100644 --- a/src/cairo-xlib-surface.c +++ b/src/cairo-xlib-surface.c @@ -2412,7 +2412,7 @@ _cairo_xlib_surface_upload(cairo_xlib_surface_t *surface, return CAIRO_INT_STATUS_UNSUPPORTED; if (image->base.backend->type != CAIRO_SURFACE_TYPE_IMAGE) { - if (image->base.backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT) { + if (_cairo_surface_is_snapshot (&image->base)) { image = (cairo_image_surface_t *) ((cairo_surface_snapshot_t *) image)->target; extents.x = extents.y = 0; extents.width = image->width;