2
#include "splash/SplashXPathScanner.h"
3
#include "OPVPSplashClip.h"
5
void OPVPSplashClip::getBBox(int *xMinA, int *yMinA, int *xMaxA, int *yMaxA)
8
int cxMin = splashRound(xMin), cyMin = splashRound(yMin);
9
int cxMax = splashRound(xMax), cyMax = splashRound(yMax);
10
int txMin, tyMin, txMax, tyMax;
12
for (i = 0; i < length; ++i) {
13
scanners[i]->getBBox(&txMin,&tyMin,&txMax,&tyMax);
14
if (txMin > cxMin) cxMin = txMin;
15
if (tyMin > cyMin) cyMin = tyMin;
16
if (txMax < cxMax) cxMax = txMax;
17
if (tyMax < cyMax) cyMax = tyMax;
25
OPVPSplashPath *OPVPSplashClip::makePath()
29
int txMin, tyMin, txMax, tyMax;
30
int tsxMin, tsyMin, tsxMax, tsyMax;
33
OPVPSplashPath *p = new OPVPSplashPath();
35
getBBox(&txMin,&tyMin,&txMax,&tyMax);
36
if (txMin > txMax || tyMin > tyMax) return p;
38
cbuf = new Guchar[blen];
39
tbuf = new Guchar[blen];
41
/* dummy call to clear state */
42
scanners[0]->getBBox(&tsxMin,&tsyMin,&tsxMax,&tsyMax);
43
scanners[0]->getNextSpan(tsyMin-2,&x0,&x1);
45
for (y = tyMin;y <= tyMax;y++) {
47
for (i = 0;i < blen;i++) {
50
while (scanners[0]->getNextSpan(y,&x0,&x1)) {
51
if (x0 < txMin) x0 = txMin;
52
if (x1 > txMax) x1 = txMax;
53
for (i = x0;i < x1;i++) {
57
for (j = 1; j < length; ++j) {
59
for (i = 0;i < blen;i++) {
62
while (scanners[j]->getNextSpan(y,&x0,&x1)) {
63
if (x0 < txMin) x0 = txMin;
64
if (x1 > txMax) x1 = txMax;
65
for (i = x0;i < x1;i++) {
70
for (i = 0;i < blen;i++) {
74
/* scan buffer and add path */
75
for (i = 0;i < blen;i = j) {
78
for (j = i+1;j < blen && cbuf[j] != 0;j++);
79
p->lineTo(j-1+txMin,y);
80
p->lineTo(j-1+txMin,y+1);
81
p->lineTo(i+txMin,y+1);