void _pixman_linear_gradient_iter_init (pixman_image_t *image, pixman_iter_t *iter) { // XXX: we can't use this optimization when dithering if (0 && linear_gradient_is_horizontal ( iter->image, iter->x, iter->y, iter->width, iter->height)) { if (iter->flags & ITER_16) linear_get_scanline_16 (iter, NULL); else if (iter->flags & ITER_NARROW) linear_get_scanline_narrow (iter, NULL); else linear_get_scanline_wide (iter, NULL); iter->get_scanline = _pixman_iter_get_scanline_noop; } else { if (iter->flags & ITER_16) iter->get_scanline = linear_get_scanline_16; else if (iter->flags & ITER_NARROW) iter->get_scanline = linear_get_scanline_narrow; else iter->get_scanline = linear_get_scanline_wide; } }
static uint32_t * linear_get_scanline_wide (pixman_iter_t *iter, const uint32_t *mask) { uint32_t *buffer = linear_get_scanline_narrow (iter, NULL); pixman_expand ((uint64_t *)buffer, buffer, PIXMAN_a8r8g8b8, iter->width); return buffer; }
static xuint32_t * linear_get_scanline_wide (pixman_iter_t *iter, const xuint32_t *mask) { xuint32_t *buffer = linear_get_scanline_narrow (iter, XNULL); pixman_expand_to_float ( (argb_t *)buffer, buffer, PIXMAN_a8r8g8b8, iter->width); return buffer; }
void _pixman_linear_gradient_iter_init (pixman_image_t *image, pixman_iter_t *iter) { if (linear_gradient_is_horizontal ( iter->image, iter->x, iter->y, iter->width, iter->height)) { if (iter->iter_flags & ITER_NARROW) linear_get_scanline_narrow (iter, XNULL); else linear_get_scanline_wide (iter, XNULL); iter->get_scanline = _pixman_iter_get_scanline_noop; } else { if (iter->iter_flags & ITER_NARROW) iter->get_scanline = linear_get_scanline_narrow; else iter->get_scanline = linear_get_scanline_wide; } }