diff --git a/ChangeLog b/ChangeLog index a34c5b6d2..a39468ca8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-06-13 Carl Worth + + * 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 * src/cairo.c (_cairo_set_source_solid), diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c index b3ab94645..a274cc187 100644 --- a/src/cairo-pattern.c +++ b/src/cairo-pattern.c @@ -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) { diff --git a/src/cairo.c b/src/cairo.c index 3191cf545..788938c93 100644 --- a/src/cairo.c +++ b/src/cairo.c @@ -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); } diff --git a/src/cairoint.h b/src/cairoint.h index 6430b3895..763de92b3 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -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);