[cairo-commit] cairo/src cairo-hull.c,1.9,1.10
Bertram Felgenhauer
commit at pdx.freedesktop.org
Thu Sep 29 17:26:22 PDT 2005
Committed by: inte
Update of /cvs/cairo/cairo/src
In directory gabe:/tmp/cvs-serv18492/src
Modified Files:
cairo-hull.c
Log Message:
2005-09-30 Bertram Felgenhauer <int-e at gmx.de>
reviewed by: cworth
* src/cairo-hull.c (_cairo_hull_create),
(_cairo_hull_vertex_compare): Using a pointer comparison as the
fallback total order was wrong - these pointers are not stable.
So we introduce our own total order instead.
* ROADMAP: mark 4599 as fixed
Index: cairo-hull.c
===================================================================
RCS file: /cvs/cairo/cairo/src/cairo-hull.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- cairo-hull.c 21 Aug 2005 18:41:44 -0000 1.9
+++ cairo-hull.c 30 Sep 2005 00:26:20 -0000 1.10
@@ -41,6 +41,7 @@
cairo_point_t point;
cairo_slope_t slope;
int discard;
+ int id;
} cairo_hull_t;
static cairo_hull_t *
@@ -70,10 +71,13 @@
_cairo_slope_init (&hull[i].slope, &hull[0].point, &hull[i].point);
/* Discard all points coincident with the extremal point */
- if (i != 0 && hull[i].slope.dx == 0 && hull[i].slope.dy == 0)
+ if (i != 0 && hull[i].slope.dx == 0 && hull[i].slope.dy == 0) {
hull[i].discard = 1;
- else
+ hull[i].id = -i;
+ } else {
hull[i].discard = 0;
+ hull[i].id = i;
+ }
}
return hull;
@@ -98,11 +102,11 @@
b_dist = ((cairo_fixed_48_16_t) b->slope.dx * b->slope.dx +
(cairo_fixed_48_16_t) b->slope.dy * b->slope.dy);
/*
- * Use pointer comparison for coincident points to ensure
+ * Use the point's ids to ensure a total ordering.
* a well-defined ordering, and avoid setting discard on
- * both points.
+ * both points.
*/
- if (a_dist < b_dist || (a_dist == b_dist && a < b)) {
+ if (a_dist < b_dist || (a_dist == b_dist && a->id < b->id)) {
a->discard = 1;
ret = -1;
} else {
More information about the cairo-commit
mailing list