mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 06:28:01 +02:00
[cairo] Report true error via pattern from cairo_pop_group()
Report the correct error via the returned pattern->status rather than simply returning the NO_MEMORY nil object.
This commit is contained in:
parent
5c3be3ece2
commit
2b1ec7a4d8
3 changed files with 16 additions and 10 deletions
|
|
@ -566,7 +566,7 @@ _cairo_pattern_create_solid (const cairo_color_t *color,
|
|||
return &pattern->base;
|
||||
}
|
||||
|
||||
static const cairo_pattern_t *
|
||||
cairo_pattern_t *
|
||||
_cairo_pattern_create_in_error (cairo_status_t status)
|
||||
{
|
||||
cairo_pattern_t *pattern;
|
||||
|
|
@ -686,7 +686,7 @@ cairo_pattern_create_for_surface (cairo_surface_t *surface)
|
|||
}
|
||||
|
||||
if (surface->status)
|
||||
return (cairo_pattern_t*) _cairo_pattern_create_in_error (surface->status);
|
||||
return _cairo_pattern_create_in_error (surface->status);
|
||||
|
||||
pattern =
|
||||
_freed_pattern_get (&freed_pattern_pool[CAIRO_PATTERN_TYPE_SURFACE]);
|
||||
|
|
|
|||
18
src/cairo.c
18
src/cairo.c
|
|
@ -569,11 +569,12 @@ cairo_pattern_t *
|
|||
cairo_pop_group (cairo_t *cr)
|
||||
{
|
||||
cairo_surface_t *group_surface, *parent_target;
|
||||
cairo_pattern_t *group_pattern = (cairo_pattern_t*) &_cairo_pattern_nil.base;
|
||||
cairo_pattern_t *group_pattern;
|
||||
cairo_matrix_t group_matrix;
|
||||
cairo_status_t status;
|
||||
|
||||
if (unlikely (cr->status))
|
||||
return group_pattern;
|
||||
return _cairo_pattern_create_in_error (cr->status);
|
||||
|
||||
/* Grab the active surfaces */
|
||||
group_surface = _cairo_gstate_get_target (cr->gstate);
|
||||
|
|
@ -582,7 +583,7 @@ cairo_pop_group (cairo_t *cr)
|
|||
/* Verify that we are at the right nesting level */
|
||||
if (parent_target == NULL) {
|
||||
_cairo_set_error (cr, CAIRO_STATUS_INVALID_POP_GROUP);
|
||||
return group_pattern;
|
||||
return _cairo_pattern_create_in_error (CAIRO_STATUS_INVALID_POP_GROUP);
|
||||
}
|
||||
|
||||
/* We need to save group_surface before we restore; we don't need
|
||||
|
|
@ -592,12 +593,15 @@ cairo_pop_group (cairo_t *cr)
|
|||
|
||||
cairo_restore (cr);
|
||||
|
||||
if (unlikely (cr->status))
|
||||
if (unlikely (cr->status)) {
|
||||
group_pattern = _cairo_pattern_create_in_error (cr->status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
group_pattern = cairo_pattern_create_for_surface (group_surface);
|
||||
if (cairo_pattern_status (group_pattern)) {
|
||||
_cairo_set_error (cr, cairo_pattern_status (group_pattern));
|
||||
status = group_pattern->status;
|
||||
if (unlikely (status)) {
|
||||
_cairo_set_error (cr, status);
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
@ -894,7 +898,7 @@ cairo_pattern_t *
|
|||
cairo_get_source (cairo_t *cr)
|
||||
{
|
||||
if (unlikely (cr->status))
|
||||
return (cairo_pattern_t*) &_cairo_pattern_nil.base;
|
||||
return _cairo_pattern_create_in_error (cr->status);
|
||||
|
||||
return _cairo_gstate_get_source (cr->gstate);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -916,7 +916,6 @@ struct _cairo_solid_pattern {
|
|||
cairo_content_t content;
|
||||
};
|
||||
|
||||
extern const cairo_private cairo_solid_pattern_t _cairo_pattern_nil;
|
||||
extern const cairo_private cairo_solid_pattern_t _cairo_pattern_black;
|
||||
|
||||
typedef struct _cairo_surface_pattern {
|
||||
|
|
@ -2468,6 +2467,9 @@ _cairo_slope_compare (const cairo_slope_t *a,
|
|||
|
||||
/* cairo-pattern.c */
|
||||
|
||||
cairo_private cairo_pattern_t *
|
||||
_cairo_pattern_create_in_error (cairo_status_t status);
|
||||
|
||||
cairo_private cairo_status_t
|
||||
_cairo_pattern_create_copy (cairo_pattern_t **pattern,
|
||||
const cairo_pattern_t *other);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue