diff --git a/src/cairo-surface.c b/src/cairo-surface.c index 014acf3ab..75cccaebb 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -606,11 +606,11 @@ _cairo_surface_set_font_options (cairo_surface_t *surface, { cairo_status_t status; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); @@ -704,6 +704,9 @@ slim_hidden_def (cairo_surface_flush); void cairo_surface_mark_dirty (cairo_surface_t *surface) { + if (surface->status) + return; + assert (! surface->is_snapshot); cairo_surface_mark_dirty_rectangle (surface, 0, 0, -1, -1); @@ -734,11 +737,11 @@ cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface, { cairo_status_t status; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); return; @@ -792,11 +795,11 @@ _cairo_surface_set_device_scale (cairo_surface_t *surface, { cairo_status_t status; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); return; @@ -838,11 +841,11 @@ cairo_surface_set_device_offset (cairo_surface_t *surface, { cairo_status_t status; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); return; @@ -921,11 +924,11 @@ cairo_surface_set_fallback_resolution (cairo_surface_t *surface, { cairo_status_t status; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); return; @@ -987,11 +990,11 @@ _cairo_surface_acquire_source_image (cairo_surface_t *surface, cairo_image_surface_t **image_out, void **image_extra) { - assert (!surface->finished); - if (surface->status) return surface->status; + assert (!surface->finished); + if (surface->backend->acquire_source_image == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; @@ -1056,11 +1059,11 @@ _cairo_surface_acquire_dest_image (cairo_surface_t *surface, cairo_rectangle_int_t *image_rect, void **image_extra) { - assert (!surface->finished); - if (surface->status) return surface->status; + assert (!surface->finished); + if (surface->backend->acquire_dest_image == NULL) return CAIRO_INT_STATUS_UNSUPPORTED; @@ -1265,8 +1268,6 @@ _cairo_surface_composite (cairo_operator_t op, { cairo_int_status_t status; - assert (! dst->is_snapshot); - if (mask) { /* These operators aren't interpreted the same way by the backends; * they are implemented in terms of other operators in cairo-gstate.c @@ -1277,6 +1278,8 @@ _cairo_surface_composite (cairo_operator_t op, if (dst->status) return dst->status; + assert (! dst->is_snapshot); + if (dst->finished) return _cairo_surface_set_error (dst, CAIRO_STATUS_SURFACE_FINISHED); @@ -1326,11 +1329,11 @@ _cairo_surface_fill_rectangle (cairo_surface_t *surface, { cairo_rectangle_int_t rect; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + if (surface->finished) return _cairo_surface_set_error (surface,CAIRO_STATUS_SURFACE_FINISHED); @@ -1368,11 +1371,11 @@ _cairo_surface_fill_region (cairo_surface_t *surface, cairo_status_t status; int i; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + num_boxes = _cairo_region_num_boxes (region); if (num_boxes == 0) @@ -1440,11 +1443,11 @@ _cairo_surface_fill_rectangles (cairo_surface_t *surface, { cairo_int_status_t status; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + if (surface->finished) return _cairo_surface_set_error (surface,CAIRO_STATUS_SURFACE_FINISHED); @@ -1471,11 +1474,11 @@ _cairo_surface_paint (cairo_surface_t *surface, cairo_status_t status; cairo_pattern_t *dev_source; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source); if (status) return _cairo_surface_set_error (surface, status); @@ -1504,11 +1507,11 @@ _cairo_surface_mask (cairo_surface_t *surface, cairo_pattern_t *dev_source; cairo_pattern_t *dev_mask; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source); if (status) goto FINISH; @@ -1616,11 +1619,11 @@ _cairo_surface_stroke (cairo_surface_t *surface, cairo_matrix_t dev_ctm = *ctm; cairo_matrix_t dev_ctm_inverse = *ctm_inverse; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source); if (status) return _cairo_surface_set_error (surface, status); @@ -1660,11 +1663,11 @@ _cairo_surface_fill (cairo_surface_t *surface, cairo_status_t status; cairo_pattern_t *dev_source; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + status = _cairo_surface_copy_pattern_for_destination (source, surface, &dev_source); if (status) return _cairo_surface_set_error (surface, status); @@ -1704,8 +1707,6 @@ _cairo_surface_composite_trapezoids (cairo_operator_t op, { cairo_int_status_t status; - assert (! dst->is_snapshot); - /* These operators aren't interpreted the same way by the backends; * they are implemented in terms of other operators in cairo-gstate.c */ @@ -1714,6 +1715,8 @@ _cairo_surface_composite_trapezoids (cairo_operator_t op, if (dst->status) return dst->status; + assert (! dst->is_snapshot); + if (dst->finished) return _cairo_surface_set_error (dst, CAIRO_STATUS_SURFACE_FINISHED); @@ -1757,11 +1760,11 @@ cairo_surface_copy_page (cairo_surface_t *surface) { cairo_status_t status_ignored; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status_ignored = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); @@ -1794,11 +1797,11 @@ cairo_surface_show_page (cairo_surface_t *surface) { cairo_status_t status_ignored; - assert (! surface->is_snapshot); - if (surface->status) return; + assert (! surface->is_snapshot); + if (surface->finished) { status_ignored = _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED); @@ -1915,9 +1918,6 @@ _cairo_surface_set_clip_region (cairo_surface_t *surface, if (surface->status) return surface->status; - if (surface->finished) - return _cairo_surface_set_error (surface,CAIRO_STATUS_SURFACE_FINISHED); - assert (surface->backend->set_clip_region != NULL); surface->current_clip_serial = serial; @@ -2232,11 +2232,11 @@ _cairo_surface_show_text_glyphs (cairo_surface_t *surface, cairo_scaled_font_t *dev_scaled_font = scaled_font; cairo_pattern_t *dev_source; - assert (! surface->is_snapshot); - if (surface->status) return surface->status; + assert (! surface->is_snapshot); + if (!num_glyphs && !utf8_len) return CAIRO_STATUS_SUCCESS; @@ -2359,11 +2359,11 @@ _cairo_surface_old_show_glyphs (cairo_scaled_font_t *scaled_font, { cairo_status_t status; - assert (! dst->is_snapshot); - if (dst->status) return dst->status; + assert (! dst->is_snapshot); + if (dst->finished) return _cairo_surface_set_error (dst, CAIRO_STATUS_SURFACE_FINISHED); @@ -2483,11 +2483,11 @@ _cairo_surface_composite_fixup_unbounded (cairo_surface_t *dst, cairo_rectangle_int_t *src_rectangle = NULL; cairo_rectangle_int_t *mask_rectangle = NULL; - assert (! dst->is_snapshot); - if (dst->status) return dst->status; + assert (! dst->is_snapshot); + /* The RENDER/libpixman operators are clipped to the bounds of the untransformed, * non-repeating sources and masks. Other sources and masks can be ignored. */ @@ -2561,11 +2561,11 @@ _cairo_surface_composite_shape_fixup_unbounded (cairo_surface_t *dst, cairo_rectangle_int_t *src_rectangle = NULL; cairo_rectangle_int_t *mask_rectangle = NULL; - assert (! dst->is_snapshot); - if (dst->status) return dst->status; + assert (! dst->is_snapshot); + /* The RENDER/libpixman operators are clipped to the bounds of the untransformed, * non-repeating sources and masks. Other sources and masks can be ignored. */