Add new _cairo_pattern_create_in_error.

Propagate error values from cr->status to pattern->status.
This commit is contained in:
Carl Worth 2005-06-13 16:53:52 +00:00
parent 14ae3ce3ad
commit 8084fb9b09
4 changed files with 44 additions and 3 deletions

View file

@ -1,3 +1,12 @@
2005-06-13 Carl Worth <cworth@cworth.org>
* src/cairoint.h:
* src/cairo-pattern.c: (_cairo_pattern_create_in_error): Add new
_cairo_pattern_create_in_error.
* src/cairo.c: (cairo_get_source): Propagate error values from
cr->status to pattern->status.
2005-06-13 Carl Worth <cworth@cworth.org>
* src/cairo.c (_cairo_set_source_solid),

View file

@ -263,6 +263,37 @@ _cairo_pattern_create_solid (const cairo_color_t *color)
return &pattern->base;
}
/**
* _cairo_pattern_create_in_error:
* @status: an error status
*
* Create an empty #cairo_pattern_t object to hold an error
* status. This is useful for propagating status values from an
* existing object to a new #cairo_pattern_t.
*
* Return value: a (solid, black) #cairo_pattern_t object with status
* of @status. If there is insufficient memory a pointer to a special,
* static cairo_solid_pattern_nil will be returned instead with a
* status of CAIRO_STATUS_NO_MEMORY rather than @status.
*
* Return value:
**/
cairo_pattern_t *
_cairo_pattern_create_in_error (cairo_status_t status)
{
cairo_solid_pattern_t *pattern;
pattern = malloc (sizeof (cairo_solid_pattern_t));
if (pattern == NULL)
return (cairo_pattern_t *) &cairo_solid_pattern_nil.base;
_cairo_pattern_init_solid (pattern, CAIRO_COLOR_BLACK);
pattern->base.status = status;
return &pattern->base;
}
cairo_pattern_t *
cairo_pattern_create_for_surface (cairo_surface_t *surface)
{

View file

@ -481,10 +481,8 @@ cairo_pattern_t *
cairo_get_source (cairo_t *cr)
{
CAIRO_CHECK_SANITY (cr);
/* XXX: We'll want to do something like this:
if (cr->status)
return cairo_pattern_nil;
*/
return _cairo_pattern_create_in_error (cr->status);
return _cairo_gstate_get_source (cr->gstate);
}

View file

@ -1717,6 +1717,9 @@ _cairo_pattern_fini (cairo_pattern_t *pattern);
cairo_private cairo_pattern_t *
_cairo_pattern_create_solid (const cairo_color_t *color);
cairo_pattern_t *
_cairo_pattern_create_in_error (cairo_status_t status);
cairo_private void
_cairo_pattern_transform (cairo_pattern_t *pattern,
const cairo_matrix_t *ctm_inverse);