diff options
author | William Bader <williambader@hotmail.com> | 2014-03-15 17:14:21 +0100 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2014-03-15 17:15:58 +0100 |
commit | 1e93c3f2d1c86edd40ca283ed422089f64886d04 (patch) | |
tree | a1e1b98594baddef16c16125a9c7589755ec5df6 | |
parent | 1ea2eb412d12d97eaf49d1e51d7fda7abd8fbf9d (diff) |
Fix regression when creating level1 PS
Bug #75241
-rw-r--r-- | poppler/PreScanOutputDev.cc | 16 | ||||
-rw-r--r-- | poppler/PreScanOutputDev.h | 3 |
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 |