Skip to content

Commit

Permalink
observer: Return status when printing the observed data
Browse files Browse the repository at this point in the history
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().
  • Loading branch information
Andrea Canciani committed Feb 11, 2012
1 parent f7eaf37 commit f2567e9
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 14 deletions.
24 changes: 12 additions & 12 deletions src/cairo-surface-observer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1957,25 +1957,25 @@ _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)
{
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
Expand All @@ -1993,25 +1993,25 @@ 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)
{
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
Expand Down
4 changes: 2 additions & 2 deletions src/cairo.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit f2567e9

Please sign in to comment.