50,16 → 50,16 |
*/ |
} |
|
static void |
conical_gradient_get_scanline_32 (pixman_image_t *image, |
int x, |
int y, |
int width, |
uint32_t * buffer, |
const uint32_t *mask) |
static uint32_t * |
conical_get_scanline_narrow (pixman_iter_t *iter, const uint32_t *mask) |
{ |
source_image_t *source = (source_image_t *)image; |
gradient_t *gradient = (gradient_t *)source; |
pixman_image_t *image = iter->image; |
int x = iter->x; |
int y = iter->y; |
int width = iter->width; |
uint32_t *buffer = iter->buffer; |
|
gradient_t *gradient = (gradient_t *)image; |
conical_gradient_t *conical = (conical_gradient_t *)image; |
uint32_t *end = buffer + width; |
pixman_gradient_walker_t walker; |
71,9 → 71,9 |
double ry = y + 0.5; |
double rz = 1.; |
|
_pixman_gradient_walker_init (&walker, gradient, source->common.repeat); |
_pixman_gradient_walker_init (&walker, gradient, image->common.repeat); |
|
if (source->common.transform) |
if (image->common.transform) |
{ |
pixman_vector_t v; |
|
82,12 → 82,12 |
v.vector[1] = pixman_int_to_fixed (y) + pixman_fixed_1 / 2; |
v.vector[2] = pixman_fixed_1; |
|
if (!pixman_transform_point_3d (source->common.transform, &v)) |
return; |
if (!pixman_transform_point_3d (image->common.transform, &v)) |
return iter->buffer; |
|
cx = source->common.transform->matrix[0][0] / 65536.; |
cy = source->common.transform->matrix[1][0] / 65536.; |
cz = source->common.transform->matrix[2][0] / 65536.; |
cx = image->common.transform->matrix[0][0] / 65536.; |
cy = image->common.transform->matrix[1][0] / 65536.; |
cz = image->common.transform->matrix[2][0] / 65536.; |
|
rx = v.vector[0] / 65536.; |
ry = v.vector[1] / 65536.; |
94,7 → 94,7 |
rz = v.vector[2] / 65536.; |
|
affine = |
source->common.transform->matrix[2][0] == 0 && |
image->common.transform->matrix[2][0] == 0 && |
v.vector[2] == pixman_fixed_1; |
} |
|
155,17 → 155,33 |
rz += cz; |
} |
} |
|
iter->y++; |
return iter->buffer; |
} |
|
static void |
conical_gradient_property_changed (pixman_image_t *image) |
static uint32_t * |
conical_get_scanline_wide (pixman_iter_t *iter, const uint32_t *mask) |
{ |
image->common.get_scanline_32 = conical_gradient_get_scanline_32; |
image->common.get_scanline_64 = _pixman_image_get_scanline_generic_64; |
uint32_t *buffer = conical_get_scanline_narrow (iter, NULL); |
|
pixman_expand_to_float ( |
(argb_t *)buffer, buffer, PIXMAN_a8r8g8b8, iter->width); |
|
return buffer; |
} |
|
void |
_pixman_conical_gradient_iter_init (pixman_image_t *image, pixman_iter_t *iter) |
{ |
if (iter->iter_flags & ITER_NARROW) |
iter->get_scanline = conical_get_scanline_narrow; |
else |
iter->get_scanline = conical_get_scanline_wide; |
} |
|
PIXMAN_EXPORT pixman_image_t * |
pixman_image_create_conical_gradient (pixman_point_fixed_t * center, |
pixman_image_create_conical_gradient (const pixman_point_fixed_t * center, |
pixman_fixed_t angle, |
const pixman_gradient_stop_t *stops, |
int n_stops) |
191,8 → 207,6 |
conical->center = *center; |
conical->angle = (pixman_fixed_to_double (angle) / 180.0) * M_PI; |
|
image->common.property_changed = conical_gradient_property_changed; |
|
return image; |
} |
|