X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fgfxpoly%2Fwind.h;fp=lib%2Fgfxpoly%2Fwind.h;h=a07ed6424d4285924f41f255cd58fee38b9ed2ba;hp=1dae74ee8cc11fd9a6d209b0b9aff0a115bae813;hb=a9634f803811f39e67114955c3e9c30ae247a669;hpb=98370d6c69a85a6b148939956d8edfb324a0740a diff --git a/lib/gfxpoly/wind.h b/lib/gfxpoly/wind.h index 1dae74e..a07ed64 100644 --- a/lib/gfxpoly/wind.h +++ b/lib/gfxpoly/wind.h @@ -1,7 +1,37 @@ #ifndef __wind_h__ #define __wind_h__ -#include "poly.h" +/* Every segment has an original direction, which is the direction + the segment had in the input data. + as our scanline moves from minimum y to maximum y, "DOWN" means + the the (original) segment's y2 is larger than its y1 */ +typedef enum {DIR_UP, DIR_DOWN, DIR_UNKNOWN} segment_dir_t; + +#define DIR_INVERT(d) ((d)^(DIR_UP^DIR_DOWN)) + +typedef struct _edgestyle { + void*internal; +} edgestyle_t; + +extern edgestyle_t edgestyle_default; + +typedef struct _windstate +{ + char is_filled; + int wind_nr; +} windstate_t; + +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, edgestyle_t*edge, segment_dir_t dir, int polygon_nr); + edgestyle_t* (*diff)(windstate_t*left, windstate_t*right); +} windrule_t; extern windrule_t windrule_evenodd; extern windrule_t windrule_circular;