[poppler] poppler/PreScanOutputDev.cc poppler/PreScanOutputDev.h
Albert Astals Cid
aacid at kemper.freedesktop.org
Sat Mar 15 09:16:17 PDT 2014
poppler/PreScanOutputDev.cc | 16 ++++++++++++++--
poppler/PreScanOutputDev.h | 3 ++-
2 files changed, 16 insertions(+), 3 deletions(-)
New commits:
commit 1e93c3f2d1c86edd40ca283ed422089f64886d04
Author: William Bader <williambader at hotmail.com>
Date: Sat Mar 15 17:14:21 2014 +0100
Fix regression when creating level1 PS
Bug #75241
diff --git a/poppler/PreScanOutputDev.cc b/poppler/PreScanOutputDev.cc
index 6a01126..b2af18d 100644
--- a/poppler/PreScanOutputDev.cc
+++ b/poppler/PreScanOutputDev.cc
@@ -15,7 +15,7 @@
//
// Copyright (C) 2009 Carlos Garcia Campos <carlosgc at gnome.org>
// Copyright (C) 2010, 2011 Albert Astals Cid <aacid at kde.org>
-// Copyright (C) 2011 William Bader <williambader at hotmail.com>
+// Copyright (C) 2011, 2014 William Bader <williambader at hotmail.com>
// Copyright (C) 2011, 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
// Copyright (C) 2011 Adrian Johnson <ajohnson at 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 0fc9d3e..50fcbf2 100644
--- a/poppler/PreScanOutputDev.h
+++ b/poppler/PreScanOutputDev.h
@@ -15,7 +15,7 @@
//
// Copyright (C) 2009 Carlos Garcia Campos <carlosgc at gnome.org>
// Copyright (C) 2010 Albert Astals Cid <aacid at kde.org>
-// Copyright (C) 2011 William Bader <williambader at hotmail.com>
+// Copyright (C) 2011, 2014 William Bader <williambader at hotmail.com>
// Copyright (C) 2011, 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
// Copyright (C) 2011 Adrian Johnson <ajohnson at redneon.com>
//
@@ -176,6 +176,7 @@ private:
GBool gdi;
PSLevel level; // PostScript level (1, 2, separation)
GBool patternImgMask;
+ int inTilingPatternFill;
};
#endif
More information about the poppler
mailing list