mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-06 03:28:09 +02:00
[surface] Reorder asserts to make no assumptions about error objects.
If the surface is in error, then we cannot assume anything about the validity of its contents other than the error status (and reference count). This is for the cases were the surface is replaced by a nil surface, and in future where the error surface may be replaced by a tiny error object.
This commit is contained in:
parent
644e78ca4e
commit
1ddf0b2a5c
1 changed files with 47 additions and 47 deletions
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue