[cairo] intersect_lines in Bentley Ottman implementation

M Joonas Pihlaja jpihlaja at cc.helsinki.fi
Sun Jun 1 15:37:06 PDT 2008


Hi,

It's a little annoying I can't test for the bug using the client 
side API.  Filling is masked by pixman as mentioned before, and 
cairo_in_fill() doesn't expose it either.  Below is a patch that 
doesn't introduce failures in the test suite and fixes the wrong 
trap generation.

The broken and fixed tessellations are visible here (flip through 
the pages, note the last trap in the broken version):

http://www.discontinuity.info/~rowan/broke-star.ps
http://www.discontinuity.info/~rowan/fixed-star.ps

Joonas

diff --git a/src/cairo-bentley-ottmann.c 
b/src/cairo-bentley-ottmann.c
index 208da7c..a2c55a2 100644
--- a/src/cairo-bentley-ottmann.c
+++ b/src/cairo-bentley-ottmann.c
@@ -1214,7 +1214,7 @@ _active_edges_to_traps (cairo_bo_edge_t           *head,
      int in_out = 0;
      cairo_bo_edge_t *edge;

-    for (edge = head; edge && edge->next; edge = edge->next) {
+    for (edge = head; edge; edge = edge->next) {
         if (fill_rule == CAIRO_FILL_RULE_WINDING) {
             if (edge->reversed)
                 in_out++;



More information about the cairo mailing list