diff options
author | Brian Ewins <Brian.Ewins@gmail.com> | 2007-10-20 23:41:46 +0100 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2007-11-26 21:24:52 -0800 |
commit | 0ec9e1b4fa06ea456fe596f423aad12be5ec5e1a (patch) | |
tree | cd9a69582344ed986b2281bf66be33905447d6f6 | |
parent | a83e5462533f54d0c0105300b1e8687d120b8686 (diff) | |
download | cairo-0ec9e1b4fa06ea456fe596f423aad12be5ec5e1a.tar.gz |
[quartz] return status instead of CGPatternRef
Returning status improves error handling, since
returning NULL doesn't let us distinguish different
types of error.
(cherry picked from commit 8f6abdbc26ee15451b5a386610f7d5a7a9114d63)
-rw-r--r-- | src/cairo-quartz-surface.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/cairo-quartz-surface.c b/src/cairo-quartz-surface.c index 47bb6d8bb..5cff47e63 100644 --- a/src/cairo-quartz-surface.c +++ b/src/cairo-quartz-surface.c @@ -553,9 +553,10 @@ _init_pattern_with_snapshot (cairo_pattern_t *pattern, return CAIRO_STATUS_SUCCESS; } -static CGPatternRef +static cairo_int_status_t _cairo_quartz_cairo_repeating_surface_pattern_to_quartz (cairo_quartz_surface_t *dest, - cairo_pattern_t *abspat) + cairo_pattern_t *abspat, + CGPatternRef *cgpat) { cairo_surface_pattern_t *spat; cairo_surface_t *pat_surf; @@ -566,7 +567,6 @@ _cairo_quartz_cairo_repeating_surface_pattern_to_quartz (cairo_quartz_surface_t CGPatternCallbacks cb = { 0, SurfacePatternDrawFunc, (CGFunctionReleaseInfoCallback) cairo_pattern_destroy }; - CGPatternRef cgpat; float rw, rh; cairo_status_t status; @@ -576,14 +576,14 @@ _cairo_quartz_cairo_repeating_surface_pattern_to_quartz (cairo_quartz_surface_t cairo_matrix_t m; /* SURFACE is the only type we'll handle here */ if (abspat->type != CAIRO_PATTERN_TYPE_SURFACE) - return NULL; + return CAIRO_INT_STATUS_UNSUPPORTED; spat = (cairo_surface_pattern_t *) abspat; pat_surf = spat->surface; status = _cairo_surface_get_extents (pat_surf, &extents); if (status) - return NULL; + return status; pbounds.origin.x = 0; pbounds.origin.y = 0; @@ -636,14 +636,14 @@ _cairo_quartz_cairo_repeating_surface_pattern_to_quartz (cairo_quartz_surface_t target_pattern = abspat; } - cgpat = CGPatternCreate (target_pattern, + *cgpat = CGPatternCreate (target_pattern, pbounds, ptransform, rw, rh, kCGPatternTilingConstantSpacing, /* kCGPatternTilingNoDistortion, */ TRUE, &cb); - return cgpat; + return CAIRO_STATUS_SUCCESS; } typedef enum { @@ -724,9 +724,11 @@ _cairo_quartz_setup_source (cairo_quartz_surface_t *surface, } else if (source->type == CAIRO_PATTERN_TYPE_SURFACE) { float patternAlpha = 1.0f; CGColorSpaceRef patternSpace; + CGPatternRef pattern; + cairo_int_status_t status; - CGPatternRef pattern = _cairo_quartz_cairo_repeating_surface_pattern_to_quartz (surface, source); - if (!pattern) + status = _cairo_quartz_cairo_repeating_surface_pattern_to_quartz (surface, source, &pattern); + if (status) return DO_UNSUPPORTED; // Save before we change the pattern, colorspace, etc. so that |