From: Søren Sandmann Pedersen <s...@redhat.com> It is legitimate for t * dr value to be exactly equal to the minimum dr. This happens when the sampled point is precisely on the edge of the c1 circle, or exactly on the center of c1 when its radius is 0.
This fixes the dots in demos/radial-test.c except for two: When the c2 circle has radius 0 and a repeat mode of NONE, the dot remains. When the repeat mode is NORMAL, the dot is now red where it used to be white. Before these cases correspond to a t value of 1.0, which we generally treat as a value that is outside the gradient's defined interval [0.0,1) and is therefore subject to the repeat algorithm. Given this, in the repeat==NONE case, a value of 1.0 is expected to generate a value of { 0, 0, 0, 0 }. In the repeat==NORMAL, it wraps around and becomes the value at 0.0, which is red in radial-test. Cc: ranm...@gmail.com --- pixman/pixman-radial-gradient.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pixman/pixman-radial-gradient.c b/pixman/pixman-radial-gradient.c index 8d56246..6a21796 100644 --- a/pixman/pixman-radial-gradient.c +++ b/pixman/pixman-radial-gradient.c @@ -109,7 +109,7 @@ radial_compute_color (double a, } else { - if (t * dr > mindr) + if (t * dr >= mindr) return _pixman_gradient_walker_pixel (walker, t); } @@ -145,9 +145,9 @@ radial_compute_color (double a, } else { - if (t0 * dr > mindr) + if (t0 * dr >= mindr) return _pixman_gradient_walker_pixel (walker, t0); - else if (t1 * dr > mindr) + else if (t1 * dr >= mindr) return _pixman_gradient_walker_pixel (walker, t1); } } -- 1.7.11.7 _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman