[poppler] splash/SplashClip.cc splash/SplashXPathScanner.cc splash/SplashXPathScanner.h

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Aug 21 09:43:19 UTC 2021


 splash/SplashClip.cc         |   10 +---------
 splash/SplashXPathScanner.cc |   12 ++++++++++++
 splash/SplashXPathScanner.h  |    6 ++++++
 3 files changed, 19 insertions(+), 9 deletions(-)

New commits:
commit bfe82d7c2dba2ec3c97855232b75bde29cbdff44
Author: Thomas Freitag <thomas.freitag at alfa.de>
Date:   Fri Aug 20 15:36:49 2021 +0200

    instead of creating new scanner just copy the existing ones

diff --git a/splash/SplashClip.cc b/splash/SplashClip.cc
index 71256735..b98936dc 100644
--- a/splash/SplashClip.cc
+++ b/splash/SplashClip.cc
@@ -72,7 +72,6 @@ SplashClip::SplashClip(SplashCoord x0, SplashCoord y0, SplashCoord x1, SplashCoo
 
 SplashClip::SplashClip(SplashClip *clip)
 {
-    int yMinAA, yMaxAA;
     int i;
 
     antialias = clip->antialias;
@@ -92,14 +91,7 @@ SplashClip::SplashClip(SplashClip *clip)
     for (i = 0; i < length; ++i) {
         paths[i] = clip->paths[i]->copy();
         flags[i] = clip->flags[i];
-        if (antialias) {
-            yMinAA = yMinI * splashAASize;
-            yMaxAA = (yMaxI + 1) * splashAASize - 1;
-        } else {
-            yMinAA = yMinI;
-            yMaxAA = yMaxI;
-        }
-        scanners[i] = new SplashXPathScanner(paths[i], flags[i] & splashClipEO, yMinAA, yMaxAA);
+        scanners[i] = clip->scanners[i]->copy();
     }
 }
 
diff --git a/splash/SplashXPathScanner.cc b/splash/SplashXPathScanner.cc
index 98a49912..65a5a7c0 100644
--- a/splash/SplashXPathScanner.cc
+++ b/splash/SplashXPathScanner.cc
@@ -112,6 +112,18 @@ SplashXPathScanner::SplashXPathScanner(SplashXPath *xPathA, bool eoA, int clipYM
     computeIntersections();
 }
 
+SplashXPathScanner::SplashXPathScanner(SplashXPathScanner *scanner)
+{
+    xPath = scanner->xPath;
+    eo = scanner->eo;
+    xMin = scanner->xMin;
+    yMin = scanner->yMin;
+    xMax = scanner->xMax;
+    yMax = scanner->yMax;
+    partialClip = scanner->partialClip;
+    allIntersections = scanner->allIntersections;
+}
+
 SplashXPathScanner::~SplashXPathScanner() { }
 
 void SplashXPathScanner::getBBoxAA(int *xMinA, int *yMinA, int *xMaxA, int *yMaxA)
diff --git a/splash/SplashXPathScanner.h b/splash/SplashXPathScanner.h
index d05b66ad..5c840dab 100644
--- a/splash/SplashXPathScanner.h
+++ b/splash/SplashXPathScanner.h
@@ -53,6 +53,9 @@ public:
     // Create a new SplashXPathScanner object.  <xPathA> must be sorted.
     SplashXPathScanner(SplashXPath *xPathA, bool eoA, int clipYMin, int clipYMax);
 
+    // Copy a scanner.
+    SplashXPathScanner *copy() { return new SplashXPathScanner(this); }
+
     ~SplashXPathScanner();
 
     SplashXPathScanner(const SplashXPathScanner &) = delete;
@@ -93,6 +96,9 @@ public:
     // will update <x0> and <x1>.
     void clipAALine(SplashBitmap *aaBuf, int *x0, int *x1, int y);
 
+protected:
+    SplashXPathScanner(SplashXPathScanner *scanner);
+
 private:
     void computeIntersections();
     bool addIntersection(double segYMin, double segYMax, int y, int x0, int x1, int count);


More information about the poppler mailing list