diff options
Diffstat (limited to 'pixman/pixman-linear-gradient.c')
-rw-r--r-- | pixman/pixman-linear-gradient.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/pixman/pixman-linear-gradient.c b/pixman/pixman-linear-gradient.c index 9208808..019c23e 100644 --- a/pixman/pixman-linear-gradient.c +++ b/pixman/pixman-linear-gradient.c @@ -90,13 +90,13 @@ linear_gradient_is_horizontal (pixman_image_t *image, static uint32_t * linear_gradient_get_scanline_narrow (pixman_iter_t *iter, + uint32_t *buffer, const uint32_t *mask) { pixman_image_t *image = iter->image; int x = iter->x; int y = iter->y; int width = iter->width; - uint32_t * buffer = iter->buffer; pixman_vector_t v, unit; pixman_fixed_32_32_t l; @@ -116,7 +116,7 @@ linear_gradient_get_scanline_narrow (pixman_iter_t *iter, if (image->common.transform) { if (!pixman_transform_point_3d (image->common.transform, &v)) - return iter->buffer; + return buffer; unit.vector[0] = image->common.transform->matrix[0][0]; unit.vector[1] = image->common.transform->matrix[1][0]; @@ -219,20 +219,20 @@ linear_gradient_get_scanline_narrow (pixman_iter_t *iter, iter->y++; - return iter->buffer; + return buffer; } static uint32_t * -linear_gradient_get_scanline_wide (pixman_iter_t *iter, const uint32_t *mask) +linear_gradient_get_scanline_wide (pixman_iter_t *iter, uint32_t *buffer, const uint32_t *mask) { - uint32_t *buffer = linear_gradient_get_scanline_narrow (iter, NULL); + linear_gradient_get_scanline_narrow (iter, buffer, NULL); pixman_expand ((uint64_t *)buffer, buffer, PIXMAN_a8r8g8b8, iter->width); return buffer; } -void +iter_flags_t _pixman_linear_gradient_iter_init (pixman_image_t *image, pixman_iter_t *iter, int x, @@ -245,11 +245,13 @@ _pixman_linear_gradient_iter_init (pixman_image_t *image, if (linear_gradient_is_horizontal (image, x, y, width, height)) { if (flags & ITER_NARROW) - linear_gradient_get_scanline_narrow (iter, NULL); + linear_gradient_get_scanline_narrow (iter, iter->buffer, NULL); else - linear_gradient_get_scanline_wide (iter, NULL); + linear_gradient_get_scanline_wide (iter, iter->buffer, NULL); iter->get_scanline = _pixman_iter_get_scanline_noop; + + return flags & ~ITER_ON_DEST; } else { @@ -257,6 +259,8 @@ _pixman_linear_gradient_iter_init (pixman_image_t *image, iter->get_scanline = linear_gradient_get_scanline_narrow; else iter->get_scanline = linear_gradient_get_scanline_wide; + + return flags; } } |