# HG changeset patch # User Robert O'Callahan # Date 1249558626 -43200 # Node ID 963b9451ad305924738d05d997a640698cd3af91 # Parent e564f3ab4ea6e3b5dd9c4e9e6042d3a84c229dde Bug 508730. Clean up Quartz gradient code by moving some local variables to static const globals. r=jmuizelaar diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c --- a/gfx/cairo/cairo/src/cairo-quartz-surface.c +++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c @@ -684,51 +684,50 @@ ComputeGradientValue (void *info, const grad->stops[i-1].color.blue * ap + grad->stops[i].color.blue * bp; out[3] = grad->stops[i-1].color.alpha * ap + grad->stops[i].color.alpha * bp; } } +static const float gradient_output_value_ranges[8] = { + 0.f, 1.f, 0.f, 1.f, 0.f, 1.f, 0.f, 1.f +}; +static const CGFunctionCallbacks gradient_callbacks = { + 0, ComputeGradientValue, (CGFunctionReleaseInfoCallback) cairo_pattern_destroy +}; + static CGFunctionRef CreateGradientFunction (const cairo_gradient_pattern_t *gpat) { cairo_pattern_t *pat; float input_value_range[2] = { 0.f, 1.f }; - float output_value_ranges[8] = { 0.f, 1.f, 0.f, 1.f, 0.f, 1.f, 0.f, 1.f }; - CGFunctionCallbacks callbacks = { - 0, ComputeGradientValue, (CGFunctionReleaseInfoCallback) cairo_pattern_destroy - }; if (_cairo_pattern_create_copy (&pat, &gpat->base)) /* quartz doesn't deal very well with malloc failing, so there's * not much point in us trying either */ return NULL; return CGFunctionCreate (pat, 1, input_value_range, 4, - output_value_ranges, - &callbacks); + gradient_output_value_ranges, + &gradient_callbacks); } static CGFunctionRef CreateRepeatingLinearGradientFunction (cairo_quartz_surface_t *surface, const cairo_gradient_pattern_t *gpat, CGPoint *start, CGPoint *end, CGAffineTransform matrix) { cairo_pattern_t *pat; float input_value_range[2]; - float output_value_ranges[8] = { 0.f, 1.f, 0.f, 1.f, 0.f, 1.f, 0.f, 1.f }; - CGFunctionCallbacks callbacks = { - 0, ComputeGradientValue, (CGFunctionReleaseInfoCallback) cairo_pattern_destroy - }; CGPoint mstart, mend; double dx, dy; int x_rep_start = 0, x_rep_end = 0; int y_rep_start = 0, y_rep_end = 0; int rep_start, rep_end; @@ -787,18 +786,18 @@ CreateRepeatingLinearGradientFunction (c /* quartz doesn't deal very well with malloc failing, so there's * not much point in us trying either */ return NULL; return CGFunctionCreate (pat, 1, input_value_range, 4, - output_value_ranges, - &callbacks); + gradient_output_value_ranges, + &gradient_callbacks); } static void UpdateRadialParameterToIncludePoint(double *max_t, CGPoint *center, double dr, double dx, double dy, double x, double y) { /* Compute a parameter t such that a circle centered at @@ -847,20 +846,16 @@ CreateRepeatingRadialGradientFunction (c const cairo_gradient_pattern_t *gpat, CGPoint *start, double *start_radius, CGPoint *end, double *end_radius) { CGRect clip = CGContextGetClipBoundingBox (surface->cgContext); CGAffineTransform transform; cairo_pattern_t *pat; float input_value_range[2]; - float output_value_ranges[8] = { 0.f, 1.f, 0.f, 1.f, 0.f, 1.f, 0.f, 1.f }; - CGFunctionCallbacks callbacks = { - 0, ComputeGradientValue, (CGFunctionReleaseInfoCallback) cairo_pattern_destroy - }; CGPoint *inner; double *inner_radius; CGPoint *outer; double *outer_radius; /* minimum and maximum t-parameter values that will make our gradient cover the clipBox */ double t_min, t_max, t_temp; /* outer minus inner */ @@ -927,18 +922,18 @@ CreateRepeatingRadialGradientFunction (c /* quartz doesn't deal very well with malloc failing, so there's * not much point in us trying either */ return NULL; return CGFunctionCreate (pat, 1, input_value_range, 4, - output_value_ranges, - &callbacks); + gradient_output_value_ranges, + &gradient_callbacks); } /* Obtain a CGImageRef from a #cairo_surface_t * */ static void DataProviderReleaseCallback (void *info, const void *data, size_t size) { cairo_surface_t *surface = (cairo_surface_t *) info;