You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2011/12/19 17:41:25 UTC
svn commit: r1220836 [4/4] - in /incubator/ooo/trunk: ./ main/
main/basegfx/inc/basegfx/color/ main/basegfx/inc/basegfx/matrix/
main/basegfx/inc/basegfx/polygon/ main/basegfx/source/color/
main/basegfx/source/polygon/ main/cppcanvas/source/mtfrenderer/...
Modified: incubator/ooo/trunk/main/vcl/source/gdi/metaact.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/vcl/source/gdi/metaact.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/vcl/source/gdi/metaact.cxx (original)
+++ incubator/ooo/trunk/main/vcl/source/gdi/metaact.cxx Mon Dec 19 16:41:21 2011
@@ -34,7 +34,8 @@
#include <vcl/salbtype.hxx>
#include <vcl/metaact.hxx>
#include <vcl/graphictools.hxx>
-#include <vcl/rendergraphicrasterizer.hxx>
+//#include <svgio/svgreader/svgreader.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
// ========================================================================
@@ -232,7 +233,6 @@ MetaAction* MetaAction::ReadMetaAction(
case( META_COMMENT_ACTION ): pAction = new MetaCommentAction; break;
case( META_LAYOUTMODE_ACTION ): pAction = new MetaLayoutModeAction; break;
case( META_TEXTLANGUAGE_ACTION ): pAction = new MetaTextLanguageAction; break;
- case( META_RENDERGRAPHIC_ACTION ): pAction = new MetaRenderGraphicAction; break;
default:
{
@@ -2025,7 +2025,7 @@ void MetaBmpExAction::Execute( OutputDev
MetaAction* MetaBmpExAction::Clone()
{
- MetaAction* pClone = (MetaAction*) new MetaBmpExAction( *this );
+ MetaBmpExAction* pClone = new MetaBmpExAction( *this );
pClone->ResetRefCount();
return pClone;
}
@@ -4297,82 +4297,4 @@ void MetaTextLanguageAction::Read( SvStr
rIStm >> meTextLanguage;
}
-// ========================================================================
-
-IMPL_META_ACTION( RenderGraphic, META_RENDERGRAPHIC_ACTION )
-
-// ------------------------------------------------------------------------
-
-MetaRenderGraphicAction::MetaRenderGraphicAction( const Point& rPoint, const Size& rSize,
- const vcl::RenderGraphic& rRenderGraphic,
- double fRotateAngle, double fShearAngleX, double fShearAngleY ) :
- MetaAction( META_RENDERGRAPHIC_ACTION ),
- maRenderGraphic( rRenderGraphic ),
- maPoint( rPoint ),
- maSize( rSize ),
- mfRotateAngle( fRotateAngle ),
- mfShearAngleX( fShearAngleX ),
- mfShearAngleY( fShearAngleY )
-{
-}
-
-// ------------------------------------------------------------------------
-
-void MetaRenderGraphicAction::Execute( OutputDevice* pOut )
-{
- pOut->DrawRenderGraphic( maPoint, maSize, maRenderGraphic );
-}
-
-// ------------------------------------------------------------------------
-
-MetaAction* MetaRenderGraphicAction::Clone()
-{
- MetaAction* pClone = (MetaAction*) new MetaRenderGraphicAction( *this );
- pClone->ResetRefCount();
- return pClone;
-}
-
-// ------------------------------------------------------------------------
-
-void MetaRenderGraphicAction::Move( long nHorzMove, long nVertMove )
-{
- maPoint.Move( nHorzMove, nVertMove );
-}
-
-// ------------------------------------------------------------------------
-
-void MetaRenderGraphicAction::Scale( double fScaleX, double fScaleY )
-{
- Rectangle aRectangle( maPoint, maSize );
- ImplScaleRect( aRectangle, fScaleX, fScaleY );
- maPoint = aRectangle.TopLeft();
- maSize = aRectangle.GetSize();
-}
-
-// ------------------------------------------------------------------------
-
-sal_Bool MetaRenderGraphicAction::Compare( const MetaAction& rMetaAction ) const
-{
- return ( maRenderGraphic.IsEqual( ( (MetaRenderGraphicAction&) rMetaAction).maRenderGraphic ) &&
- ( maPoint == ( (MetaRenderGraphicAction&) rMetaAction).maPoint ) &&
- ( maSize == ( (MetaRenderGraphicAction&) rMetaAction).maSize ) &&
- ( mfRotateAngle == ( (MetaRenderGraphicAction&) rMetaAction).mfRotateAngle ) &&
- ( mfShearAngleX == ( (MetaRenderGraphicAction&) rMetaAction).mfShearAngleX ) &&
- ( mfShearAngleY == ( (MetaRenderGraphicAction&) rMetaAction).mfShearAngleY ) );
-}
-
-// ------------------------------------------------------------------------
-
-void MetaRenderGraphicAction::Write( SvStream& rOStm, ImplMetaWriteData* pData )
-{
- WRITE_BASE_COMPAT( rOStm, 1, pData );
- rOStm << maRenderGraphic << maPoint << maSize << mfRotateAngle << mfShearAngleX << mfShearAngleY;
-}
-
-// ------------------------------------------------------------------------
-
-void MetaRenderGraphicAction::Read( SvStream& rIStm, ImplMetaReadData* )
-{
- COMPAT( rIStm );
- rIStm >> maRenderGraphic >> maPoint >> maSize >> mfRotateAngle >> mfShearAngleX >> mfShearAngleY;
-}
+// eof
Modified: incubator/ooo/trunk/main/vcl/source/gdi/outdev6.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/vcl/source/gdi/outdev6.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/vcl/source/gdi/outdev6.cxx (original)
+++ incubator/ooo/trunk/main/vcl/source/gdi/outdev6.cxx Mon Dec 19 16:41:21 2011
@@ -33,7 +33,6 @@
#include <vcl/svapp.hxx>
#include <vcl/wrkwin.hxx>
#include <vcl/graph.hxx>
-#include <vcl/rendergraphicrasterizer.hxx>
#include <wall2.hxx>
#include <salgdi.hxx>
@@ -1246,25 +1245,3 @@ bool OutputDevice::DrawEPS( const Point&
return bDrawn;
}
-// ------------------------------------------------------------------
-
-void OutputDevice::DrawRenderGraphic( const Point& rPoint, const Size& rSize,
- const ::vcl::RenderGraphic& rRenderGraphic )
-{
- DBG_TRACE( "OutputDevice::DrawRenderGraphic()" );
-
- if( mpMetaFile )
- mpMetaFile->AddAction( new MetaRenderGraphicAction( rPoint, rSize, rRenderGraphic ) );
-
- if( !rRenderGraphic.IsEmpty() )
- {
- ::vcl::RenderGraphicRasterizer aRasterizer( rRenderGraphic );
- BitmapEx aBmpEx;
- const Size aSizePixel( LogicToPixel( rSize ) );
- GDIMetaFile* pOldMetaFile = mpMetaFile;
-
- mpMetaFile = NULL;
- DrawBitmapEx( rPoint, rSize, aRasterizer.Rasterize( aSizePixel ) );
- mpMetaFile = pOldMetaFile;
- }
-}
Modified: incubator/ooo/trunk/main/vcl/source/gdi/pdfwriter_impl2.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/vcl/source/gdi/pdfwriter_impl2.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/vcl/source/gdi/pdfwriter_impl2.cxx (original)
+++ incubator/ooo/trunk/main/vcl/source/gdi/pdfwriter_impl2.cxx Mon Dec 19 16:41:21 2011
@@ -31,7 +31,6 @@
#include "vcl/metaact.hxx"
#include "vcl/bmpacc.hxx"
#include "vcl/graph.hxx"
-#include "vcl/rendergraphicrasterizer.hxx"
#include "svdata.hxx"
@@ -1044,17 +1043,6 @@ void PDFWriterImpl::playMetafile( const
}
break;
- case( META_RENDERGRAPHIC_ACTION ):
- {
- const MetaRenderGraphicAction* pA = static_cast< const MetaRenderGraphicAction* >( pAction );
- const ::vcl::RenderGraphicRasterizer aRasterizer( pA->GetRenderGraphic() );
-
- implWriteBitmapEx( pA->GetPoint(), pA->GetSize(),
- aRasterizer.Rasterize( pDummyVDev->LogicToPixel( pA->GetSize() ) ),
- pDummyVDev, i_rContext );
- }
- break;
-
default:
// #i24604# Made assertion fire only once per
// metafile. The asserted actions here are all
Modified: incubator/ooo/trunk/main/vcl/source/gdi/print2.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/vcl/source/gdi/print2.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/vcl/source/gdi/print2.cxx (original)
+++ incubator/ooo/trunk/main/vcl/source/gdi/print2.cxx Mon Dec 19 16:41:21 2011
@@ -42,7 +42,6 @@
#include <vcl/print.hxx>
#include <vcl/svapp.hxx>
#include <vcl/bmpacc.hxx>
-#include <vcl/rendergraphicrasterizer.hxx>
#include <print.h>
@@ -111,9 +110,6 @@ static bool ImplIsActionSpecial( const M
case META_BMPEXSCALEPART_ACTION:
return static_cast<const MetaBmpExScalePartAction&>(rAct).GetBitmapEx().IsTransparent();
- case META_RENDERGRAPHIC_ACTION:
- return true;
-
default:
return false;
}
@@ -201,16 +197,6 @@ static void ImplConvertTransparentAction
aBmpEx = static_cast<const MetaBmpExScaleAction&>(rAct).GetBitmapEx();
break;
- case META_RENDERGRAPHIC_ACTION:
- {
- const ::vcl::RenderGraphicRasterizer aRasterizer( static_cast<const MetaRenderGraphicAction&>(rAct).
- GetRenderGraphic() );
-
- aBmpEx = aRasterizer.Rasterize( rStateOutDev.LogicToPixel(
- static_cast<const MetaRenderGraphicAction&>(rAct).GetSize() ) );
- break;
- }
-
case META_TRANSPARENT_ACTION:
default:
@@ -278,11 +264,6 @@ static void ImplConvertTransparentAction
static_cast<const MetaBmpExScalePartAction&>(rAct).GetSrcSize(),
aBmp ));
break;
- case META_RENDERGRAPHIC_ACTION:
- o_rMtf.AddAction( new MetaBmpScaleAction(
- static_cast<const MetaRenderGraphicAction&>(rAct).GetPoint(),
- static_cast<const MetaRenderGraphicAction&>(rAct).GetSize(),
- aBmp ));
default:
DBG_ERROR("Unexpected case");
break;
@@ -395,7 +376,6 @@ static bool ImplIsNotTransparent( const
case META_TEXTRECT_ACTION:
case META_STRETCHTEXT_ACTION:
case META_TEXTLINE_ACTION:
- case META_RENDERGRAPHIC_ACTION:
// all other actions: generate non-transparent output
bRet = true;
break;
@@ -650,13 +630,6 @@ static Rectangle ImplCalcActionBounds( c
DBG_ERROR("META_TEXTLINE_ACTION not supported");
break;
- case( META_RENDERGRAPHIC_ACTION ):
- {
- const MetaRenderGraphicAction& rRenderAct = static_cast<const MetaRenderGraphicAction&>(rAct);
- aActionBounds = Rectangle( rRenderAct.GetPoint(), rRenderAct.GetSize() );
- }
- break;
-
default:
break;
}
@@ -682,7 +655,6 @@ static bool ImplIsActionHandlingTranspar
case META_BMPEX_ACTION:
case META_BMPEXSCALE_ACTION:
case META_BMPEXSCALEPART_ACTION:
- case META_RENDERGRAPHIC_ACTION:
return true;
default:
Modified: incubator/ooo/trunk/main/vcl/util/makefile.mk
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/vcl/util/makefile.mk?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/vcl/util/makefile.mk (original)
+++ incubator/ooo/trunk/main/vcl/util/makefile.mk Mon Dec 19 16:41:21 2011
@@ -99,8 +99,6 @@ HXXDEPNLST= $(INC)$/vcl$/accel.hxx
$(INC)$/vcl$/print.hxx \
$(INC)$/vcl$/prndlg.hxx \
$(INC)$/vcl$/region.hxx \
- $(INC)$/vcl$/rendergraphic.hxx \
- $(INC)$/vcl$/rendergraphicrasterizer.hxx \
$(INC)$/vcl$/salbtype.hxx \
$(INC)$/vcl$/scrbar.hxx \
$(INC)$/vcl$/slider.hxx \
Modified: incubator/ooo/trunk/main/xmloff/Library_xo.mk
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/Library_xo.mk?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/Library_xo.mk (original)
+++ incubator/ooo/trunk/main/xmloff/Library_xo.mk Mon Dec 19 16:41:21 2011
@@ -119,6 +119,7 @@ $(eval $(call gb_Library_add_exception_o
xmloff/source/core/xmltkmap \
xmloff/source/core/xmltoken \
xmloff/source/core/xmluconv \
+ xmloff/source/core/xmlmultiimagehelper \
xmloff/source/draw/EnhancedCustomShapeToken \
xmloff/source/draw/XMLGraphicsDefaultStyle \
xmloff/source/draw/XMLImageMapContext \
Modified: incubator/ooo/trunk/main/xmloff/Package_inc.mk
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/Package_inc.mk?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/Package_inc.mk (original)
+++ incubator/ooo/trunk/main/xmloff/Package_inc.mk Mon Dec 19 16:41:21 2011
@@ -129,3 +129,4 @@ $(eval $(call gb_Package_add_file,xmloff
$(eval $(call gb_Package_add_file,xmloff_inc,inc/xmloff/xmltoken.hxx,xmloff/xmltoken.hxx))
$(eval $(call gb_Package_add_file,xmloff_inc,inc/xmloff/xmltypes.hxx,xmloff/xmltypes.hxx))
$(eval $(call gb_Package_add_file,xmloff_inc,inc/xmloff/xmluconv.hxx,xmloff/xmluconv.hxx))
+$(eval $(call gb_Package_add_file,xmloff_inc,inc/xmloff/xmlmultiimagehelper.hxx,xmloff/xmlmultiimagehelper.hxx))
Modified: incubator/ooo/trunk/main/xmloff/inc/xmloff/txtparae.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/inc/xmloff/txtparae.hxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/inc/xmloff/txtparae.hxx (original)
+++ incubator/ooo/trunk/main/xmloff/inc/xmloff/txtparae.hxx Mon Dec 19 16:41:21 2011
@@ -146,6 +146,7 @@ protected:
const ::rtl::OUString sGraphicFilter;
const ::rtl::OUString sGraphicRotation;
const ::rtl::OUString sGraphicURL;
+ const ::rtl::OUString sReplacementGraphicURL;
const ::rtl::OUString sHeight;
const ::rtl::OUString sHoriOrient;
const ::rtl::OUString sHoriOrientPosition;
Modified: incubator/ooo/trunk/main/xmloff/source/draw/shapeexport2.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/source/draw/shapeexport2.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/source/draw/shapeexport2.cxx (original)
+++ incubator/ooo/trunk/main/xmloff/source/draw/shapeexport2.cxx Mon Dec 19 16:41:21 2011
@@ -1156,7 +1156,30 @@ void XMLShapeExport::ImpExportGraphicObj
{
if( !bIsEmptyPresObj )
{
- OUString aStreamURL;
+ OUString aReplacementUrl;
+ xPropSet->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("ReplacementGraphicURL"))) >>= aReplacementUrl;
+
+ // If there is no url, then then graphic is empty
+ if(aReplacementUrl.getLength())
+ {
+ const OUString aStr = mrExport.AddEmbeddedGraphicObject(aReplacementUrl);
+
+ if(aStr.getLength())
+ {
+ mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, aStr);
+ mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
+ mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED );
+ mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
+
+ // xlink:href for replacement, only written for Svg content
+ SvXMLElementExport aOBJ(mrExport, XML_NAMESPACE_DRAW, XML_IMAGE, sal_True, sal_True);
+
+ // optional office:binary-data
+ mrExport.AddEmbeddedGraphicObjectAsBase64(aReplacementUrl);
+ }
+ }
+
+ OUString aStreamURL;
OUString aStr;
xPropSet->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicStreamURL"))) >>= aStreamURL;
@@ -1189,7 +1212,7 @@ void XMLShapeExport::ImpExportGraphicObj
{
if( aStr[ 0 ] == '#' )
{
- aStreamURL = OUString::createFromAscii( "vnd.sun.star.Package:" );
+ aStreamURL = sPackageURL;
aStreamURL = aStreamURL.concat( aStr.copy( 1, aStr.getLength() - 1 ) );
}
Modified: incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.cxx (original)
+++ incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.cxx Mon Dec 19 16:41:21 2011
@@ -82,6 +82,7 @@
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <tools/string.hxx>
#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
+#include <com/sun/star/container/XChild.hpp>
// --> OD 2006-02-22 #b6382898#
#include <com/sun/star/text/XTextDocument.hpp>
@@ -3328,7 +3329,10 @@ SdXMLFrameShapeContext::SdXMLFrameShapeC
com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes,
sal_Bool bTemporaryShape)
: SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ),
- mbSupportsReplacement( sal_False )
+ multiImageImportHelper(),
+ mbSupportsReplacement( sal_False ),
+ mxImplContext(),
+ mxReplImplContext()
{
uno::Reference < util::XCloneable > xClone( xAttrList, uno::UNO_QUERY );
if( xClone.is() )
@@ -3342,6 +3346,67 @@ SdXMLFrameShapeContext::~SdXMLFrameShape
{
}
+void SdXMLFrameShapeContext::removeGraphicFromImportContext(const SvXMLImportContext& rContext) const
+{
+ const SdXMLGraphicObjectShapeContext* pSdXMLGraphicObjectShapeContext = dynamic_cast< const SdXMLGraphicObjectShapeContext* >(&rContext);
+
+ if(pSdXMLGraphicObjectShapeContext)
+ {
+ try
+ {
+ uno::Reference< container::XChild > xChild(pSdXMLGraphicObjectShapeContext->getShape(), uno::UNO_QUERY_THROW);
+
+ if(xChild.is())
+ {
+ uno::Reference< drawing::XShapes > xParent(xChild->getParent(), uno::UNO_QUERY_THROW);
+
+ if(xParent.is())
+ {
+ // remove from parent
+ xParent->remove(pSdXMLGraphicObjectShapeContext->getShape());
+
+ // dispose
+ uno::Reference< lang::XComponent > xComp(pSdXMLGraphicObjectShapeContext->getShape(), UNO_QUERY);
+
+ if(xComp.is())
+ {
+ xComp->dispose();
+ }
+ }
+ }
+ }
+ catch( uno::Exception& )
+ {
+ DBG_ERROR( "Error in cleanup of multiple graphic object import (!)" );
+ }
+ }
+}
+
+rtl::OUString SdXMLFrameShapeContext::getGraphicURLFromImportContext(const SvXMLImportContext& rContext) const
+{
+ rtl::OUString aRetval;
+ const SdXMLGraphicObjectShapeContext* pSdXMLGraphicObjectShapeContext = dynamic_cast< const SdXMLGraphicObjectShapeContext* >(&rContext);
+
+ if(pSdXMLGraphicObjectShapeContext)
+ {
+ try
+ {
+ const uno::Reference< beans::XPropertySet > xPropSet(pSdXMLGraphicObjectShapeContext->getShape(), uno::UNO_QUERY_THROW);
+
+ if(xPropSet.is())
+ {
+ xPropSet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicStreamURL"))) >>= aRetval;
+ }
+ }
+ catch( uno::Exception& )
+ {
+ DBG_ERROR( "Error in cleanup of multiple graphic object import (!)" );
+ }
+ }
+
+ return aRetval;
+}
+
SvXMLImportContext *SdXMLFrameShapeContext::CreateChildContext( sal_uInt16 nPrefix,
const OUString& rLocalName,
const uno::Reference< xml::sax::XAttributeList>& xAttrList )
@@ -3350,13 +3415,30 @@ SvXMLImportContext *SdXMLFrameShapeConte
if( !mxImplContext.Is() )
{
- pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
- GetImport(), nPrefix, rLocalName, xAttrList, mxShapes, mxAttrList );
+ pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
+ GetImport(), nPrefix, rLocalName, xAttrList, mxShapes, mxAttrList);
- mxImplContext = pContext;
- mbSupportsReplacement = IsXMLToken( rLocalName, XML_OBJECT ) ||
- IsXMLToken( rLocalName, XML_OBJECT_OLE );
- }
+ mxImplContext = pContext;
+ mbSupportsReplacement = IsXMLToken(rLocalName, XML_OBJECT ) || IsXMLToken(rLocalName, XML_OBJECT_OLE);
+ setSupportsMultipleContents(IsXMLToken(rLocalName, XML_IMAGE));
+
+ if(getSupportsMultipleContents() && dynamic_cast< SdXMLGraphicObjectShapeContext* >(pContext))
+ {
+ addContent(*mxImplContext);
+ }
+ }
+ else if(getSupportsMultipleContents() && XML_NAMESPACE_DRAW == nPrefix && IsXMLToken(rLocalName, XML_IMAGE))
+ {
+ // read another image
+ pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
+ GetImport(), nPrefix, rLocalName, xAttrList, mxShapes, mxAttrList);
+ mxImplContext = pContext;
+
+ if(dynamic_cast< SdXMLGraphicObjectShapeContext* >(pContext))
+ {
+ addContent(*mxImplContext);
+ }
+ }
else if( mbSupportsReplacement && !mxReplImplContext &&
XML_NAMESPACE_DRAW == nPrefix &&
IsXMLToken( rLocalName, XML_IMAGE ) )
@@ -3415,6 +3497,9 @@ void SdXMLFrameShapeContext::StartElemen
void SdXMLFrameShapeContext::EndElement()
{
+ /// solve if multiple image child contexts were imported
+ solveMultipleImages();
+
if( !mxImplContext.Is() )
{
// now check if this is an empty presentation object
Modified: incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.hxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.hxx (original)
+++ incubator/ooo/trunk/main/xmloff/source/draw/ximpshap.hxx Mon Dec 19 16:41:21 2011
@@ -38,6 +38,7 @@
#include <vector>
#include <xmloff/shapeimport.hxx>
+#include <xmloff/xmlmultiimagehelper.hxx>
//////////////////////////////////////////////////////////////////////////////
// common shape context
@@ -573,13 +574,18 @@ public:
//////////////////////////////////////////////////////////////////////////////
// draw:-frame
-class SdXMLFrameShapeContext : public SdXMLShapeContext
+class SdXMLFrameShapeContext : public SdXMLShapeContext, public multiImageImportHelper
{
private:
sal_Bool mbSupportsReplacement;
SvXMLImportContextRef mxImplContext;
SvXMLImportContextRef mxReplImplContext;
+protected:
+ /// helper to get the created xShape instance, needs to be overloaded
+ virtual rtl::OUString getGraphicURLFromImportContext(const SvXMLImportContext& rContext) const;
+ virtual void removeGraphicFromImportContext(const SvXMLImportContext& rContext) const;
+
public:
TYPEINFO();
Modified: incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx (original)
+++ incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.cxx Mon Dec 19 16:41:21 2011
@@ -433,6 +433,7 @@ public:
TYPEINFO();
sal_Bool CreateIfNotThere();
+ const OUString& GetHRef() const { return sHRef; }
XMLTextFrameContext_Impl( SvXMLImport& rImport,
sal_uInt16 nPrfx,
@@ -466,7 +467,7 @@ public:
::com::sun::star::text::TextContentAnchorType GetAnchorType() const { return eAnchorType; }
const ::com::sun::star::uno::Reference <
- ::com::sun::star::beans::XPropertySet >& GetPropSet() { return xPropSet; }
+ ::com::sun::star::beans::XPropertySet >& GetPropSet() const { return xPropSet; }
};
TYPEINIT1( XMLTextFrameContext_Impl, SvXMLImportContext );
@@ -759,8 +760,6 @@ void XMLTextFrameContext_Impl::Create( s
xTextImportHelper->InsertTextContent( xTxtCntnt );
}
- Reference < XShape > xShape( xPropSet, UNO_QUERY );
-
// #107848#
// Make adding the shepe to Z-Ordering dependent from if we are
// inside a inside_deleted_section (redlining). That is necessary
@@ -770,7 +769,9 @@ void XMLTextFrameContext_Impl::Create( s
if(!GetImport().HasTextImport()
|| !GetImport().GetTextImport()->IsInsideDeleteContext())
{
- GetImport().GetShapeImport()->shapeWithZIndexAdded( xShape, nZIndex );
+ Reference < XShape > xShape( xPropSet, UNO_QUERY );
+
+ GetImport().GetShapeImport()->shapeWithZIndexAdded( xShape, nZIndex );
}
if( XML_TEXT_FRAME_TEXTBOX == nType )
@@ -1308,6 +1309,42 @@ void XMLTextFrameContext_Impl::SetDesc(
TYPEINIT1( XMLTextFrameContext, SvXMLImportContext );
+void XMLTextFrameContext::removeGraphicFromImportContext(const SvXMLImportContext& rContext) const
+{
+ const XMLTextFrameContext_Impl* pXMLTextFrameContext_Impl = dynamic_cast< const XMLTextFrameContext_Impl* >(&rContext);
+
+ if(pXMLTextFrameContext_Impl)
+ {
+ try
+ {
+ // just dispose to delete
+ uno::Reference< lang::XComponent > xComp(pXMLTextFrameContext_Impl->GetPropSet(), UNO_QUERY);
+
+ if(xComp.is())
+ {
+ xComp->dispose();
+ }
+ }
+ catch( uno::Exception& )
+ {
+ DBG_ERROR( "Error in cleanup of multiple graphic object import (!)" );
+ }
+ }
+}
+
+rtl::OUString XMLTextFrameContext::getGraphicURLFromImportContext(const SvXMLImportContext& rContext) const
+{
+ rtl::OUString aRetval;
+ const XMLTextFrameContext_Impl* pXMLTextFrameContext_Impl = dynamic_cast< const XMLTextFrameContext_Impl* >(&rContext);
+
+ if(pXMLTextFrameContext_Impl)
+ {
+ return pXMLTextFrameContext_Impl->GetHRef();
+ }
+
+ return aRetval;
+}
+
sal_Bool XMLTextFrameContext::CreateIfNotThere()
{
sal_Bool bRet = sal_False;
@@ -1339,6 +1376,7 @@ XMLTextFrameContext::XMLTextFrameContext
const Reference< XAttributeList > & xAttrList,
TextContentAnchorType eATyp )
: SvXMLImportContext( rImport, nPrfx, rLName )
+, multiImageImportHelper()
, m_xAttrList( new SvXMLAttributeList( xAttrList ) )
, m_pHyperlink( 0 )
// --> OD 2009-07-22 #i73249#
@@ -1396,11 +1434,14 @@ XMLTextFrameContext::XMLTextFrameContext
XMLTextFrameContext::~XMLTextFrameContext()
{
- delete m_pHyperlink;
+ delete m_pHyperlink;
}
void XMLTextFrameContext::EndElement()
{
+ /// solve if multiple image child contexts were imported
+ solveMultipleImages();
+
SvXMLImportContext *pContext = &m_xImplContext;
XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext );
if( pImpl )
@@ -1505,6 +1546,10 @@ SvXMLImportContext *XMLTextFrameContext:
{
m_bSupportsReplacement = sal_True;
}
+ else if(XML_TEXT_FRAME_GRAPHIC == nFrameType)
+ {
+ setSupportsMultipleContents(IsXMLToken(rLocalName, XML_IMAGE));
+ }
if( !pContext )
{
@@ -1517,9 +1562,24 @@ SvXMLImportContext *XMLTextFrameContext:
}
m_xImplContext = pContext;
+
+ if(getSupportsMultipleContents() && XML_TEXT_FRAME_GRAPHIC == nFrameType)
+ {
+ addContent(*m_xImplContext);
+ }
}
}
}
+ else if(getSupportsMultipleContents() && XML_NAMESPACE_DRAW == p_nPrefix && IsXMLToken(rLocalName, XML_IMAGE))
+ {
+ // read another image
+ pContext = new XMLTextFrameContext_Impl(
+ GetImport(), p_nPrefix, rLocalName, xAttrList,
+ m_eDefaultAnchorType, XML_TEXT_FRAME_GRAPHIC, m_xAttrList);
+
+ m_xImplContext = pContext;
+ addContent(*m_xImplContext);
+ }
else if( m_bSupportsReplacement && !m_xReplImplContext &&
XML_NAMESPACE_DRAW == p_nPrefix &&
IsXMLToken( rLocalName, XML_IMAGE ) )
Modified: incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.hxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.hxx (original)
+++ incubator/ooo/trunk/main/xmloff/source/text/XMLTextFrameContext.hxx Mon Dec 19 16:41:21 2011
@@ -28,6 +28,7 @@
#include <com/sun/star/text/TextContentAnchorType.hpp>
#endif
#include <xmloff/xmlictxt.hxx>
+#include <xmloff/xmlmultiimagehelper.hxx>
namespace com { namespace sun { namespace star {
namespace text { class XTextCursor; class XTextContent; }
@@ -36,7 +37,7 @@ namespace com { namespace sun { namespac
class SvXMLAttributeList;
class XMLTextFrameContextHyperlink_Impl;
-class XMLTextFrameContext : public SvXMLImportContext
+class XMLTextFrameContext : public SvXMLImportContext, public multiImageImportHelper
{
::com::sun::star::uno::Reference<
::com::sun::star::xml::sax::XAttributeList > m_xAttrList;
@@ -66,6 +67,11 @@ class XMLTextFrameContext : public SvXML
sal_Bool CreateIfNotThere( ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet >& rPropSet );
+protected:
+ /// helper to get the created xShape instance, needs to be overloaded
+ virtual rtl::OUString getGraphicURLFromImportContext(const SvXMLImportContext& rContext) const;
+ virtual void removeGraphicFromImportContext(const SvXMLImportContext& rContext) const;
+
public:
TYPEINFO();
Modified: incubator/ooo/trunk/main/xmloff/source/text/txtparae.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/xmloff/source/text/txtparae.cxx?rev=1220836&r1=1220835&r2=1220836&view=diff
==============================================================================
--- incubator/ooo/trunk/main/xmloff/source/text/txtparae.cxx (original)
+++ incubator/ooo/trunk/main/xmloff/source/text/txtparae.cxx Mon Dec 19 16:41:21 2011
@@ -1223,6 +1223,7 @@ XMLTextParagraphExport::XMLTextParagraph
sGraphicFilter(RTL_CONSTASCII_USTRINGPARAM("GraphicFilter")),
sGraphicRotation(RTL_CONSTASCII_USTRINGPARAM("GraphicRotation")),
sGraphicURL(RTL_CONSTASCII_USTRINGPARAM("GraphicURL")),
+ sReplacementGraphicURL(RTL_CONSTASCII_USTRINGPARAM("ReplacementGraphicURL")),
sHeight(RTL_CONSTASCII_USTRINGPARAM("Height")),
sHoriOrient(RTL_CONSTASCII_USTRINGPARAM("HoriOrient")),
sHoriOrientPosition(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition")),
@@ -3018,9 +3019,33 @@ void XMLTextParagraphExport::_exportText
sRet.makeStringAndClear() );
}
+ // original content
+ SvXMLElementExport aElem(GetExport(), XML_NAMESPACE_DRAW, XML_FRAME, sal_False, sal_True);
- SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_DRAW,
- XML_FRAME, sal_False, sal_True );
+ // replacement graphic for backwards compatibility, but
+ // only for SVG currently
+ OUString sReplacementOrigURL;
+ rPropSet->getPropertyValue( sReplacementGraphicURL ) >>= sReplacementOrigURL;
+
+ if(sReplacementOrigURL.getLength())
+ {
+ const OUString sReplacementURL(GetExport().AddEmbeddedGraphicObject( sReplacementOrigURL ));
+
+ // If there is no url, then then graphic is empty
+ if(sReplacementURL.getLength())
+ {
+ GetExport().AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, sReplacementURL);
+ GetExport().AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE);
+ GetExport().AddAttribute(XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED);
+ GetExport().AddAttribute(XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD);
+
+ // xlink:href for replacement, only written for Svg content
+ SvXMLElementExport aElement(GetExport(), XML_NAMESPACE_DRAW, XML_IMAGE, sal_False, sal_True);
+
+ // optional office:binary-data
+ GetExport().AddEmbeddedGraphicObjectAsBase64(sReplacementURL);
+ }
+ }
// xlink:href
OUString sOrigURL;