[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - vcl/source

Thorsten Behrens Thorsten.Behrens at CIB.de
Mon Aug 17 00:47:56 PDT 2015


 vcl/source/gdi/pdfwriter_impl.cxx |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

New commits:
commit a9b3f13abc4ba780ce5a48fa910de631644da236
Author: Thorsten Behrens <Thorsten.Behrens at CIB.de>
Date:   Thu Aug 13 17:17:22 2015 +0200

    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
    (cherry picked from commit 86b47f5138c0c5b882359a48052a796bc91a5afb)
    Reviewed-on: https://gerrit.libreoffice.org/17725
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index cdfccbb..db66f60 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -11982,14 +11982,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;
@@ -11998,7 +11998,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 );


More information about the Libreoffice-commits mailing list