summaryrefslogtreecommitdiff
path: root/pixman/pixman-linear-gradient.c
diff options
context:
space:
mode:
Diffstat (limited to 'pixman/pixman-linear-gradient.c')
-rw-r--r--pixman/pixman-linear-gradient.c20
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;
}
}