Spaces:
Running
Running
File size: 3,707 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 |
//========================================================================
//
// SplashXPath.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) 2013 Thomas Freitag <[email protected]>
// Copyright (C) 2018, 2021 Albert Astals Cid <[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 SPLASHXPATH_H
#define SPLASHXPATH_H
#include "SplashTypes.h"
class SplashPath;
struct SplashXPathAdjust;
//------------------------------------------------------------------------
#define splashMaxCurveSplits (1 << 10)
//------------------------------------------------------------------------
// SplashXPathSeg
//------------------------------------------------------------------------
struct SplashXPathSeg
{
SplashCoord x0, y0; // first endpoint
SplashCoord x1, y1; // second endpoint
SplashCoord dxdy; // slope: delta-x / delta-y
SplashCoord dydx; // slope: delta-y / delta-x
unsigned int flags;
};
#define splashXPathHoriz \
0x01 // segment is vertical (y0 == y1)
// (dxdy is undef)
#define splashXPathVert \
0x02 // segment is horizontal (x0 == x1)
// (dydx is undef)
#define splashXPathFlip 0x04 // y0 > y1
//------------------------------------------------------------------------
// SplashXPath
//------------------------------------------------------------------------
class SplashXPath
{
public:
// Expands (converts to segments) and flattens (converts curves to
// lines) <path>. Transforms all points from user space to device
// space, via <matrix>. If <closeSubpaths> is true, closes all open
// subpaths.
SplashXPath(SplashPath *path, SplashCoord *matrix, SplashCoord flatness, bool closeSubpaths, bool adjustLines = false, int linePosI = 0);
~SplashXPath();
SplashXPath(const SplashXPath &) = delete;
SplashXPath &operator=(const SplashXPath &) = delete;
// Multiply all coordinates by splashAASize, in preparation for
// anti-aliased rendering.
void aaScale();
// Sort by upper coordinate (lower y), in y-major order.
void sort();
protected:
void transform(SplashCoord *matrix, SplashCoord xi, SplashCoord yi, SplashCoord *xo, SplashCoord *yo);
void strokeAdjust(SplashXPathAdjust *adjust, SplashCoord *xp, SplashCoord *yp);
void grow(int nSegs);
void addCurve(SplashCoord x0, SplashCoord y0, SplashCoord x1, SplashCoord y1, SplashCoord x2, SplashCoord y2, SplashCoord x3, SplashCoord y3, SplashCoord flatness, bool first, bool last, bool end0, bool end1);
void addSegment(SplashCoord x0, SplashCoord y0, SplashCoord x1, SplashCoord y1);
SplashXPathSeg *segs;
int length, size; // length and size of segs array
friend class SplashXPathScanner;
friend class SplashClip;
friend class Splash;
};
#endif
|