From 581d73d3a579f2c55fbb0a756108cca4efda157b Mon Sep 17 00:00:00 2001 From: Alvin Penner Date: Sun, 6 May 2012 16:33:32 -0400 Subject: improved workaround to prevent GfxRadialShading from getting corrupted during copy operation (Bug 919176 comment 8) Fixed bugs: - https://launchpad.net/bugs/919176 (bzr r11340) --- src/extension/internal/pdfinput/pdf-parser.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/extension/internal/pdfinput/pdf-parser.cpp') diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp index 5e8b005e2..08e313e59 100644 --- a/src/extension/internal/pdfinput/pdf-parser.cpp +++ b/src/extension/internal/pdfinput/pdf-parser.cpp @@ -3198,9 +3198,22 @@ void PdfParser::opMarkPoint(Object args[], int numArgs) { //------------------------------------------------------------------------ void PdfParser::saveState() { + bool is_radial = false; + + GfxPattern *pattern = state->getFillPattern(); + if (pattern != NULL) + if (pattern->getType() == 2 ) { + GfxShadingPattern *shading_pattern = static_cast(pattern); + GfxShading *shading = shading_pattern->getShading(); + if (shading->getType() == 3) + is_radial = true; + } + builder->saveState(); -// state = state->save(); // nasty hack to prevent GfxRadialShading from getting corrupted during copy operation - state->save(); // see LP Bug 919176 comment 8 + if (is_radial) + state->save(); // nasty hack to prevent GfxRadialShading from getting corrupted during copy operation + else + state = state->save(); // see LP Bug 919176 comment 8 clipHistory = clipHistory->save(); } -- cgit v1.2.3