include/vcl/graphicfilter.hxx       |    1 +
 vcl/source/filter/graphicfilter.cxx |   16 ++++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

New commits:
commit 29252e78627db79662d89919f77746824c6563c3
Author:     offtkp <parisop...@gmail.com>
AuthorDate: Sun Jun 19 00:42:44 2022 +0300
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Wed Jun 22 14:12:23 2022 +0200

    Add support for exporting SVGZ in Writer
    
    When exporting a graphic through Writer, graphicfilters ExportGraphic
    is called, which didn't have SVGZ exporting functionality before this
    commit. With this commit a valid Z compressed SVG file is exported,
    using the functionality that already exists in ExportGraphic.
    
    Change-Id: I6c7476ca78a8cb3719488ac4d8a5942e0557ed36
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136094
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/vcl/graphicfilter.hxx b/include/vcl/graphicfilter.hxx
index 27388da41c28..fb237bc780a4 100644
--- a/include/vcl/graphicfilter.hxx
+++ b/include/vcl/graphicfilter.hxx
@@ -101,6 +101,7 @@ namespace o3tl
 #define EXP_EMZ                 "SVEMZ"
 #define EXP_JPEG                "SVEJPEG"
 #define EXP_SVG                 "SVESVG"
+#define EXP_SVGZ                "SVESVGZ"
 #define EXP_PDF                 "SVEPDF"
 #define EXP_PNG                 "SVEPNG"
 #define EXP_TIFF                "SVTIFF"
diff --git a/vcl/source/filter/graphicfilter.cxx 
b/vcl/source/filter/graphicfilter.cxx
index bfe1d3b7d506..f7e3765f4e94 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -1844,9 +1844,17 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& 
rGraphic, std::u16string_vi
                 if( rOStm.GetError() )
                     nStatus = ERRCODE_GRFILTER_IOERROR;
             }
-            else if( aFilterName.equalsIgnoreAsciiCase( EXP_SVG ) )
+            else if( aFilterName.equalsIgnoreAsciiCase( EXP_SVG ) || 
aFilterName.equalsIgnoreAsciiCase( EXP_SVGZ ) )
             {
                 bool bDone(false);
+                SvStream* rTempStm = &rOStm;
+                if (aFilterName.equalsIgnoreAsciiCase(EXP_SVGZ))
+                {
+                    // Write to a different stream so that we can compress to 
rOStm later
+                    rCompressableStm.SetBufferSize(rOStm.GetBufferSize());
+                    rTempStm = &rCompressableStm;
+                    bShouldCompress = true;
+                }
 
                 // do we have a native Vector Graphic Data RenderGraphic, 
whose data can be written directly?
                 auto const & 
rVectorGraphicDataPtr(rGraphic.getVectorGraphicData());
@@ -1856,9 +1864,9 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& 
rGraphic, std::u16string_vi
                     && 
!rVectorGraphicDataPtr->getBinaryDataContainer().isEmpty())
                 {
                     auto & aDataContainer = 
rVectorGraphicDataPtr->getBinaryDataContainer();
-                    rOStm.WriteBytes(aDataContainer.getData(), 
aDataContainer.getSize());
+                    rTempStm->WriteBytes(aDataContainer.getData(), 
aDataContainer.getSize());
 
-                    if( rOStm.GetError() )
+                    if( rTempStm->GetError() )
                     {
                         nStatus = ERRCODE_GRFILTER_IOERROR;
                     }
@@ -1890,7 +1898,7 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& 
rGraphic, std::u16string_vi
                             if( xActiveDataSource.is() )
                             {
                                 const css::uno::Reference< 
css::uno::XInterface > xStmIf(
-                                    static_cast< ::cppu::OWeakObject* >( new 
ImpFilterOutputStream( rOStm ) ) );
+                                    static_cast< ::cppu::OWeakObject* >( new 
ImpFilterOutputStream( *rTempStm ) ) );
 
                                 SvMemoryStream aMemStm( 65535, 65535 );
 

Reply via email to