summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pixman/pixman-image.c49
1 files changed, 19 insertions, 30 deletions
diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c
index 913853c..4cb70a2 100644
--- a/pixman/pixman-image.c
+++ b/pixman/pixman-image.c
@@ -39,40 +39,29 @@ gradient_property_changed (pixman_image_t *image)
gradient_t *gradient = &image->gradient;
int n = gradient->n_stops;
pixman_gradient_stop_t *stops = gradient->stops;
- pixman_gradient_stop_t *begin = &(gradient->stops[-1]);
- pixman_gradient_stop_t *end = &(gradient->stops[n]);
+ pixman_gradient_stop_t *first = &(gradient->stops[0]);
+ pixman_gradient_stop_t *last = &(gradient->stops[n-1]);
- switch (gradient->common.repeat)
- {
- default:
- case PIXMAN_REPEAT_NONE:
- begin->x = INT32_MIN;
- begin->color = transparent_black;
- end->x = INT32_MAX;
- end->color = transparent_black;
- break;
+ if (first[0].x > 0)
+ first_bg = transparent_black;
+ else
+ first_bg = first[0].color;
- case PIXMAN_REPEAT_NORMAL:
- begin->x = stops[n - 1].x - pixman_fixed_1;
- begin->color = stops[n - 1].color;
- end->x = stops[0].x + pixman_fixed_1;
- end->color = stops[0].color;
- break;
+ if (last[0].x < pixman_fixed_1)
+ last_bg = transparent_black;
+ else
+ last_bg = last[0].color;
- case PIXMAN_REPEAT_REFLECT:
- begin->x = - stops[0].x;
- begin->color = stops[0].color;
- end->x = pixman_int_to_fixed (2) - stops[n - 1].x;
- end->color = stops[n - 1].color;
- break;
+ if (gradient->common.repeat == PIXMAN_REPEAT_NONE)
+ first_bg = last_bg = transparent_black;
- case PIXMAN_REPEAT_PAD:
- begin->x = INT32_MIN;
- begin->color = stops[0].color;
- end->x = INT32_MAX;
- end->color = stops[n - 1].color;
- break;
- }
+ first[-2].x = INT32_MIN;
+ first[-1].x = first[0].x - pixman_fixed_e;
+ first[-2].color = first[-1].color = first_bg;
+
+ last[1].x = last[0].x + pixman_fixed_e;
+ last[2].x = INT32_MAX;
+ last[1].color = last[2].color = last_bg;
}
pixman_bool_t