[cairo-surface] Check surface status on internal paths as well.

Return any error status on the surface to the caller.
This commit is contained in:
Chris Wilson 2008-02-19 15:14:37 +00:00
parent 1d59daecfe
commit e208f31236

View file

@ -941,6 +941,9 @@ _cairo_surface_acquire_source_image (cairo_surface_t *surface,
{
assert (!surface->finished);
if (surface->status)
return surface->status;
if (surface->backend->acquire_source_image == NULL)
return CAIRO_INT_STATUS_UNSUPPORTED;
@ -1007,6 +1010,9 @@ _cairo_surface_acquire_dest_image (cairo_surface_t *surface,
{
assert (!surface->finished);
if (surface->status)
return surface->status;
if (surface->backend->acquire_dest_image == NULL)
return CAIRO_INT_STATUS_UNSUPPORTED;
@ -1077,6 +1083,9 @@ _cairo_surface_clone_similar (cairo_surface_t *surface,
cairo_image_surface_t *image;
void *image_extra;
if (surface->status)
return surface->status;
if (surface->finished)
return _cairo_error (CAIRO_STATUS_SURFACE_FINISHED);
@ -1114,7 +1123,7 @@ _cairo_surface_clone_similar (cairo_surface_t *surface,
if (*clone_out != src) {
(*clone_out)->device_transform = src->device_transform;
(*clone_out)->device_transform_inverse = src->device_transform_inverse;
}
}
return status;
}
@ -1139,6 +1148,9 @@ _cairo_surface_clone_similar (cairo_surface_t *surface,
cairo_surface_t *
_cairo_surface_snapshot (cairo_surface_t *surface)
{
if (surface->status)
return _cairo_surface_create_in_error (surface->status);
if (surface->finished)
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
@ -1298,6 +1310,9 @@ _cairo_surface_fill_region (cairo_surface_t *surface,
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
num_boxes = _cairo_region_num_boxes (region);
if (num_boxes == 0)
@ -1398,6 +1413,9 @@ _cairo_surface_paint (cairo_surface_t *surface,
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
return _cairo_surface_set_error (surface, status);
@ -1428,6 +1446,9 @@ _cairo_surface_mask (cairo_surface_t *surface,
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
goto FINISH;
@ -1471,6 +1492,9 @@ _cairo_surface_fill_stroke (cairo_surface_t *surface,
{
cairo_status_t status;
if (surface->status)
return surface->status;
if (surface->backend->fill_stroke) {
cairo_pattern_t *dev_stroke_source;
cairo_pattern_t *dev_fill_source;
@ -1534,6 +1558,9 @@ _cairo_surface_stroke (cairo_surface_t *surface,
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
return _cairo_surface_set_error (surface, status);
@ -1575,6 +1602,9 @@ _cairo_surface_fill (cairo_surface_t *surface,
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source);
if (status)
return _cairo_surface_set_error (surface, status);
@ -1862,6 +1892,9 @@ _cairo_surface_set_clip_path_recursive (cairo_surface_t *surface,
{
cairo_status_t status;
if (surface->status)
return surface->status;
if (clip_path == NULL)
return CAIRO_STATUS_SUCCESS;
@ -1933,6 +1966,9 @@ _cairo_surface_set_empty_clip_path (cairo_surface_t *surface,
cairo_path_fixed_t path;
cairo_status_t status;
if (surface->status)
return surface->status;
_cairo_path_fixed_init (&path);
status = surface->backend->intersect_clip_path (surface,
@ -2058,6 +2094,9 @@ _cairo_surface_show_glyphs (cairo_surface_t *surface,
assert (! surface->is_snapshot);
if (surface->status)
return surface->status;
if (!num_glyphs)
return CAIRO_STATUS_SUCCESS;
@ -2263,6 +2302,9 @@ _cairo_surface_composite_fixup_unbounded (cairo_surface_t *dst,
assert (! dst->is_snapshot);
if (dst->status)
return dst->status;
/* The RENDER/libpixman operators are clipped to the bounds of the untransformed,
* non-repeating sources and masks. Other sources and masks can be ignored.
*/
@ -2338,6 +2380,9 @@ _cairo_surface_composite_shape_fixup_unbounded (cairo_surface_t *dst,
assert (! dst->is_snapshot);
if (dst->status)
return dst->status;
/* The RENDER/libpixman operators are clipped to the bounds of the untransformed,
* non-repeating sources and masks. Other sources and masks can be ignored.
*/
@ -2413,6 +2458,9 @@ _cairo_surface_set_resolution (cairo_surface_t *surface,
double x_res,
double y_res)
{
if (surface->status)
return;
surface->x_resolution = x_res;
surface->y_resolution = y_res;
}