Improve handling of tangent circles
authorAndrea Canciani <ranma42@gmail.com>
Tue, 23 Nov 2010 10:37:54 +0000 (11:37 +0100)
committerAndrea Canciani <ranma42@gmail.com>
Wed, 12 Jan 2011 21:04:33 +0000 (22:04 +0100)
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.

pixman/pixman-radial-gradient.c

index b595ba7..7b92307 100644 (file)
@@ -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);