diff options
Diffstat (limited to 'sw/source/core/ole/ndole.cxx')
-rw-r--r-- | sw/source/core/ole/ndole.cxx | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/sw/source/core/ole/ndole.cxx b/sw/source/core/ole/ndole.cxx index c9f26b9b2156..354c3404b427 100644 --- a/sw/source/core/ole/ndole.cxx +++ b/sw/source/core/ole/ndole.cxx @@ -57,6 +57,7 @@ #include <unotools/ucbstreamhelper.hxx> #include <vcl/graphicfilter.hxx> #include <comcore.hrc> +#include <svx/charthelper.hxx> #include <deque> @@ -125,6 +126,10 @@ void SAL_CALL SwOLEListener_Impl::stateChanged( const lang::EventObject&, ::sal_ if (g_pOLELRU_Cache) g_pOLELRU_Cache->RemoveObj( *mpObj ); } + else if(mpObj && nNewState == embed::EmbedStates::RUNNING) + { + mpObj->resetBufferedData(); + } } void SwOLEListener_Impl::Release() @@ -673,7 +678,9 @@ void SwOLENode::SetChanged() SwOLEObj::SwOLEObj( const svt::EmbeddedObjectRef& xObj ) : pOLENd( nullptr ), pListener( nullptr ), - xOLERef( xObj ) + xOLERef( xObj ), + m_aPrimitive2DSequence(), + m_aRange() { xOLERef.Lock(); if ( xObj.is() ) @@ -687,7 +694,9 @@ SwOLEObj::SwOLEObj( const svt::EmbeddedObjectRef& xObj ) : SwOLEObj::SwOLEObj( const OUString &rString, sal_Int64 nAspect ) : pOLENd( nullptr ), pListener( nullptr ), - aName( rString ) + aName( rString ), + m_aPrimitive2DSequence(), + m_aRange() { xOLERef.Lock(); xOLERef.SetViewAspect( nAspect ); @@ -932,6 +941,34 @@ OUString SwOLEObj::GetDescription() return SW_RESSTR(STR_OLE); } +drawinglayer::primitive2d::Primitive2DContainer SwOLEObj::tryToGetChartContentAsPrimitive2DSequence(basegfx::B2DRange& rRange) +{ + if(m_aPrimitive2DSequence.empty() && m_aRange.isEmpty() && xOLERef.is() && xOLERef.IsChart()) + { + const uno::Reference< frame::XModel > aXModel(xOLERef->getComponent(), uno::UNO_QUERY); + + if(aXModel.is()) + { + m_aPrimitive2DSequence = ChartHelper::tryToGetChartContentAsPrimitive2DSequence( + aXModel, + m_aRange); + } + } + + if(!m_aPrimitive2DSequence.empty() && !m_aRange.isEmpty()) + { + rRange = m_aRange; + } + + return m_aPrimitive2DSequence; +} + +void SwOLEObj::resetBufferedData() +{ + m_aPrimitive2DSequence = drawinglayer::primitive2d::Primitive2DContainer(); + m_aRange.reset(); +} + SwOLELRUCache::SwOLELRUCache() : utl::ConfigItem(OUString("Office.Common/Cache")) , m_nLRU_InitSize( 20 ) |