X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fpoly.h;h=ac1ff376ca0858eab246d11bf96d047b2a99f8d7;hp=6e4c7e40c1a34b6752bb0b5fdf279932d801aa2b;hb=ae9783cbbddf61f59a1d43180be3999206e5b28f;hpb=de3641737991ed13571eb947068472cf73001032 diff --git a/lib/gfxpoly/poly.h b/lib/gfxpoly/poly.h index 6e4c7e4..ac1ff37 100644 --- a/lib/gfxpoly/poly.h +++ b/lib/gfxpoly/poly.h @@ -5,7 +5,8 @@ #include "../q.h" //#define DEBUG -//#define CHECKS +#define CHECKS +#define SPLAY typedef enum {DIR_UP, DIR_DOWN} segment_dir_t; typedef enum {EVENT_CROSS, EVENT_END, EVENT_CORNER, EVENT_START, EVENT_HORIZONTAL} eventtype_t; @@ -42,6 +43,8 @@ typedef struct _windrule fillstyle_t* (*diff)(windstate_t*left, windstate_t*right); } windrule_t; +#define SEGNR(s) ((s)?(s)->nr:-1) + typedef struct _segment { point_t a; point_t b; @@ -58,6 +61,11 @@ typedef struct _segment { windstate_t wind; int nr; +#ifdef SPLAY + struct _segment*parent; + struct _segment*leftchild; + struct _segment*rightchild; +#endif struct _segment*left; struct _segment*right; char changed; @@ -81,10 +89,7 @@ typedef struct _segment { #define XPOS_INT(s,ypos) ((int)ceil(XPOS((s),ypos))) #define XDIFF(s1,s2,ypos) (((s1)->k + (double)(s1)->delta.x*ypos)*(s2)->delta.y - \ - ((s2)->k + (double)(s1)->delta.x*ypos)*(s1)->delta.y) - -// rewrite as XDIFF==0? -#define XPOS_EQ(s1,s2,ypos) (XPOS((s1),(ypos))==XPOS((s2),(ypos))) + ((s2)->k + (double)(s2)->delta.x*ypos)*(s1)->delta.y) typedef struct _gfxpoly { double gridsize;