mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-03 07:48:04 +02:00
[quartz] return status instead of cairo_quartz_surface_t
Returning status improves error handling, since returning NULL doesn't let us distinguish different types of error.
This commit is contained in:
parent
dec3099585
commit
cfb26fdf0f
1 changed files with 18 additions and 14 deletions
|
|
@ -427,10 +427,11 @@ _cairo_quartz_cairo_gradient_pattern_to_quartz (cairo_pattern_t *abspat,
|
|||
}
|
||||
|
||||
/* generic cairo surface -> cairo_quartz_surface_t function */
|
||||
static cairo_quartz_surface_t *
|
||||
_cairo_quartz_surface_to_quartz (cairo_surface_t *target, cairo_surface_t *pat_surf)
|
||||
static cairo_int_status_t
|
||||
_cairo_quartz_surface_to_quartz (cairo_surface_t *target,
|
||||
cairo_surface_t *pat_surf,
|
||||
cairo_quartz_surface_t **quartz_surf)
|
||||
{
|
||||
cairo_quartz_surface_t *quartz_surf = NULL;
|
||||
|
||||
if (cairo_surface_get_type(pat_surf) != CAIRO_SURFACE_TYPE_QUARTZ) {
|
||||
/* XXXtodo/perf don't use clone if the source surface is an image surface! Instead,
|
||||
|
|
@ -447,7 +448,7 @@ _cairo_quartz_surface_to_quartz (cairo_surface_t *target, cairo_surface_t *pat_s
|
|||
|
||||
status = _cairo_surface_get_extents (pat_surf, &rect);
|
||||
if (status)
|
||||
return NULL;
|
||||
return status;
|
||||
|
||||
status = _cairo_surface_clone_similar (ref_type, pat_surf, rect.x, rect.y,
|
||||
rect.width, rect.height, &new_surf);
|
||||
|
|
@ -455,18 +456,18 @@ _cairo_quartz_surface_to_quartz (cairo_surface_t *target, cairo_surface_t *pat_s
|
|||
cairo_surface_destroy(ref_type);
|
||||
|
||||
if (status)
|
||||
return NULL;
|
||||
return status;
|
||||
|
||||
quartz_surf = (cairo_quartz_surface_t *) new_surf;
|
||||
*quartz_surf = (cairo_quartz_surface_t *) new_surf;
|
||||
} else {
|
||||
/* If it's a quartz surface, we can try to see if it's a CGBitmapContext;
|
||||
* we do this when we call CGBitmapContextCreateImage below.
|
||||
*/
|
||||
cairo_surface_reference (pat_surf);
|
||||
quartz_surf = (cairo_quartz_surface_t*) pat_surf;
|
||||
*quartz_surf = (cairo_quartz_surface_t*) pat_surf;
|
||||
}
|
||||
|
||||
return quartz_surf;
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* Generic cairo_pattern -> CGPattern function */
|
||||
|
|
@ -475,13 +476,14 @@ SurfacePatternDrawFunc (void *info, CGContextRef context)
|
|||
{
|
||||
cairo_surface_pattern_t *spat = (cairo_surface_pattern_t *) info;
|
||||
cairo_surface_t *pat_surf = spat->surface;
|
||||
cairo_int_status_t status;
|
||||
|
||||
cairo_quartz_surface_t *quartz_surf;
|
||||
CGImageRef img;
|
||||
CGRect imageBounds;
|
||||
|
||||
quartz_surf = _cairo_quartz_surface_to_quartz (NULL, pat_surf);
|
||||
if (!quartz_surf)
|
||||
status = _cairo_quartz_surface_to_quartz (NULL, pat_surf, &quartz_surf);
|
||||
if (status)
|
||||
return;
|
||||
|
||||
img = CGBitmapContextCreateImage (quartz_surf->cgContext);
|
||||
|
|
@ -699,8 +701,8 @@ _cairo_quartz_setup_source (cairo_quartz_surface_t *surface,
|
|||
cairo_rectangle_int_t extents;
|
||||
cairo_status_t status;
|
||||
|
||||
quartz_surf = _cairo_quartz_surface_to_quartz ((cairo_surface_t *) surface, pat_surf);
|
||||
if (!quartz_surf)
|
||||
status = _cairo_quartz_surface_to_quartz ((cairo_surface_t *) surface, pat_surf, &quartz_surf);
|
||||
if (status)
|
||||
return DO_UNSUPPORTED;
|
||||
|
||||
img = CGBitmapContextCreateImage (quartz_surf->cgContext);
|
||||
|
|
@ -1507,7 +1509,7 @@ _cairo_quartz_surface_show_glyphs (void *abstract_surface,
|
|||
}
|
||||
#endif /* CAIRO_HAS_ATSUI_FONT */
|
||||
|
||||
static cairo_status_t
|
||||
static cairo_int_status_t
|
||||
_cairo_quartz_surface_mask_with_surface (cairo_quartz_surface_t *surface,
|
||||
cairo_operator_t op,
|
||||
cairo_pattern_t *source,
|
||||
|
|
@ -1524,7 +1526,9 @@ _cairo_quartz_surface_mask_with_surface (cairo_quartz_surface_t *surface,
|
|||
if (status)
|
||||
return status;
|
||||
|
||||
quartz_surf = _cairo_quartz_surface_to_quartz (NULL, pat_surf);
|
||||
status = _cairo_quartz_surface_to_quartz (NULL, pat_surf, &quartz_surf);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
img = CGBitmapContextCreateImage (quartz_surf->cgContext);
|
||||
if (!img) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue