From: Søren Sandmann Pedersen <s...@redhat.com> --- pixman/pixman-general.c | 5 +++++ pixman/pixman-private.h | 11 +++++++++++ pixman/pixman-radial-gradient.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c index a2697ef..5865143 100644 --- a/pixman/pixman-general.c +++ b/pixman/pixman-general.c @@ -91,6 +91,11 @@ iter_init (pixman_implementation_t *imp, _pixman_linear_gradient_iter_init ( image, iter, x, y, width, height, buffer, flags); } + else if (image->type == RADIAL) + { + _pixman_radial_gradient_iter_init ( + image, iter, x, y, width, height, buffer, flags); + } else if (image->type == BITS) { _pixman_bits_image_iter_init ( diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index d22f242..1c6f041 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -232,6 +232,17 @@ _pixman_linear_gradient_iter_init (pixman_image_t *image, uint8_t *buffer, iter_flags_t flags); void +_pixman_solid_fill_iter_init (pixman_image_t *image, + pixman_iter_t *iter, + int x, int y, int width, int height, + uint8_t *buffer, iter_flags_t flags); +void +_pixman_radial_gradient_iter_init (pixman_image_t *image, + pixman_iter_t *iter, + int x, int y, int width, int height, + uint8_t *buffer, iter_flags_t flags); + +void _pixman_image_get_scanline_generic_64 (pixman_image_t *image, int x, int y, diff --git a/pixman/pixman-radial-gradient.c b/pixman/pixman-radial-gradient.c index b595ba7..9b8c49b 100644 --- a/pixman/pixman-radial-gradient.c +++ b/pixman/pixman-radial-gradient.c @@ -377,6 +377,40 @@ radial_gradient_property_changed (pixman_image_t *image) image->common.get_scanline_64 = _pixman_image_get_scanline_generic_64; } +static uint32_t * +radial_get_scanline_narrow (pixman_iter_t *iter, const uint32_t *mask) +{ + radial_gradient_get_scanline_32 ( + iter->image, iter->x, iter->y, iter->width, + iter->buffer, mask); + + return iter->buffer; +} + +static uint32_t * +radial_get_scanline_wide (pixman_iter_t *iter, const uint32_t *mask) +{ + uint32_t *buffer = radial_get_scanline_narrow (iter, NULL); + + pixman_expand ((uint64_t *)buffer, buffer, PIXMAN_a8r8g8b8, iter->width); + + return buffer; +} + +void +_pixman_radial_gradient_iter_init (pixman_image_t *image, + pixman_iter_t *iter, + int x, int y, int width, int height, + uint8_t *buffer, iter_flags_t flags) +{ + if (flags & ITER_NARROW) + iter->get_scanline = radial_get_scanline_narrow; + else + iter->get_scanline = radial_get_scanline_wide; + + iter->next_line = _pixman_iter_next_line_regular; +} + PIXMAN_EXPORT pixman_image_t * pixman_image_create_radial_gradient (pixman_point_fixed_t * inner, pixman_point_fixed_t * outer, -- 1.6.0.6 _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman