summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2012-01-30 15:12:57 +0100
committerAndrea Canciani <ranma42@gmail.com>2012-02-11 15:10:22 +0100
commitf2567e95a164d3874909baf09b94b45288604e53 (patch)
treed9fab6b72c5ebb61359ffb0461f105b8ba3e398b
parentf7eaf37f0432952ce12708e32e0641fa97bfd715 (diff)
observer: Return status when printing the observed data
Making cairo_surface_observer_print() and cairo_device_observer_print() return the status of the observer or of the stream makes it possible to correctly track what kind of error happens if the print is not successful. This makes the functions more consistent with existing API with a similar signature like cairo_surface_write_to_png_stream().
-rw-r--r--src/cairo-surface-observer.c24
-rw-r--r--src/cairo.h4
2 files changed, 14 insertions, 14 deletions
diff --git a/src/cairo-surface-observer.c b/src/cairo-surface-observer.c
index e5d33714d..3ac089290 100644
--- a/src/cairo-surface-observer.c
+++ b/src/cairo-surface-observer.c
@@ -1957,7 +1957,7 @@ _cairo_observation_print (cairo_output_stream_t *stream,
cairo_device_destroy (script);
}
-void
+cairo_status_t
cairo_surface_observer_print (cairo_surface_t *abstract_surface,
cairo_write_func_t write_func,
void *closure)
@@ -1965,17 +1965,17 @@ cairo_surface_observer_print (cairo_surface_t *abstract_surface,
cairo_output_stream_t *stream;
cairo_surface_observer_t *surface;
- if (unlikely (CAIRO_REFERENCE_COUNT_IS_INVALID (&abstract_surface->ref_count)))
- return;
+ if (unlikely (abstract_surface->status))
+ return abstract_surface->status;
- if (! _cairo_surface_is_observer (abstract_surface))
- return;
+ if (unlikely (! _cairo_surface_is_observer (abstract_surface)))
+ return _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
surface = (cairo_surface_observer_t *) abstract_surface;
stream = _cairo_output_stream_create (write_func, NULL, closure);
_cairo_observation_print (stream, &surface->log);
- _cairo_output_stream_destroy (stream);
+ return _cairo_output_stream_destroy (stream);
}
double
@@ -1993,7 +1993,7 @@ cairo_surface_observer_elapsed (cairo_surface_t *abstract_surface)
return _cairo_time_to_ns (_cairo_observation_total_elapsed (&surface->log));
}
-void
+cairo_status_t
cairo_device_observer_print (cairo_device_t *abstract_device,
cairo_write_func_t write_func,
void *closure)
@@ -2001,17 +2001,17 @@ cairo_device_observer_print (cairo_device_t *abstract_device,
cairo_output_stream_t *stream;
cairo_device_observer_t *device;
- if (unlikely (CAIRO_REFERENCE_COUNT_IS_INVALID (&abstract_device->ref_count)))
- return;
+ if (unlikely (abstract_device->status))
+ return abstract_device->status;
- if (! _cairo_device_is_observer (abstract_device))
- return;
+ if (unlikely (! _cairo_device_is_observer (abstract_device)))
+ return _cairo_error (CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
device = (cairo_device_observer_t *) abstract_device;
stream = _cairo_output_stream_create (write_func, NULL, closure);
_cairo_observation_print (stream, &device->log);
- _cairo_output_stream_destroy (stream);
+ return _cairo_output_stream_destroy (stream);
}
double
diff --git a/src/cairo.h b/src/cairo.h
index a64a8a00c..0a004f3d1 100644
--- a/src/cairo.h
+++ b/src/cairo.h
@@ -2192,14 +2192,14 @@ cairo_surface_observer_add_finish_callback (cairo_surface_t *abstract_surface,
cairo_surface_observer_callback_t func,
void *data);
-cairo_public void
+cairo_public cairo_status_t
cairo_surface_observer_print (cairo_surface_t *surface,
cairo_write_func_t write_func,
void *closure);
cairo_public double
cairo_surface_observer_elapsed (cairo_surface_t *surface);
-cairo_public void
+cairo_public cairo_status_t
cairo_device_observer_print (cairo_device_t *device,
cairo_write_func_t write_func,
void *closure);