summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Ewins <Brian.Ewins@gmail.com>2007-10-20 23:41:46 +0100
committerCarl Worth <cworth@cworth.org>2007-11-26 21:24:52 -0800
commit0ec9e1b4fa06ea456fe596f423aad12be5ec5e1a (patch)
treecd9a69582344ed986b2281bf66be33905447d6f6
parenta83e5462533f54d0c0105300b1e8687d120b8686 (diff)
downloadcairo-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.c20
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