Author: alg
Date: Wed Jul 25 11:49:36 2012
New Revision: 1365538

URL: http://svn.apache.org/viewvc?rev=1365538&view=rev
Log:
#120175# SVG export fixes and enhancements
Patch by: Sven Jacobi
Review by: alg

Modified:
    incubator/ooo/trunk/main/filter/source/svg/svgexport.cxx
    incubator/ooo/trunk/main/filter/source/svg/svgfilter.hxx
    incubator/ooo/trunk/main/filter/source/svg/svgwriter.cxx
    incubator/ooo/trunk/main/filter/source/svg/svgwriter.hxx
    incubator/ooo/trunk/main/svtools/source/filter/filter.cxx

Modified: incubator/ooo/trunk/main/filter/source/svg/svgexport.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/svg/svgexport.cxx?rev=1365538&r1=1365537&r2=1365538&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/svg/svgexport.cxx (original)
+++ incubator/ooo/trunk/main/filter/source/svg/svgexport.cxx Wed Jul 25 
11:49:36 2012
@@ -31,7 +31,6 @@
 #include "svgfilter.hxx"
 #include "impsvgdialog.hxx"
 
-#include <svtools/FilterConfigItem.hxx>
 #include <svx/unopage.hxx>
 #include <svx/unoshape.hxx>
 #include <svx/svdpage.hxx>
@@ -49,11 +48,41 @@ using ::rtl::OUString;
 SVGExport::SVGExport( 
        const ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory > xServiceFactory,
        const Reference< XDocumentHandler >& rxHandler,
-    const Sequence< PropertyValue >& rFilterData ) :
-        SvXMLExport( xServiceFactory, MAP_100TH_MM ),
-        mrFilterData( rFilterData )
+    const Sequence< PropertyValue >& rFilterData )
+: SvXMLExport( xServiceFactory, MAP_100TH_MM )
+, mbTinyProfile                        ( sal_True )
+, mbTSpans                             ( sal_True )
+, mbEmbedFonts                 ( sal_False )
+, mbNativeTextDecoration( sal_True )
+, mbOpacity                            ( sal_True )
+, mbGradient                   ( sal_True )
 {
-    SetDocHandler( rxHandler );
+       for ( sal_Int32 i = 0, nCount = rFilterData.getLength(); i < nCount; 
i++ )
+       {
+               if ( rFilterData[ i ].Name == B2UCONST( SVG_PROP_TINYPROFILE ) )
+                       rFilterData[ i ].Value >>= mbTinyProfile;
+               else if ( rFilterData[ i ].Name == B2UCONST( "TSpans" ) )
+                       rFilterData[ i ].Value >>= mbTSpans;
+               else if ( rFilterData[ i ].Name == B2UCONST( 
SVG_PROP_EMBEDFONTS ) )
+                       rFilterData[ i ].Value >>= mbEmbedFonts;
+               else if ( rFilterData[ i ].Name == B2UCONST( 
SVG_PROP_NATIVEDECORATION ) )
+                       rFilterData[ i ].Value >>= mbNativeTextDecoration;
+               else if ( rFilterData[ i ].Name == B2UCONST( "GlyphPlacement" ) 
)
+                       rFilterData[ i ].Value >>= maGlyphPlacement;
+               else if ( rFilterData[ i ].Name == B2UCONST( SVG_PROP_OPACITY ) 
)
+                       rFilterData[ i ].Value >>= mbOpacity;
+               else if ( rFilterData[ i ].Name == B2UCONST( SVG_PROP_GRADIENT 
) )
+                       rFilterData[ i ].Value >>= mbGradient;
+       }
+       if ( mbTinyProfile )
+               mbNativeTextDecoration = sal_False;
+       else
+       {
+               mbTSpans = sal_False;
+               mbOpacity = sal_True;
+               mbGradient = sal_True;
+       }
+       SetDocHandler( rxHandler );
        GetDocHandler()->startDocument();
 }
 
@@ -66,80 +95,6 @@ SVGExport::~SVGExport()
 
 // 
-----------------------------------------------------------------------------
 
