diff options
author | Andrea Canciani <ranma42@gmail.com> | 2010-11-23 11:37:54 +0100 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2011-01-19 08:11:12 -0500 |
commit | 63a71bd7375b103663223f357cbe0e3be39bc663 (patch) | |
tree | 32dee73df0e1b76f9ce90b6e9d0adcfbb5887de5 | |
parent | d0599816b9bec246d30f5d9b967d6db5eb77ee8b (diff) | |
download | pixman-63a71bd7375b103663223f357cbe0e3be39bc663.tar.gz |
Improve handling of tangent circles
When b is 0, avoid the division by zero and just return transparent
black.
When the solution t would have an invalid radius (negative or outside
[0,1] for none-extended gradients), return transparent black.
-rw-r--r-- | pixman/pixman-radial-gradient.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/pixman/pixman-radial-gradient.c b/pixman/pixman-radial-gradient.c index f0dcc96..fa57258 100644 --- a/pixman/pixman-radial-gradient.c +++ b/pixman/pixman-radial-gradient.c @@ -96,8 +96,24 @@ radial_compute_color (double a, if (a == 0) { - return _pixman_gradient_walker_pixel (walker, - pixman_fixed_1 / 2 * c / b); + double t; + + if (b == 0) + return 0; + + t = pixman_fixed_1 / 2 * c / b; + if (repeat == PIXMAN_REPEAT_NONE) + { + if (0 <= t && t <= pixman_fixed_1) + return _pixman_gradient_walker_pixel (walker, t); + } + else + { + if (t * dr > mindr) + return _pixman_gradient_walker_pixel (walker, t); + } + + return 0; } det = fdot (b, a, 0, b, -c, 0); |