X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fpoly.h;fp=lib%2Fgfxpoly%2Fpoly.h;h=0017f8e8b78f10ce82a0393b4da09d527c4f2368;hp=3129ee2c036fff455ac856e3c26c4e861bf0b1ab;hb=a9634f803811f39e67114955c3e9c30ae247a669;hpb=98370d6c69a85a6b148939956d8edfb324a0740a diff --git a/lib/gfxpoly/poly.h b/lib/gfxpoly/poly.h index 3129ee2..0017f8e 100644 --- a/lib/gfxpoly/poly.h +++ b/lib/gfxpoly/poly.h @@ -4,12 +4,12 @@ #include #include "../q.h" #include "../types.h" +#include "wind.h" /* features */ #define SPLAY #define DONT_REMEMBER_CROSSINGS -typedef enum {DIR_UP, DIR_DOWN, DIR_UNKNOWN} segment_dir_t; typedef enum {EVENT_CROSS, EVENT_END, EVENT_START, EVENT_HORIZONTAL} eventtype_t; typedef enum {SLOPE_POSITIVE, SLOPE_NEGATIVE} slope_t; @@ -20,37 +20,14 @@ typedef struct _point { } point_t; type_t point_type; -typedef struct _fillstyle { - void*internal; -} fillstyle_t; - -typedef struct _windstate -{ - char is_filled; - int wind_nr; -} windstate_t; - -/* TODO: maybe we should merge windcontext and windrule */ -typedef struct _windcontext -{ - int num_polygons; -} windcontext_t; - -typedef struct _windrule -{ - windstate_t (*start)(windcontext_t* num_polygons); - windstate_t (*add)(windcontext_t*context, windstate_t left, fillstyle_t*edge, segment_dir_t dir, int polygon_nr); - fillstyle_t* (*diff)(windstate_t*left, windstate_t*right); -} windrule_t; - -#define SEGNR(s) ((s)?(s)->nr:-1) +#define SEGNR(s) ((int)((s)?(s)->nr:-1)) typedef struct _gfxpolystroke { segment_dir_t dir; + edgestyle_t*fs; int points_size; int num_points; point_t*points; - fillstyle_t*fs; struct _gfxpolystroke*next; } gfxpolystroke_t; typedef struct _gfxpoly { @@ -66,8 +43,8 @@ typedef struct _segment { int32_t minx, maxx; segment_dir_t dir; - fillstyle_t*fs; - fillstyle_t*fs_out; + edgestyle_t*fs; + edgestyle_t*fs_out; #ifdef CHECKS char fs_out_ok; #endif @@ -113,11 +90,12 @@ typedef struct _segment { void gfxpoly_fail(char*expr, char*file, int line, const char*function); -char gfxpoly_check(gfxpoly_t*poly); +char gfxpoly_check(gfxpoly_t*poly, char updown); int gfxpoly_num_segments(gfxpoly_t*poly); int gfxpoly_size(gfxpoly_t*poly); void gfxpoly_dump(gfxpoly_t*poly); void gfxpoly_save(gfxpoly_t*poly, const char*filename); +void gfxpoly_save_arrows(gfxpoly_t*poly, const char*filename); gfxpoly_t* gfxpoly_process(gfxpoly_t*poly1, gfxpoly_t*poly2, windrule_t*windrule, windcontext_t*context); gfxpoly_t* gfxpoly_intersect(gfxpoly_t*p1, gfxpoly_t*p2);