-sal_Bool SVGExport::IsUseTinyProfile() const
-{
-    sal_Bool bRet = sal_False;
-    
-    if( mrFilterData.getLength() > 0 )
-        mrFilterData[ 0 ].Value >>= bRet;
-    
-    return bRet;
-}
-
-// 
-----------------------------------------------------------------------------
-
-sal_Bool SVGExport::IsEmbedFonts() const
-{
-    sal_Bool bRet = sal_False;
-    
-    if( mrFilterData.getLength() > 1 )
-        mrFilterData[ 1 ].Value >>= bRet;
-    
-    return bRet;
-}
-
-// 
-----------------------------------------------------------------------------
-
-sal_Bool SVGExport::IsUseNativeTextDecoration() const
-{
-    sal_Bool bRet = !IsUseTinyProfile();
-    
-    if( bRet && ( mrFilterData.getLength() > 2 ) )
-        mrFilterData[ 2 ].Value >>= bRet;
-    
-    return bRet;
-}
-
-// 
-----------------------------------------------------------------------------
-
-::rtl::OUString SVGExport::GetGlyphPlacement() const
-{
-    ::rtl::OUString aRet;
-    
-    if( mrFilterData.getLength() > 3 )
-        mrFilterData[ 3 ].Value >>= aRet;
-    else
-        aRet = B2UCONST( "abs" );
-        
-    return aRet;
-}
-
-// 
-----------------------------------------------------------------------------
-
-sal_Bool SVGExport::IsUseOpacity() const
-{
-    sal_Bool bRet = !IsUseTinyProfile();
-    
-    if( !bRet && ( mrFilterData.getLength() > 4 ) )
-        mrFilterData[ 4 ].Value >>= bRet;
-    
-    return bRet;
-}
-
-// 
-----------------------------------------------------------------------------
-
-sal_Bool SVGExport::IsUseGradient() const
-{
-    sal_Bool bRet = !IsUseTinyProfile();
-    
-    if( !bRet && ( mrFilterData.getLength() > 5 ) )
-        mrFilterData[ 5 ].Value >>= bRet;
-    
-    return bRet;
-}
-
-// 
-----------------------------------------------------------------------------
-
 void SVGExport::pushClip( const ::basegfx::B2DPolyPolygon& rPolyPoly )
 {
     maClipList.push_front( ::basegfx::tools::correctOrientations( rPolyPoly ) 
);
@@ -478,7 +433,7 @@ sal_Bool SVGFilter::implExportDocument( 
     aAttr += OUString::valueOf( nDocWidth );
     aAttr += B2UCONST( " " );
     aAttr += OUString::valueOf( nDocHeight );
-
+       mpSVGExport->SetViewBox( Rectangle( Point(), Size( nDocWidth, 
nDocHeight ) ) );
     mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "viewBox", aAttr );
        mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "preserveAspectRatio", 
B2UCONST( "xMidYMid" ) );
        mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "fill-rule", B2UCONST( 
"evenodd" ) );
@@ -1272,7 +1227,13 @@ void SVGExport::writeMtf( const GDIMetaF
        aAttr += B2UCONST( " " );
        aAttr += rtl::OUString::valueOf( aSize.Height() * 100L );
        AddAttribute( XML_NAMESPACE_NONE, "viewBox", aAttr );
+       SetViewBox( Rectangle( Point(), Size( aSize.Width() * 100, 
aSize.Height() * 100 ) ) );
+
+       // standard line width is based on 1 pixel on a 90 DPI device 
(0.28222mmm)
+       AddAttribute( XML_NAMESPACE_NONE, "stroke-width", OUString::valueOf( 
28.222 ) );
+       AddAttribute( XML_NAMESPACE_NONE, "stroke-linejoin", B2UCONST( "round" 
) );
 
+       AddAttribute( XML_NAMESPACE_NONE, "xml:space", B2UCONST( "preserve" ) );
        {
                SvXMLElementExport      aSVG( *this, XML_NAMESPACE_NONE, "svg", 
sal_True, sal_True );
 

Modified: incubator/ooo/trunk/main/filter/source/svg/svgfilter.hxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/svg/svgfilter.hxx?rev=1365538&r1=1365537&r2=1365538&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/svg/svgfilter.hxx (original)
+++ incubator/ooo/trunk/main/filter/source/svg/svgfilter.hxx Wed Jul 25 
11:49:36 2012
@@ -79,7 +79,6 @@
 #include <svx/svdxcgv.hxx>
 #include <svx/svdobj.hxx>
 #include <xmloff/xmlexp.hxx>
-
 #include "svgfilter.hxx"
 #include "svgscript.hxx"
 
@@ -113,6 +112,17 @@ class SVGExport : public SvXMLExport
 {
     typedef ::std::list< ::basegfx::B2DPolyPolygon > B2DPolyPolygonList;
 
+       rtl::OUString   maGlyphPlacement;
+
+       sal_Bool        mbTinyProfile;
+       sal_Bool        mbTSpans;
+       sal_Bool        mbEmbedFonts;
+       sal_Bool        mbNativeTextDecoration;
+       sal_Bool        mbOpacity;
+       sal_Bool        mbGradient;
+
+       Rectangle       maViewBox;
+
 public:                                                
                                                
     SVGExport( const ::com::sun::star::uno::Reference< 
::com::sun::star::lang::XMultiServiceFactory > xServiceFactory,
@@ -121,13 +131,18 @@ public:                                           
 
     virtual ~SVGExport();
 
-    sal_Bool IsUseTinyProfile() const;
-    sal_Bool IsEmbedFonts() const;
-    sal_Bool IsUseNativeTextDecoration() const;
-    ::rtl::OUString GetGlyphPlacement() const;
-    sal_Bool IsUseOpacity() const;
-    sal_Bool IsUseGradient() const;
+       sal_Bool IsUseTinyProfile() const { return mbTinyProfile; };
+       sal_Bool IsUseTSpans() const { return mbTSpans; };
+       sal_Bool IsEmbedFonts() const { return mbEmbedFonts; };
+       sal_Bool IsUseNativeTextDecoration() const { return 
mbNativeTextDecoration; };
+       ::rtl::OUString GetGlyphPlacement() const { return maGlyphPlacement; };
+       sal_Bool IsUseOpacity() const { return mbOpacity; };
+       sal_Bool IsUseGradient() const { return mbGradient; };
     
+       const Rectangle& GetViewBox() const { return maViewBox; };
+       void SetViewBox( const Rectangle& rViewBox ) { maViewBox = rViewBox; };
+       sal_Bool IsVisible( const Rectangle& rRect ) const { return 
GetViewBox().IsOver( rRect ); };
+
     void  pushClip( const ::basegfx::B2DPolyPolygon& rPolyPoly );
     void  popClip();
     sal_Bool  hasClip() const;
@@ -145,8 +160,7 @@ virtual sal_uInt32          exportDoc( enum ::xm
 
 private:
     
-    const Sequence< PropertyValue >&    mrFilterData;
-    B2DPolyPolygonList                  maClipList;
+    B2DPolyPolygonList         maClipList;
         
     SVGExport();
 };

Modified: incubator/ooo/trunk/main/filter/source/svg/svgwriter.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/svg/svgwriter.cxx?rev=1365538&r1=1365537&r2=1365538&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/svg/svgwriter.cxx (original)
+++ incubator/ooo/trunk/main/filter/source/svg/svgwriter.cxx Wed Jul 25 
11:49:36 2012
@@ -210,13 +210,13 @@ void SVGAttributeWriter::AddGradientDef(
         Rectangle aRect( aPoly.GetBoundRect() );
         
         // adjust start/end colors with intensities
-        aStartColor.SetRed( (sal_uInt8)( (long) aStartColor.GetRed() * 
rGradient.GetStartIntensity() ) / 100 );
-        aStartColor.SetGreen( (sal_uInt8)( (long) aStartColor.GetGreen() * 
rGradient.GetStartIntensity() ) / 100 );
-        aStartColor.SetBlue( (sal_uInt8)( (long) aStartColor.GetBlue() * 
rGradient.GetStartIntensity() ) / 100 );
+        aStartColor.SetRed( (sal_uInt8)( ( (long) aStartColor.GetRed() * 
rGradient.GetStartIntensity() ) / 100 ) );
+        aStartColor.SetGreen( (sal_uInt8)( ( (long) aStartColor.GetGreen() * 
rGradient.GetStartIntensity() ) / 100 ) );
+        aStartColor.SetBlue( (sal_uInt8)( ( (long) aStartColor.GetBlue() * 
rGradient.GetStartIntensity() ) / 100 ) );
         
-        aEndColor.SetRed( (sal_uInt8)( (long) aEndColor.GetRed() * 
rGradient.GetEndIntensity() ) / 100 );
-        aEndColor.SetGreen( (sal_uInt8)( (long) aEndColor.GetGreen() * 
rGradient.GetEndIntensity() ) / 100 );
-        aEndColor.SetBlue( (sal_uInt8)( (long) aEndColor.GetBlue() * 
rGradient.GetEndIntensity() ) / 100 );
+        aEndColor.SetRed( (sal_uInt8)( ( (long) aEndColor.GetRed() * 
rGradient.GetEndIntensity() ) / 100 ) );
+        aEndColor.SetGreen( (sal_uInt8)( ( (long) aEndColor.GetGreen() * 
rGradient.GetEndIntensity() ) / 100 ) );
+        aEndColor.SetBlue( (sal_uInt8)( ( (long) aEndColor.GetBlue() * 
rGradient.GetEndIntensity() ) / 100 ) );
 
         mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrId,
                             ( rGradientId = B2UCONST( "Gradient_" ) ) += 
::rtl::OUString::valueOf( nCurGradientId++ ) );
@@ -853,57 +853,95 @@ void SVGActionWriter::ImplWriteText( con
 
     if( nLen > 1 )
     {
-        aNormSize.Width() = pDX[ nLen - 2 ] + mpVDev->GetTextWidth( 
rText.GetChar(  nLen - 1 ) );
+               ::com::sun::star::uno::Reference< 
::com::sun::star::i18n::XBreakIterator > xBI( 
::vcl::unohelper::CreateBreakIterator() );
+               const ::com::sun::star::lang::Locale& rLocale = 
Application::GetSettings().GetLocale();
+               sal_Int32 nCurPos = 0, nLastPos = 0, nX = aPos.X();
 
-        if( nWidth && aNormSize.Width() && ( nWidth != aNormSize.Width() ) )
-        {
-            const double fFactor = (double) nWidth / aNormSize.Width();
+               if ( mrExport.IsUseTSpans() )
+               {
+                       mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrX, 
::rtl::OUString::valueOf( aPos.X() ) );
+                       mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrY, 
::rtl::OUString::valueOf( aPos.Y() ) );
+                       SvXMLElementExport aElem( mrExport, XML_NAMESPACE_NONE, 
aXMLElemText, sal_True, sal_False );
+                       {
+                               rtl::OUString aString;
+                               for( sal_Bool bCont = sal_True; bCont; )
+                               {
+                                       sal_Int32 nCount = 1;
+                                       const ::rtl::OUString   aSpace( ' ' );
 
-            for( i = 0; i < ( nLen - 1 ); i++ )
-                pDX[ i ] = FRound( pDX[ i ] * fFactor );
-        }
-        else
-        {
-            ::com::sun::star::uno::Reference< 
::com::sun::star::i18n::XBreakIterator > xBI( 
::vcl::unohelper::CreateBreakIterator() );
-            const ::com::sun::star::lang::Locale& rLocale = 
Application::GetSettings().GetLocale();
-            sal_Int32 nCurPos = 0, nLastPos = 0, nX = aPos.X();
+                                       nLastPos = nCurPos;
+                                       nCurPos = xBI->nextCharacters( rText, 
nCurPos, rLocale, ::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL, 
nCount, nCount );
+                                       nCount = nCurPos - nLastPos;
+                                       bCont = ( nCurPos < rText.Len() ) && 
nCount;
             
-            // write single glyphs at absolute text positions
-            for( sal_Bool bCont = sal_True; bCont; )
-            {
-                sal_Int32 nCount = 1;
+                                       if( nCount )
+                                       {
+                                               aString += 
rtl::OUString::valueOf( nX );
+                                               if( bCont )
+                                               {
+                                                       sal_Int32 nWidth = pDX[ 
nCurPos - 1 ];
+                                                       if ( bApplyMapping )
+                                                               nWidth = 
ImplMap( nWidth );
+                                                       nX = aPos.X() + nWidth;
+                                                       aString += aSpace;
+                                               }
+                                       }
+                               }
+                               mrExport.AddAttribute( XML_NAMESPACE_NONE, 
aXMLAttrX, aString );
+                               SvXMLElementExport aElem( mrExport, 
XML_NAMESPACE_NONE, aXMLElemTSpan, sal_True, sal_False );
+                               mrExport.GetDocHandler()->characters( rText );
+                       }
+               }
+               else
+               {
+                       aNormSize.Width() = pDX[ nLen - 2 ] + 
mpVDev->GetTextWidth( rText.GetChar(  nLen - 1 ) );
 
-                nLastPos = nCurPos;
-                nCurPos = xBI->nextCharacters( rText, nCurPos, rLocale,
-                                            
::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL,
-                                            nCount, nCount );
+                       if( nWidth && aNormSize.Width() && ( nWidth != 
aNormSize.Width() ) )
+                       {
+                               const double fFactor = (double) nWidth / 
aNormSize.Width();
 
-                nCount = nCurPos - nLastPos;
-                bCont = ( nCurPos < rText.Len() ) && nCount;
-            
-                if( nCount )
-                {
-                    const ::rtl::OUString aGlyph( rText.Copy( nLastPos, nCount 
) );
+                               for( i = 0; i < ( nLen - 1 ); i++ )
+                                       pDX[ i ] = FRound( pDX[ i ] * fFactor );
+                       }
+                       else
+                       {                   
+                               // write single glyphs at absolute text 
positions
+                               for( sal_Bool bCont = sal_True; bCont; )
+                               {
+                                       sal_Int32 nCount = 1;
 
-                    mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrX, 
::rtl::OUString::valueOf( nX ) );
-                    mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrY, 
::rtl::OUString::valueOf( aPos.Y() ) );
+                                       nLastPos = nCurPos;
+                                       nCurPos = xBI->nextCharacters( rText, 
nCurPos, rLocale,
+                                                                               
                ::com::sun::star::i18n::CharacterIteratorMode::SKIPCELL,
+                                                                               
                nCount, nCount );
 
-                    {
-                        SvXMLElementExport aElem( mrExport, 
XML_NAMESPACE_NONE, aXMLElemText, sal_True, sal_False );
-                        mrExport.GetDocHandler()->characters( aGlyph );
-                    }
+                                       nCount = nCurPos - nLastPos;
+                                       bCont = ( nCurPos < rText.Len() ) && 
nCount;
+                   
+                                       if( nCount )
+                                       {
+                                               const ::rtl::OUString aGlyph( 
rText.Copy( nLastPos, nCount ) );
 
-                    if( bCont )
-                    {
-                        // #118796# do NOT access pDXArray, it may be zero (!)
-                                               sal_Int32 nWidth = pDX[ nCurPos 
- 1 ];
-                                               if ( bApplyMapping )
-                                                       nWidth = ImplMap( 
nWidth );
-                        nX = aPos.X() + nWidth;
-                    }
-                }
-            }
-        }
+                                               mrExport.AddAttribute( 
XML_NAMESPACE_NONE, aXMLAttrX, ::rtl::OUString::valueOf( nX ) );
+                                               mrExport.AddAttribute( 
XML_NAMESPACE_NONE, aXMLAttrY, ::rtl::OUString::valueOf( aPos.Y() ) );
+
+                                               {
+                                                       SvXMLElementExport 
aElem( mrExport, XML_NAMESPACE_NONE, aXMLElemText, sal_True, sal_False );
+                                                       
mrExport.GetDocHandler()->characters( aGlyph );
+                                               }
+
+                                               if( bCont )
+                                               {
+                                                       // #118796# do NOT 
access pDXArray, it may be zero (!)
+                                                       sal_Int32 nWidth = pDX[ 
nCurPos - 1 ];
+                                                       if ( bApplyMapping )
+                                                               nWidth = 
ImplMap( nWidth );
+                                                       nX = aPos.X() + nWidth;
+                                               }
+                                       }
+                               }
+                       }
+               }
     }
     else
     {
@@ -994,8 +1032,8 @@ void SVGActionWriter::ImplWriteBmp( cons
                     aPt = rPt;
                     aSz = rSz;
                 }
-
-                               if( xExtDocHandler.is() )
+                               const Rectangle aRect( aPt, aSz );
+                               if( mrExport.IsVisible( aRect ) && 
xExtDocHandler.is() )
                                {
                                        static const sal_uInt32         
nPartLen = 64;
                                        const ::rtl::OUString   aSpace( ' ' );
@@ -1888,8 +1926,9 @@ SVGWriter::~SVGWriter()
 
 ANY SAL_CALL SVGWriter::queryInterface( const NMSP_UNO::Type & rType ) throw( 
NMSP_UNO::RuntimeException )
 {
-       const ANY aRet( NMSP_CPPU::queryInterface( rType, static_cast< 
NMSP_SVG::XSVGWriter* >( this ) ) );
-
+       const ANY aRet( NMSP_CPPU::queryInterface( rType,
+                       static_cast< NMSP_SVG::XSVGWriter* >( this ),
+                       static_cast< NMSP_LANG::XInitialization* >( this ) ) );
        return( aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType ) );
 }
 
@@ -1919,9 +1958,7 @@ void SAL_CALL SVGWriter::write( const RE
        aMemStm >> aMtf;
 
        const REF( NMSP_SAX::XDocumentHandler ) xDocumentHandler( rxDocHandler 
);
-       const Sequence< PropertyValue > aFilterData;
-
-       SVGExport* pWriter = new SVGExport( mxFact, xDocumentHandler, 
aFilterData );
+       SVGExport* pWriter = new SVGExport( mxFact, xDocumentHandler, 
maFilterData );
 
        pWriter->writeMtf( aMtf );
        delete pWriter;
@@ -1929,6 +1966,18 @@ void SAL_CALL SVGWriter::write( const RE
 
 // 
-----------------------------------------------------------------------------
 
+void SVGWriter::initialize( const ::com::sun::star::uno::Sequence< 
::com::sun::star::uno::Any >& aArguments )
+       throw (::com::sun::star::uno::Exception, 
::com::sun::star::uno::RuntimeException)
+{
+       if ( aArguments.getLength() == 1 )
+       {
+               ::com::sun::star::uno::Any aArg = aArguments.getConstArray()[0];
+               aArg >>= maFilterData;
+       }
+}
+
+// 
-----------------------------------------------------------------------------
+
 #define SVG_WRITER_SERVICE_NAME         "com.sun.star.svg.SVGWriter"
 #define SVG_WRITER_IMPLEMENTATION_NAME  "com.sun.star.comp.Draw.SVGWriter"
 
@@ -1955,7 +2004,7 @@ Sequence< rtl::OUString > SAL_CALL SVGWr
 {
        Sequence< rtl::OUString > aRet( 1 );
     
-       aRet.getArray()[ 0 ] = rtl::OUString ( RTL_CONSTASCII_USTRINGPARAM ( 
SVG_WRITER_SERVICE_NAME ) );
+       aRet.getArray()[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( 
SVG_WRITER_SERVICE_NAME ) );
     
     return aRet;
 }
@@ -1967,4 +2016,3 @@ Reference< XInterface > SAL_CALL SVGWrit
 {
     return( static_cast< cppu::OWeakObject* >( new SVGWriter( rSMgr ) ) );
 }
-

Modified: incubator/ooo/trunk/main/filter/source/svg/svgwriter.hxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/filter/source/svg/svgwriter.hxx?rev=1365538&r1=1365537&r2=1365538&view=diff
==============================================================================
--- incubator/ooo/trunk/main/filter/source/svg/svgwriter.hxx (original)
+++ incubator/ooo/trunk/main/filter/source/svg/svgwriter.hxx Wed Jul 25 
11:49:36 2012
@@ -66,6 +66,7 @@
 #include <com/sun/star/i18n/CharacterIteratorMode.hpp>
 #include <com/sun/star/i18n/XBreakIterator.hpp>
 #include <com/sun/star/svg/XSVGWriter.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
 
 // 
-----------------------------------------------------------------------------
 
@@ -234,12 +235,13 @@ public:
                                            const ::rtl::OUString* pElementId = 
NULL );
 };
 
-class SVGWriter : public NMSP_CPPU::OWeakObject, NMSP_SVG::XSVGWriter
+class SVGWriter : public NMSP_CPPU::OWeakObject, NMSP_SVG::XSVGWriter, 
com::sun::star::lang::XInitialization
 {      
 private:
 
-       REF( NMSP_LANG::XMultiServiceFactory )  mxFact;
-                                                                               
        
+       REF( NMSP_LANG::XMultiServiceFactory )                                  
                                mxFact;
+       com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >   
maFilterData;
+
                                                                                
        SVGWriter();
                                                                                
        
 public:                                                                        
        
@@ -255,6 +257,10 @@ public:                                                    
                        
        // XSVGWriter                                                   
        virtual void SAL_CALL                                   write( const 
REF( NMSP_SAX::XDocumentHandler )& rxDocHandler,
                                                                                
                   const SEQ( sal_Int8 )& rMtfSeq ) throw( 
NMSP_UNO::RuntimeException );
+
+    // ::com::sun::star::lang::XInitialization
+       void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< 
::com::sun::star::uno::Any >& aArguments ) throw 
(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
 };
 
 ::rtl::OUString SVGWriter_getImplementationName ()
@@ -276,5 +282,4 @@ sal_Bool SAL_CALL SVGWriter_supportsServ
        SAL_CALL SVGWriter_createInstance( const 
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory 
> & rSMgr)
                throw ( ::com::sun::star::uno::Exception );
 
-
 #endif

Modified: incubator/ooo/trunk/main/svtools/source/filter/filter.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svtools/source/filter/filter.cxx?rev=1365538&r1=1365537&r2=1365538&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svtools/source/filter/filter.cxx (original)
+++ incubator/ooo/trunk/main/svtools/source/filter/filter.cxx Wed Jul 25 
11:49:36 2012
@@ -2065,9 +2065,11 @@ sal_uInt16 GraphicFilter::ExportGraphic(
                         {
                             ::com::sun::star::uno::Reference< 
::com::sun::star::xml::sax::XDocumentHandler > xSaxWriter( xMgr->createInstance(
                                 ::rtl::OUString::createFromAscii( 
"com.sun.star.xml.sax.Writer" ) ), ::com::sun::star::uno::UNO_QUERY );
-
-                            ::com::sun::star::uno::Reference< 
::com::sun::star::svg::XSVGWriter > xSVGWriter( xMgr->createInstance(
-                                ::rtl::OUString::createFromAscii( 
"com.sun.star.svg.SVGWriter" ) ), ::com::sun::star::uno::UNO_QUERY );
+                                                       
+                                                       
com::sun::star::uno::Sequence< com::sun::star::uno::Any > aArguments( 1 );
+                                                       aArguments[ 0 ] <<= 
aConfigItem.GetFilterData();
+                            ::com::sun::star::uno::Reference< 
::com::sun::star::svg::XSVGWriter > xSVGWriter( 
xMgr->createInstanceWithArguments(
+                                ::rtl::OUString::createFromAscii( 
"com.sun.star.svg.SVGWriter" ), aArguments ), ::com::sun::star::uno::UNO_QUERY 
);
 
                             if( xSaxWriter.is() && xSVGWriter.is() )
                             {


Reply via email to