summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorsten Behrens <Thorsten.Behrens@CIB.de>2015-08-13 17:17:22 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2015-08-13 18:26:01 +0200
commit86b47f5138c0c5b882359a48052a796bc91a5afb (patch)
treeeba136edac7f69b48643cff81aebb4d9ce389698
parent07ebec47da4a096aaab53bf6a90bb219ce29bfbf (diff)
tdf#44388: handle the NULL clip correctly for pdf output
With the rework to use basegfx polygon clipping (a334752), the case 'fully clipped away', aka NULL clip, aka nothing visible, stopped working. Manifests itself as an empty clip polygon, but with m_bClipRegion being true. Explicitely write out as zero-surface clip polygon. i#65128 is related. Change-Id: I57389fcd057d75dfa4e0de9ebb86794437c70b55
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx9
1 files changed, 6 insertions, 3 deletions
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 66baa21c2729..d8fb926be439 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -11956,14 +11956,14 @@ void PDFWriterImpl::updateGraphicsState(Mode const mode)
if( m_aCurrentPDFState.m_bClipRegion != rNewState.m_bClipRegion ||
( rNewState.m_bClipRegion && m_aCurrentPDFState.m_aClipRegion != rNewState.m_aClipRegion ) )
{
- if( m_aCurrentPDFState.m_bClipRegion && m_aCurrentPDFState.m_aClipRegion.count() )
+ if( m_aCurrentPDFState.m_bClipRegion )
{
aLine.append( "Q " );
// invalidate everything but the clip region
m_aCurrentPDFState = GraphicsState();
rNewState.m_nUpdateFlags = sal::static_int_cast<sal_uInt16>(~GraphicsState::updateClipRegion);
}
- if( rNewState.m_bClipRegion && rNewState.m_aClipRegion.count() )
+ if( rNewState.m_bClipRegion )
{
// clip region is always stored in private PDF mapmode
MapMode aNewMapMode = rNewState.m_aMapMode;
@@ -11972,7 +11972,10 @@ void PDFWriterImpl::updateGraphicsState(Mode const mode)
m_aCurrentPDFState.m_aMapMode = rNewState.m_aMapMode;
aLine.append( "q " );
- m_aPages.back().appendPolyPolygon( rNewState.m_aClipRegion, aLine );
+ if( rNewState.m_aClipRegion.count() )
+ m_aPages.back().appendPolyPolygon( rNewState.m_aClipRegion, aLine );
+ else
+ aLine.append( "0 0 m h " ); // NULL clip, i.e. nothing visible
aLine.append( "W* n\n" );
rNewState.m_aMapMode = aNewMapMode;
getReferenceDevice()->SetMapMode( rNewState.m_aMapMode );