You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.8 KiB
107 lines
2.8 KiB
//======================================================================== |
|
// |
|
// SplashPath.h |
|
// |
|
//======================================================================== |
|
|
|
#ifndef SPLASHPATH_H |
|
#define SPLASHPATH_H |
|
|
|
#include <aconf.h> |
|
|
|
#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 <path> to <this>. |
|
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 (<dx>, <dy>) 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
|
|
|