Kaydet (Commit) c3fed9f4 authored tarafından David Tardon's avatar David Tardon

Revert "fdo#58399 - revert attempts to untangle and accelerate this mess."

This reverts commit bb3f2900.
üst c2537d7d
...@@ -92,10 +92,12 @@ public: ...@@ -92,10 +92,12 @@ public:
com::sun::star::uno::Reference< com::sun::star::drawing::XShape > mXRenderedCustomShape; com::sun::star::uno::Reference< com::sun::star::drawing::XShape > mXRenderedCustomShape;
mutable com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeEngine > mxCustomShapeEngine;
// #i37011# render geometry shadow // #i37011# render geometry shadow
SdrObject* mpLastShadowGeometry; SdrObject* mpLastShadowGeometry;
static com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeEngine > GetCustomShapeEngine( const SdrObjCustomShape* pCustomShape ); com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeEngine > GetCustomShapeEngine() const;
// SVX_DLLPRIVATE com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeHandle > > // SVX_DLLPRIVATE com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeHandle > >
// SdrObjCustomShape::GetInteraction( const SdrObjCustomShape* pCustomShape ) const; // SdrObjCustomShape::GetInteraction( const SdrObjCustomShape* pCustomShape ) const;
......
...@@ -87,7 +87,6 @@ using namespace ::com::sun::star::lang; ...@@ -87,7 +87,6 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans; using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::drawing; using namespace ::com::sun::star::drawing;
static void lcl_ShapeSegmentFromBinary( EnhancedCustomShapeSegment& rSegInfo, sal_uInt16 nSDat ) static void lcl_ShapeSegmentFromBinary( EnhancedCustomShapeSegment& rSegInfo, sal_uInt16 nSDat )
{ {
switch( nSDat >> 8 ) switch( nSDat >> 8 )
...@@ -390,16 +389,18 @@ SdrObject* ImpCreateShadowObjectClone(const SdrObject& rOriginal, const SfxItemS ...@@ -390,16 +389,18 @@ SdrObject* ImpCreateShadowObjectClone(const SdrObject& rOriginal, const SfxItemS
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////
Reference< XCustomShapeEngine > SdrObjCustomShape::GetCustomShapeEngine( const SdrObjCustomShape* pCustomShape ) Reference< XCustomShapeEngine > SdrObjCustomShape::GetCustomShapeEngine() const
{ {
Reference< XCustomShapeEngine > xCustomShapeEngine; if (mxCustomShapeEngine.is())
String aEngine(((SdrCustomShapeEngineItem&)pCustomShape->GetMergedItem( SDRATTR_CUSTOMSHAPE_ENGINE )).GetValue()); return mxCustomShapeEngine;
String aEngine(((SdrCustomShapeEngineItem&)GetMergedItem( SDRATTR_CUSTOMSHAPE_ENGINE )).GetValue());
if ( !aEngine.Len() ) if ( !aEngine.Len() )
aEngine = String( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.drawing.EnhancedCustomShapeEngine" ) ); aEngine = String( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.drawing.EnhancedCustomShapeEngine" ) );
Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); Reference< XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
Reference< XShape > aXShape = GetXShapeForSdrObject( (SdrObjCustomShape*)pCustomShape ); Reference< XShape > aXShape = GetXShapeForSdrObject(const_cast<SdrObjCustomShape*>(this));
if ( aXShape.is() ) if ( aXShape.is() )
{ {
if ( aEngine.Len() && xFactory.is() ) if ( aEngine.Len() && xFactory.is() )
...@@ -411,16 +412,18 @@ Reference< XCustomShapeEngine > SdrObjCustomShape::GetCustomShapeEngine( const S ...@@ -411,16 +412,18 @@ Reference< XCustomShapeEngine > SdrObjCustomShape::GetCustomShapeEngine( const S
aArgument[ 0 ] <<= aPropValues; aArgument[ 0 ] <<= aPropValues;
Reference< XInterface > xInterface( xFactory->createInstanceWithArguments( aEngine, aArgument ) ); Reference< XInterface > xInterface( xFactory->createInstanceWithArguments( aEngine, aArgument ) );
if ( xInterface.is() ) if ( xInterface.is() )
xCustomShapeEngine = Reference< XCustomShapeEngine >( xInterface, UNO_QUERY ); mxCustomShapeEngine = Reference< XCustomShapeEngine >( xInterface, UNO_QUERY );
} }
} }
return xCustomShapeEngine;
return mxCustomShapeEngine;
} }
const SdrObject* SdrObjCustomShape::GetSdrObjectFromCustomShape() const const SdrObject* SdrObjCustomShape::GetSdrObjectFromCustomShape() const
{ {
if ( !mXRenderedCustomShape.is() ) if ( !mXRenderedCustomShape.is() )
{ {
Reference< XCustomShapeEngine > xCustomShapeEngine( GetCustomShapeEngine( this ) ); Reference< XCustomShapeEngine > xCustomShapeEngine( GetCustomShapeEngine() );
if ( xCustomShapeEngine.is() ) if ( xCustomShapeEngine.is() )
((SdrObjCustomShape*)this)->mXRenderedCustomShape = xCustomShapeEngine->render(); ((SdrObjCustomShape*)this)->mXRenderedCustomShape = xCustomShapeEngine->render();
} }
...@@ -547,10 +550,12 @@ double SdrObjCustomShape::GetExtraTextRotation( const bool bPreRotation ) const ...@@ -547,10 +550,12 @@ double SdrObjCustomShape::GetExtraTextRotation( const bool bPreRotation ) const
*pAny >>= fExtraTextRotateAngle; *pAny >>= fExtraTextRotateAngle;
return fExtraTextRotateAngle; return fExtraTextRotateAngle;
} }
sal_Bool SdrObjCustomShape::GetTextBounds( Rectangle& rTextBound ) const sal_Bool SdrObjCustomShape::GetTextBounds( Rectangle& rTextBound ) const
{ {
sal_Bool bRet = sal_False; sal_Bool bRet = sal_False;
Reference< XCustomShapeEngine > xCustomShapeEngine( GetCustomShapeEngine( this ) ); // a candidate for being cached
Reference< XCustomShapeEngine > xCustomShapeEngine( GetCustomShapeEngine() );
if ( xCustomShapeEngine.is() ) if ( xCustomShapeEngine.is() )
{ {
awt::Rectangle aR( xCustomShapeEngine->getTextBounds() ); awt::Rectangle aR( xCustomShapeEngine->getTextBounds() );
...@@ -565,7 +570,7 @@ sal_Bool SdrObjCustomShape::GetTextBounds( Rectangle& rTextBound ) const ...@@ -565,7 +570,7 @@ sal_Bool SdrObjCustomShape::GetTextBounds( Rectangle& rTextBound ) const
basegfx::B2DPolyPolygon SdrObjCustomShape::GetLineGeometry( const SdrObjCustomShape* pCustomShape, const sal_Bool bBezierAllowed ) basegfx::B2DPolyPolygon SdrObjCustomShape::GetLineGeometry( const SdrObjCustomShape* pCustomShape, const sal_Bool bBezierAllowed )
{ {
basegfx::B2DPolyPolygon aRetval; basegfx::B2DPolyPolygon aRetval;
Reference< XCustomShapeEngine > xCustomShapeEngine( GetCustomShapeEngine( pCustomShape ) ); Reference< XCustomShapeEngine > xCustomShapeEngine( pCustomShape->GetCustomShapeEngine() );
if ( xCustomShapeEngine.is() ) if ( xCustomShapeEngine.is() )
{ {
com::sun::star::drawing::PolyPolygonBezierCoords aBezierCoords = xCustomShapeEngine->getLineGeometry(); com::sun::star::drawing::PolyPolygonBezierCoords aBezierCoords = xCustomShapeEngine->getLineGeometry();
...@@ -589,7 +594,7 @@ std::vector< SdrCustomShapeInteraction > SdrObjCustomShape::GetInteractionHandle ...@@ -589,7 +594,7 @@ std::vector< SdrCustomShapeInteraction > SdrObjCustomShape::GetInteractionHandle
std::vector< SdrCustomShapeInteraction > xRet; std::vector< SdrCustomShapeInteraction > xRet;
try try
{ {
Reference< XCustomShapeEngine > xCustomShapeEngine( GetCustomShapeEngine( pCustomShape ) ); Reference< XCustomShapeEngine > xCustomShapeEngine( pCustomShape->GetCustomShapeEngine() );
if ( xCustomShapeEngine.is() ) if ( xCustomShapeEngine.is() )
{ {
int i; int i;
...@@ -3206,6 +3211,7 @@ bool SdrObjCustomShape::doConstructOrthogonal(const ::rtl::OUString& rName) ...@@ -3206,6 +3211,7 @@ bool SdrObjCustomShape::doConstructOrthogonal(const ::rtl::OUString& rName)
void SdrObjCustomShape::InvalidateRenderGeometry() void SdrObjCustomShape::InvalidateRenderGeometry()
{ {
mXRenderedCustomShape = 0L; mXRenderedCustomShape = 0L;
mxCustomShapeEngine = 0L;
SdrObject::Free( mpLastShadowGeometry ); SdrObject::Free( mpLastShadowGeometry );
mpLastShadowGeometry = 0L; mpLastShadowGeometry = 0L;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment