//======================================================================== // // SplashPath.h // //======================================================================== #ifndef SPLASHPATH_H #define SPLASHPATH_H #include #ifdef USE_GCC_PRAGMAS #pragma interface #endif #include "SplashTypes.h" //------------------------------------------------------------------------ // SplashPathPoint //------------------------------------------------------------------------ struct SplashPathPoint { SplashCoord x, y; }; //------------------------------------------------------------------------ // SplashPath.flags //------------------------------------------------------------------------ // first point on each subpath sets this flag #define splashPathFirst 0x01 // last point on each subpath sets this flag #define splashPathLast 0x02 // if the subpath is closed, its first and last points must be // identical, and must set this flag #define splashPathClosed 0x04 // curve control points set this flag #define splashPathCurve 0x08 // clockwise arc center points set this flag #define splashPathArcCW 0x10 //------------------------------------------------------------------------ // SplashPath //------------------------------------------------------------------------ class SplashPath { public: // Create an empty path. SplashPath(); // Copy a path. SplashPath *copy() { return new SplashPath(this); } ~SplashPath(); // Append to . void append(SplashPath *path); // Start a new subpath. SplashError moveTo(SplashCoord x, SplashCoord y); // Add a line segment to the last subpath. SplashError lineTo(SplashCoord x, SplashCoord y); // Add a third-order (cubic) Bezier curve segment to the last // subpath. SplashError curveTo(SplashCoord x1, SplashCoord y1, SplashCoord x2, SplashCoord y2, SplashCoord x3, SplashCoord y3); // Add a clockwise circular arc with center (xc, yc) and endpoint // (x1, y1). SplashError arcCWTo(SplashCoord x1, SplashCoord y1, SplashCoord xc, SplashCoord yc); // Close the last subpath, adding a line segment if necessary. SplashError close(); // Add (, ) to every point on this path. void offset(SplashCoord dx, SplashCoord dy); // Get the current point. GBool getCurPt(SplashCoord *x, SplashCoord *y); private: SplashPath(SplashPath *path); void grow(int nPts); GBool noCurrentPoint() { return curSubpath == length; } GBool onePointSubpath() { return curSubpath == length - 1; } GBool openSubpath() { return curSubpath < length - 1; } SplashPathPoint *pts; // array of points Guchar *flags; // array of flags int length, size; // length/size of the pts and flags arrays int curSubpath; // index of first point in last subpath friend class SplashXPath; friend class Splash; }; #endif