X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fpoly.h;h=4154e798990ca75afb2f1efe47f5e0eb68fd234b;hp=270734f18f2340fc251a7828af5751f33514b447;hb=82228fda28e4361ca674fb2513f1c23c471421e6;hpb=7be8967177293d3a0b4b8a286f16b740933ac583 diff --git a/lib/gfxpoly/poly.h b/lib/gfxpoly/poly.h index 270734f..4154e79 100644 --- a/lib/gfxpoly/poly.h +++ b/lib/gfxpoly/poly.h @@ -4,54 +4,33 @@ #include #include "../q.h" #include "../types.h" +#include "wind.h" //#define DEBUG -//#define CHECKS +#define CHECKS /* 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; +#define INVALID_COORD (0x7fffffff) typedef struct _point { int32_t x; int32_t y; } 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 { @@ -67,8 +46,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