summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Bader <williambader@hotmail.com>2014-03-15 17:14:21 +0100
committerAlbert Astals Cid <aacid@kde.org>2014-03-15 17:15:58 +0100
commit1e93c3f2d1c86edd40ca283ed422089f64886d04 (patch)
treea1e1b98594baddef16c16125a9c7589755ec5df6
parent1ea2eb412d12d97eaf49d1e51d7fda7abd8fbf9d (diff)
Fix regression when creating level1 PS
Bug #75241
-rw-r--r--poppler/PreScanOutputDev.cc16
-rw-r--r--poppler/PreScanOutputDev.h3
2 files changed, 16 insertions, 3 deletions
diff --git a/poppler/PreScanOutputDev.cc b/poppler/PreScanOutputDev.cc
index 6a011266..b2af18d8 100644
--- a/poppler/PreScanOutputDev.cc
+++ b/poppler/PreScanOutputDev.cc
@@ -15,7 +15,7 @@
//
// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org>
// Copyright (C) 2010, 2011 Albert Astals Cid <aacid@kde.org>
-// Copyright (C) 2011 William Bader <williambader@hotmail.com>
+// Copyright (C) 2011, 2014 William Bader <williambader@hotmail.com>
// Copyright (C) 2011, 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com>
//
@@ -87,7 +87,14 @@ GBool PreScanOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, Catalog *ca
int x0, int y0, int x1, int y1,
double xStep, double yStep) {
if (paintType == 1) {
+ GBool tilingNeeded = (x1 - x0 != 1 || y1 - y0 != 1);
+ if (tilingNeeded) {
+ inTilingPatternFill++;
+ }
gfx->drawForm(str, resDict, mat, bbox);
+ if (tilingNeeded) {
+ inTilingPatternFill--;
+ }
} else {
check(state->getFillColorSpace(), state->getFillColor(),
state->getFillOpacity(), state->getBlendMode());
@@ -200,7 +207,7 @@ void PreScanOutputDev::drawImageMask(GfxState *state, Object * /*ref*/, Stream *
state->getFillOpacity(), state->getBlendMode());
gdi = gFalse;
if ((level == psLevel1 || level == psLevel1Sep) &&
- state->getFillColorSpace()->getMode() == csPattern) {
+ (state->getFillColorSpace()->getMode() == csPattern || inTilingPatternFill > 0)) {
patternImgMask = gTrue;
}
@@ -238,6 +245,10 @@ void PreScanOutputDev::drawImage(GfxState *state, Object * /*ref*/, Stream *str,
transparency = gTrue;
}
gdi = gFalse;
+ if ((level == psLevel1 || level == psLevel1Sep) &&
+ inTilingPatternFill > 0) {
+ patternImgMask = gTrue;
+ }
if (inlineImg) {
str->reset();
@@ -354,4 +365,5 @@ void PreScanOutputDev::clearStats() {
transparency = gFalse;
gdi = gTrue;
patternImgMask = gFalse;
+ inTilingPatternFill = 0;
}
diff --git a/poppler/PreScanOutputDev.h b/poppler/PreScanOutputDev.h
index 0fc9d3e3..50fcbf22 100644
--- a/poppler/PreScanOutputDev.h
+++ b/poppler/PreScanOutputDev.h
@@ -15,7 +15,7 @@
//
// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org>
// Copyright (C) 2010 Albert Astals Cid <aacid@kde.org>
-// Copyright (C) 2011 William Bader <williambader@hotmail.com>
+// Copyright (C) 2011, 2014 William Bader <williambader@hotmail.com>
// Copyright (C) 2011, 2013 Thomas Freitag <Thomas.Freitag@alfa.de>
// Copyright (C) 2011 Adrian Johnson <ajohnson@redneon.com>
//
@@ -176,6 +176,7 @@ private:
GBool gdi;
PSLevel level; // PostScript level (1, 2, separation)
GBool patternImgMask;
+ int inTilingPatternFill;
};
#endif