diff options
author | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2015-08-13 17:17:22 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2015-08-13 18:26:01 +0200 |
commit | 86b47f5138c0c5b882359a48052a796bc91a5afb (patch) | |
tree | eba136edac7f69b48643cff81aebb4d9ce389698 /vcl | |
parent | 07ebec47da4a096aaab53bf6a90bb219ce29bfbf (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
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/gdi/pdfwriter_impl.cxx | 9 |
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 ); |