summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2010-11-23 11:37:54 +0100
committerSøren Sandmann Pedersen <ssp@redhat.com>2011-01-19 08:11:12 -0500
commit63a71bd7375b103663223f357cbe0e3be39bc663 (patch)
tree32dee73df0e1b76f9ce90b6e9d0adcfbb5887de5
parentd0599816b9bec246d30f5d9b967d6db5eb77ee8b (diff)
downloadpixman-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.c20
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);