Spaces:
Running
Running
File size: 4,359 Bytes
5cee033 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
//========================================================================
//
// SplashPath.h
//
//========================================================================
//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2018, 2019, 2021 Albert Astals Cid <[email protected]>
// Copyright (C) 2018 Stefan Brüns <[email protected]>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
#ifndef SPLASHPATH_H
#define SPLASHPATH_H
#include "SplashTypes.h"
#include "poppler_private_export.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
//------------------------------------------------------------------------
// SplashPathHint
//------------------------------------------------------------------------
struct SplashPathHint
{
int ctrl0, ctrl1;
int firstPt, lastPt;
};
//------------------------------------------------------------------------
// SplashPath
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT SplashPath
{
public:
// Create an empty path.
SplashPath();
~SplashPath();
SplashPath(const SplashPath &) = delete;
SplashPath &operator=(const SplashPath &) = delete;
SplashPath(SplashPath &&path) noexcept;
// 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);
// Close the last subpath, adding a line segment if necessary. If
// <force> is true, this adds a line segment even if the current
// point is equal to the first point in the subpath.
SplashError close(bool force = false);
// Add a stroke adjustment hint. The controlling segments are
// <ctrl0> and <ctrl1> (where segments are identified by their first
// point), and the points to be adjusted are <firstPt> .. <lastPt>.
void addStrokeAdjustHint(int ctrl0, int ctrl1, int firstPt, int lastPt);
// Add (<dx>, <dy>) to every point on this path.
void offset(SplashCoord dx, SplashCoord dy);
// Get the points on the path.
int getLength() { return length; }
void getPoint(int i, double *x, double *y, unsigned char *f)
{
*x = pts[i].x;
*y = pts[i].y;
*f = flags[i];
}
// Get the current point.
bool getCurPt(SplashCoord *x, SplashCoord *y);
// Reserve space for at least n points
void reserve(int n);
protected:
void grow(int nPts);
bool noCurrentPoint() { return curSubpath == length; }
bool onePointSubpath() { return curSubpath == length - 1; }
bool openSubpath() { return curSubpath < length - 1; }
SplashPathPoint *pts; // array of points
unsigned char *flags; // array of flags
int length, size; // length/size of the pts and flags arrays
int curSubpath; // index of first point in last subpath
SplashPathHint *hints; // list of hints
int hintsLength, hintsSize;
friend class SplashXPath;
friend class Splash;
};
#endif
|