From: Andrea Canciani Date: Tue, 23 Nov 2010 10:37:54 +0000 (+0100) Subject: Improve handling of tangent circles X-Git-Tag: 1.0_branch~369 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=29439bd7724031504e965ffe5b366baaeeae07d8;p=profile%2Fivi%2Fpixman.git 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. --- 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);