From 29439bd7724031504e965ffe5b366baaeeae07d8 Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Tue, 23 Nov 2010 11:37:54 +0100 Subject: [PATCH] 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. --- pixman/pixman-radial-gradient.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/pixman/pixman-radial-gradient.c b/pixman/pixman-radial-gradient.c index b595ba7..7b92307 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); -- 2.7.4