From 17845df95b80d2a9586ba44fc5ade2c311a62c4c Mon Sep 17 00:00:00 2001 From: Billy Biggs Date: Sun, 21 Aug 2005 11:41:44 +0000 Subject: [PATCH] Fix for bug #4165: Use pointer comparison for coincident points to ensure a well-defined ordering, and avoid setting discard on both points. This fixes problems with my Mac's implementation of qsort. Final patch by Bertram Felgenhauer. Update reference images after the change. --- ChangeLog | 18 ++++++++++++++++++ src/cairo-hull.c | 7 ++++++- test/clip-operator-ref.png | Bin 37330 -> 37330 bytes test/linear-gradient-ref.png | Bin 12724 -> 12744 bytes test/operator-clear-ref.png | Bin 4992 -> 4988 bytes test/operator-source-ref.png | Bin 19957 -> 19958 bytes test/unantialiased-shapes-ref.png | Bin 4450 -> 4449 bytes test/unbounded-operator-ref.png | Bin 11937 -> 11929 bytes 8 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 71917fca0..74253d627 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2005-08-21 Billy Biggs + + Fix for bug #4165: + + * src/cairo-hull.c: (_cairo_hull_vertex_compare): Use pointer + comparison for coincident points to ensure a well-defined + ordering, and avoid setting discard on both points. This fixes + problems with my Mac's implementation of qsort. Final patch by + Bertram Felgenhauer. + + * test/clip-operator-ref.png: + * test/linear-gradient-ref.png: + * test/operator-clear-ref.png: + * test/operator-source-ref.png: + * test/unantialiased-shapes-ref.png: + * test/unbounded-operator-ref.png: Update reference images after + the change. + 2005-08-21 Owen Taylor * autogen.sh: Check automake- if automake isn't sufficiently diff --git a/src/cairo-hull.c b/src/cairo-hull.c index c93d70625..34e0588af 100644 --- a/src/cairo-hull.c +++ b/src/cairo-hull.c @@ -97,7 +97,12 @@ _cairo_hull_vertex_compare (const void *av, const void *bv) (cairo_fixed_48_16_t) a->slope.dy * a->slope.dy); b_dist = ((cairo_fixed_48_16_t) b->slope.dx * b->slope.dx + (cairo_fixed_48_16_t) b->slope.dy * b->slope.dy); - if (a_dist < b_dist) { + /* + * Use pointer comparison for coincident points to ensure + * a well-defined ordering, and avoid setting discard on + * both points. + */ + if (a_dist < b_dist || (a_dist == b_dist && a < b)) { a->discard = 1; ret = -1; } else { diff --git a/test/clip-operator-ref.png b/test/clip-operator-ref.png index 1cd0e5be1397c5904f9631b4f355f1e584edc8e0..d1be82b3d4fc46ed0000559f2d6e55d58ad04d88 100644 GIT binary patch literal 37330 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