filter/source/msfilter/escherex.cxx | 73 +++++++++++++++++++++++------------ include/filter/msfilter/escherex.hxx | 7 +++ sd/source/filter/eppt/epptso.cxx | 15 ++++++- sd/source/filter/ppt/pptin.cxx | 2 4 files changed, 71 insertions(+), 26 deletions(-)
New commits: commit b3faed955fa4e0c7e3b1f6843bfb81f15edc2826 Author: Sun Ying <[email protected]> Date: Mon Sep 10 01:56:28 2012 +0000 Resolves: #i119753# fix audio video object lost when save .ppt file Reported by: Li Feng Wang Patch by: Ying Sun Review by: Jian Yuan Li (cherry picked from commit fbb7e8d8957877922f2f3a971e88685589f43939) Conflicts: filter/inc/filter/msfilter/escherex.hxx filter/source/msfilter/escherex.cxx Change-Id: I545a9e95c23cfba0cc918c9c4243528570734b2d (cherry picked from commit c05c16635b15a47591faa737947c2dce3dcb863e) diff --git a/filter/source/msfilter/escherex.cxx b/filter/source/msfilter/escherex.cxx index 4c8fec0..68bd12d 100644 --- a/filter/source/msfilter/escherex.cxx +++ b/filter/source/msfilter/escherex.cxx @@ -18,6 +18,7 @@ */ #include "eschesdo.hxx" +#include <svx/svdomedia.hxx> #include <svx/xflftrit.hxx> #include <filter/msfilter/escherex.hxx> #include <svx/unoapi.hxx> @@ -1283,38 +1284,60 @@ sal_Bool EscherPropertyContainer::CreateOLEGraphicProperties( if ( pGraphic ) { GraphicObject aGraphicObject( *pGraphic ); - OString aUniqueId( aGraphicObject.GetUniqueID() ); - if ( !aUniqueId.isEmpty() ) - { - AddOpt( ESCHER_Prop_fillType, ESCHER_FillPicture ); - uno::Reference< beans::XPropertySet > aXPropSet( rXShape, uno::UNO_QUERY ); + bRetValue = CreateGraphicProperties( rXShape,aGraphicObject ); + } + } + } + return bRetValue; +} - if ( pGraphicProvider && pPicOutStrm && pShapeBoundRect && aXPropSet.is() ) - { - ::com::sun::star::uno::Any aAny; - ::com::sun::star::awt::Rectangle* pVisArea = NULL; - if ( EscherPropertyValueHelper::GetPropertyValue( aAny, aXPropSet, OUString( "VisibleArea" ) ) ) - { - pVisArea = new ::com::sun::star::awt::Rectangle; - aAny >>= (*pVisArea); - } - Rectangle aRect( Point( 0, 0 ), pShapeBoundRect->GetSize() ); - sal_uInt32 nBlibId = pGraphicProvider->GetBlibID( *pPicOutStrm, aUniqueId, aRect, pVisArea, NULL ); - if ( nBlibId ) - { - AddOpt( ESCHER_Prop_pib, nBlibId, sal_True ); - ImplCreateGraphicAttributes( aXPropSet, nBlibId, sal_False ); - bRetValue = sal_True; - } - delete pVisArea; - } - } +sal_Bool EscherPropertyContainer::CreateGraphicProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape, const GraphicObject& rGraphicObj ) +{ + sal_Bool bRetValue = sal_False; + OString aUniqueId( rGraphicObj.GetUniqueID() ); + if ( !aUniqueId.isEmpty() ) + { + AddOpt( ESCHER_Prop_fillType, ESCHER_FillPicture ); + uno::Reference< beans::XPropertySet > aXPropSet( rXShape, uno::UNO_QUERY ); + + if ( pGraphicProvider && pPicOutStrm && pShapeBoundRect && aXPropSet.is() ) + { + ::com::sun::star::uno::Any aAny; + ::com::sun::star::awt::Rectangle* pVisArea = NULL; + if ( EscherPropertyValueHelper::GetPropertyValue( aAny, aXPropSet, OUString("VisibleArea" ) ) ) + { + pVisArea = new ::com::sun::star::awt::Rectangle; + aAny >>= (*pVisArea); } + Rectangle aRect( Point( 0, 0 ), pShapeBoundRect->GetSize() ); + sal_uInt32 nBlibId = pGraphicProvider->GetBlibID( *pPicOutStrm, aUniqueId, aRect, pVisArea, NULL ); + if ( nBlibId ) + { + AddOpt( ESCHER_Prop_pib, nBlibId, sal_True ); + ImplCreateGraphicAttributes( aXPropSet, nBlibId, sal_False ); + bRetValue = sal_True; + } + delete pVisArea; } } return bRetValue; } +sal_Bool EscherPropertyContainer::CreateMediaGraphicProperties( + const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape ) +{ + sal_Bool bRetValue = sal_False; + if ( rXShape.is() ) + { + SdrObject* pSdrMedia( GetSdrObjectFromXShape( rXShape ) ); // SJ: leaving unoapi, because currently there is + if ( pSdrMedia && pSdrMedia->ISA( SdrMediaObj ) ) // no access to the native graphic object + { + GraphicObject aGraphicObject( ((SdrMediaObj*)pSdrMedia)->getSnapshot() ); + bRetValue = CreateGraphicProperties( rXShape, aGraphicObject ); + } + } + return bRetValue; +} sal_Bool EscherPropertyContainer::ImplCreateEmbeddedBmp( const OString& rUniqueId ) { diff --git a/include/filter/msfilter/escherex.hxx b/include/filter/msfilter/escherex.hxx index 9ccf435..c4807e8 100644 --- a/include/filter/msfilter/escherex.hxx +++ b/include/filter/msfilter/escherex.hxx @@ -1231,6 +1231,13 @@ public: sal_Bool CreateOLEGraphicProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXOleObject ); + sal_Bool CreateGraphicProperties( + const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape, + const GraphicObject& rGraphicObj + ); + sal_Bool CreateMediaGraphicProperties( + const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXMediaObject + ); /** Creates a complex ESCHER_Prop_fillBlip containing the BLIP directly (for Excel charts). */ sal_Bool CreateEmbeddedBitmapProperties( diff --git a/sd/source/filter/eppt/epptso.cxx b/sd/source/filter/eppt/epptso.cxx index 4d4c3ee..41a8238 100644 --- a/sd/source/filter/eppt/epptso.cxx +++ b/sd/source/filter/eppt/epptso.cxx @@ -3212,7 +3212,8 @@ void PPTWriter::ImplWritePage( const PHLayout& rLayout, EscherSolverContainer& a mnAngle = 0; mpPptEscherEx->OpenContainer( ESCHER_SpContainer ); ImplCreateShape( ESCHER_ShpInst_PictureFrame, 0xa00, aSolverContainer ); - + if ( aPropOpt.CreateMediaGraphicProperties( mXShape ) ) + aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 ); ::com::sun::star::uno::Any aAny; if ( PropValue::GetPropertyValue( aAny, mXPropSet, OUString( "MediaURL" ), sal_True ) ) { @@ -3262,6 +3263,18 @@ void PPTWriter::ImplWritePage( const PHLayout& rLayout, EscherSolverContainer& a << (sal_uInt16)EPP_ExObjRefAtom << (sal_uInt32)4 << nRefId; + // write EPP_InteractiveInfo container for no_action + *pClientData << (sal_uInt32)( ( EPP_InteractiveInfo << 16 ) | 0xf ) << (sal_uInt32)24; + *pClientData << (sal_uInt16)0 + << (sal_uInt16)EPP_InteractiveInfoAtom + << (sal_uInt32)16 + << (sal_uInt32) 0 + << (sal_uInt32) 0 + << (sal_uInt8) 6 + << (sal_uInt8) 0 + << (sal_uInt8) 0 + << (sal_uInt8) 0 + << (sal_uInt32) 0; } } } diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 9e3eab5..a2c7830 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -2005,6 +2005,8 @@ String ImplSdPPTImport::ReadMedia( sal_uInt32 nMediaRef ) const if( ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aStr, aRetVal ) ) { aRetVal = INetURLObject( aRetVal ).GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); + }else{ + aRetVal = aStr; } } } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
