diff options
Diffstat (limited to 'splash/SplashXPathScanner.h')
-rw-r--r-- | splash/SplashXPathScanner.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/splash/SplashXPathScanner.h b/splash/SplashXPathScanner.h new file mode 100644 index 0000000..39cc0eb --- /dev/null +++ b/splash/SplashXPathScanner.h @@ -0,0 +1,84 @@ +//======================================================================== +// +// SplashXPathScanner.h +// +// Copyright 2003-2013 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef SPLASHXPATHSCANNER_H +#define SPLASHXPATHSCANNER_H + +#include <aconf.h> + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "SplashTypes.h" +#include "SplashXPath.h" + +class GList; + +//------------------------------------------------------------------------ + +// Set this to 0 for antialiasing with 16 levels of gray. +// Set it to 1 for (much slower) antialiasing with 256 levels of gray. +#define ANTIALIAS_256 0 + +//------------------------------------------------------------------------ +// SplashXPathScanner +//------------------------------------------------------------------------ + +class SplashXPathScanner { +public: + + // Create a new SplashXPathScanner object. <xPathA> must be sorted. + SplashXPathScanner(SplashXPath *xPathA, GBool eo, + int yMinA, int yMaxA); + + ~SplashXPathScanner(); + + // Compute shape values for a scan line. Fills in line[] with shape + // values for one scan line: ([x0, x1], y). The values are in [0, + // 255]. Also returns the min/max x positions with non-zero shape + // values. + void getSpan(Guchar *line, int y, int x0, int x1, int *xMin, int *xMax); + + // Like getSpan(), but uses the values 0 and 255 only. Writes 255 + // for all pixels which include non-zero area inside the path. + void getSpanBinary(Guchar *line, int y, int x0, int x1, + int *xMin, int *xMax); + +private: + + void insertSegmentBefore(SplashXPathSeg *s, SplashXPathSeg *sNext); + void removeSegment(SplashXPathSeg *s); + void moveSegmentAfter(SplashXPathSeg *s, SplashXPathSeg *sPrev); + void reset(GBool aa, GBool aaChanged); + void skip(int newYBottomI, GBool aa); + void advance(GBool aa); + void generatePixels(int x0, int x1, Guchar *line, int *xMin, int *xMax); + void generatePixelsBinary(int x0, int x1, Guchar *line, + int *xMin, int *xMax); + void drawRectangleSpan(Guchar *line, int y, int x0, int x1, + int *xMin, int *xMax); + void drawRectangleSpanBinary(Guchar *line, int y, int x0, int x1, + int *xMin, int *xMax); + + SplashXPath *xPath; + int eoMask; + int yMin, yMax; + int rectX0I, rectY0I, rectX1I, rectY1I; + + SplashXPathSeg preSeg, postSeg; + SplashXPathSeg *pre, *post; + + GBool resetDone; + GBool resetAA; + int nextSeg; + int yTopI, yBottomI; + SplashCoord yTop, yBottom; +}; + +#endif |