summaryrefslogtreecommitdiff
path: root/svx/source/svdraw/svdograf.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/svdraw/svdograf.cxx')
-rw-r--r--svx/source/svdraw/svdograf.cxx296
1 files changed, 158 insertions, 138 deletions
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index e61a09da8e2b..1a00716fa088 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -216,8 +216,8 @@ void SdrGraphicLink::RemoveGraphicUpdater()
::sfx2::SvBaseLink::UpdateResult SdrGraphicLink::DataChanged(
const OUString& rMimeType, const css::uno::Any & rValue )
{
- SdrModel& rModel(rGrafObj.getSdrModelFromSdrObject());
- sfx2::LinkManager* pLinkManager(rModel.GetLinkManager());
+ SdrModel* pModel = rGrafObj.GetModel();
+ sfx2::LinkManager* pLinkManager= pModel ? pModel->GetLinkManager() : nullptr;
if( pLinkManager && rValue.hasValue() )
{
@@ -325,14 +325,15 @@ void SdrGrafObj::onGraphicChanged()
}
}
-SdrGrafObj::SdrGrafObj(SdrModel& rSdrModel)
-: SdrRectObj(rSdrModel)
- ,mpGraphicObject(new GraphicObject)
- ,pGraphicLink(nullptr)
- ,bMirrored(false)
- ,mbIsSignatureLine(false)
- ,mbIsSignatureLineShowSignDate(true)
- ,mbIsSignatureLineCanAddComment(false)
+
+SdrGrafObj::SdrGrafObj()
+ : SdrRectObj()
+ , mpGraphicObject(new GraphicObject)
+ , pGraphicLink(nullptr)
+ , bMirrored(false)
+ , mbIsSignatureLine(false)
+ , mbIsSignatureLineShowSignDate(true)
+ , mbIsSignatureLineCanAddComment(false)
{
mpGraphicObject->SetSwapStreamHdl( LINK(this, SdrGrafObj, ImpSwapHdl) );
onGraphicChanged();
@@ -351,17 +352,14 @@ SdrGrafObj::SdrGrafObj(SdrModel& rSdrModel)
mbSupportTextIndentingOnLineWidthChange = false;
}
-SdrGrafObj::SdrGrafObj(
- SdrModel& rSdrModel,
- const Graphic& rGraphic,
- const tools::Rectangle& rRect)
-: SdrRectObj(rSdrModel, rRect)
- ,mpGraphicObject(new GraphicObject(rGraphic))
- ,pGraphicLink(nullptr)
- ,bMirrored(false)
- ,mbIsSignatureLine(false)
- ,mbIsSignatureLineShowSignDate(true)
- ,mbIsSignatureLineCanAddComment(false)
+SdrGrafObj::SdrGrafObj(const Graphic& rGraphic, const tools::Rectangle& rRect)
+ : SdrRectObj(rRect)
+ , mpGraphicObject(new GraphicObject(rGraphic))
+ , pGraphicLink(nullptr)
+ , bMirrored(false)
+ , mbIsSignatureLine(false)
+ , mbIsSignatureLineShowSignDate(true)
+ , mbIsSignatureLineCanAddComment(false)
{
mpGraphicObject->SetSwapStreamHdl( LINK(this, SdrGrafObj, ImpSwapHdl) );
onGraphicChanged();
@@ -380,16 +378,14 @@ SdrGrafObj::SdrGrafObj(
mbSupportTextIndentingOnLineWidthChange = false;
}
-SdrGrafObj::SdrGrafObj(
- SdrModel& rSdrModel,
- const Graphic& rGraphic)
-: SdrRectObj(rSdrModel)
- ,mpGraphicObject(new GraphicObject(rGraphic))
- ,pGraphicLink(nullptr)
- ,bMirrored(false)
- ,mbIsSignatureLine(false)
- ,mbIsSignatureLineShowSignDate(true)
- ,mbIsSignatureLineCanAddComment(false)
+SdrGrafObj::SdrGrafObj(const Graphic& rGraphic)
+ : SdrRectObj()
+ , mpGraphicObject(new GraphicObject(rGraphic))
+ , pGraphicLink(nullptr)
+ , bMirrored(false)
+ , mbIsSignatureLine(false)
+ , mbIsSignatureLineShowSignDate(true)
+ , mbIsSignatureLineCanAddComment(false)
{
mpGraphicObject->SetSwapStreamHdl( LINK(this, SdrGrafObj, ImpSwapHdl) );
onGraphicChanged();
@@ -485,12 +481,10 @@ Graphic SdrGrafObj::GetTransformedGraphic( SdrGrafObjTransformsAttrs nTransformF
{
// Refactored most of the code to GraphicObject, where
// everybody can use e.g. the cropping functionality
- MapMode aDestMap(
- getSdrModelFromSdrObject().GetScaleUnit(),
- Point(),
- getSdrModelFromSdrObject().GetScaleFraction(),
- getSdrModelFromSdrObject().GetScaleFraction());
- const Size aDestSize( GetLogicRect().GetSize() );
+
+ MapMode aDestMap( pModel->GetScaleUnit(), Point(), pModel->GetScaleFraction(), pModel->GetScaleFraction() );
+ const Size aDestSize( GetLogicRect().GetSize() );
+
GraphicAttr aActAttr = GetGraphicAttr(nTransformFlags);
// Delegate to moved code in GraphicObject
@@ -565,12 +559,11 @@ const Size& SdrGrafObj::GetGrafPrefSize() const
void SdrGrafObj::SetGrafStreamURL( const OUString& rGraphicStreamURL )
{
mbIsPreview = false;
-
if( rGraphicStreamURL.isEmpty() )
{
mpGraphicObject->SetUserData();
}
- else if(getSdrModelFromSdrObject().IsSwapGraphics() )
+ else if( pModel->IsSwapGraphics() )
{
mpGraphicObject->SetUserData( rGraphicStreamURL );
}
@@ -587,20 +580,21 @@ Size SdrGrafObj::getOriginalSize() const
if (aGrafInfo.IsCropped())
{
- const long aCroppedTop(OutputDevice::LogicToLogic(aGrafInfo.GetTopCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
- const long aCroppedBottom(OutputDevice::LogicToLogic(aGrafInfo.GetBottomCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
- const long aCroppedLeft(OutputDevice::LogicToLogic(aGrafInfo.GetLeftCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
- const long aCroppedRight(OutputDevice::LogicToLogic(aGrafInfo.GetRightCrop(), getSdrModelFromSdrObject().GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit()));
- const long aCroppedWidth(aSize.getWidth() - aCroppedLeft + aCroppedRight);
- const long aCroppedHeight(aSize.getHeight() - aCroppedTop + aCroppedBottom);
+ long aCroppedTop = OutputDevice::LogicToLogic( aGrafInfo.GetTopCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
+ long aCroppedBottom = OutputDevice::LogicToLogic( aGrafInfo.GetBottomCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
+ long aCroppedLeft = OutputDevice::LogicToLogic( aGrafInfo.GetLeftCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
+ long aCroppedRight = OutputDevice::LogicToLogic( aGrafInfo.GetRightCrop(), GetModel()->GetScaleUnit(), GetGrafPrefMapMode().GetMapUnit());
+
+ long aCroppedWidth = aSize.getWidth() - aCroppedLeft + aCroppedRight;
+ long aCroppedHeight = aSize.getHeight() - aCroppedTop + aCroppedBottom;
aSize = Size ( aCroppedWidth, aCroppedHeight);
}
if ( GetGrafPrefMapMode().GetMapUnit() == MapUnit::MapPixel )
- aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, MapMode(getSdrModelFromSdrObject().GetScaleUnit()));
+ aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, MapMode(GetModel()->GetScaleUnit()));
else
- aSize = OutputDevice::LogicToLogic(aSize, GetGrafPrefMapMode(), MapMode(getSdrModelFromSdrObject().GetScaleUnit()));
+ aSize = OutputDevice::LogicToLogic(aSize, GetGrafPrefMapMode(), MapMode(GetModel()->GetScaleUnit()));
return aSize;
}
@@ -635,7 +629,7 @@ void SdrGrafObj::ForceSwapIn() const
void SdrGrafObj::ImpRegisterLink()
{
- sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
+ sfx2::LinkManager* pLinkManager = pModel != nullptr ? pModel->GetLinkManager() : nullptr;
if( pLinkManager != nullptr && pGraphicLink == nullptr )
{
@@ -651,7 +645,7 @@ void SdrGrafObj::ImpRegisterLink()
void SdrGrafObj::ImpDeregisterLink()
{
- sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
+ sfx2::LinkManager* pLinkManager = pModel != nullptr ? pModel->GetLinkManager() : nullptr;
if( pLinkManager != nullptr && pGraphicLink!=nullptr)
{
@@ -736,11 +730,11 @@ bool SdrGrafObj::ImpUpdateGraphicLink( bool bAsynchron ) const
void SdrGrafObj::ImpSetLinkedGraphic( const Graphic& rGraphic )
{
- const bool bIsChanged(getSdrModelFromSdrObject().IsChanged());
+ const bool bIsChanged = GetModel()->IsChanged();
NbcSetGraphic( rGraphic );
ActionChanged();
BroadcastObjectChange();
- getSdrModelFromSdrObject().SetChanged(bIsChanged);
+ GetModel()->SetChanged( bIsChanged );
}
OUString SdrGrafObj::TakeObjNameSingul() const
@@ -900,9 +894,9 @@ SdrObject* SdrGrafObj::getFullDragClone() const
return pRetval;
}
-SdrGrafObj* SdrGrafObj::Clone(SdrModel* pTargetModel) const
+SdrGrafObj* SdrGrafObj::Clone() const
{
- return CloneHelper< SdrGrafObj >(pTargetModel);
+ return CloneHelper< SdrGrafObj >();
}
SdrGrafObj& SdrGrafObj::operator=( const SdrGrafObj& rObj )
@@ -1022,14 +1016,14 @@ void SdrGrafObj::SetPage( SdrPage* pNewPage )
ImpDeregisterLink();
}
- if(!GetStyleSheet() && pNewPage)
+ if(!pModel && !GetStyleSheet() && pNewPage && pNewPage->GetModel())
{
// #i119287# Set default StyleSheet for SdrGrafObj here, it is different from 'Default'. This
// needs to be done before the style 'Default' is set from the :SetModel() call which is triggered
// from the following :SetPage().
// TTTT: Needs to be moved in branch aw080 due to having a SdrModel from the beginning, is at this
// place for convenience currently (works in both versions, is not in the way)
- SfxStyleSheet* pSheet(pNewPage->getSdrModelFromSdrPage().GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj());
+ SfxStyleSheet* pSheet = pNewPage->GetModel()->GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj();
if(pSheet)
{
@@ -1048,6 +1042,28 @@ void SdrGrafObj::SetPage( SdrPage* pNewPage )
ImpRegisterLink();
}
+void SdrGrafObj::SetModel( SdrModel* pNewModel )
+{
+ bool bChg = pNewModel != pModel;
+
+ if( bChg )
+ {
+ if( mpGraphicObject->HasUserData() )
+ {
+ ForceSwapIn();
+ }
+
+ if( pGraphicLink != nullptr )
+ ImpDeregisterLink();
+ }
+
+ // realize model
+ SdrRectObj::SetModel(pNewModel);
+
+ if (bChg && !aFileName.isEmpty())
+ ImpRegisterLink();
+}
+
void SdrGrafObj::StartAnimation()
{
SetGrafAnimationAllowed(true);
@@ -1067,15 +1083,11 @@ GDIMetaFile SdrGrafObj::getMetafileFromEmbeddedVectorGraphicData() const
{
GDIMetaFile aRetval;
- if(isEmbeddedVectorGraphicData())
+ if(isEmbeddedVectorGraphicData() && GetModel())
{
ScopedVclPtrInstance< VirtualDevice > pOut;
const tools::Rectangle aBoundRect(GetCurrentBoundRect());
- const MapMode aMap(
- getSdrModelFromSdrObject().GetScaleUnit(),
- Point(),
- getSdrModelFromSdrObject().GetScaleFraction(),
- getSdrModelFromSdrObject().GetScaleFraction());
+ const MapMode aMap(GetModel()->GetScaleUnit(), Point(), GetModel()->GetScaleFraction(), GetModel()->GetScaleFraction());
pOut->EnableOutput(false);
pOut->SetMapMode(aMap);
@@ -1120,11 +1132,8 @@ SdrObject* SdrGrafObj::DoConvertToPolyObj(bool bBezier, bool bAddText ) const
case GraphicType::GdiMetafile:
{
// Sort into group and return ONLY those objects that can be created from the MetaFile.
- ImpSdrGDIMetaFileImport aFilter(
- getSdrModelFromSdrObject(),
- GetLayer(),
- maRect);
- SdrObjGroup* pGrp = new SdrObjGroup(getSdrModelFromSdrObject());
+ ImpSdrGDIMetaFileImport aFilter(*GetModel(), GetLayer(), maRect);
+ SdrObjGroup* pGrp = new SdrObjGroup();
if(aFilter.DoImport(aMtf, *pGrp->GetSubList(), 0))
{
@@ -1147,6 +1156,7 @@ SdrObject* SdrGrafObj::DoConvertToPolyObj(bool bBezier, bool bAddText ) const
pRetval = pGrp;
pGrp->NbcSetLayer(GetLayer());
+ pGrp->SetModel(GetModel());
if(bAddText)
{
@@ -1188,8 +1198,10 @@ SdrObject* SdrGrafObj::DoConvertToPolyObj(bool bBezier, bool bAddText ) const
if(!pGrp)
{
- pGrp = new SdrObjGroup(getSdrModelFromSdrObject());
+ pGrp = new SdrObjGroup();
+
pGrp->NbcSetLayer(GetLayer());
+ pGrp->SetModel(GetModel());
pGrp->GetSubList()->NbcInsertObject(pRetval);
}
@@ -1323,7 +1335,7 @@ IMPL_LINK(SdrGrafObj, ReplacementSwapHdl, const GraphicObject*, pO, SvStream*)
// replacement image is always swapped
if (pO->IsInSwapOut())
{
- SdrSwapGraphicsMode const nSwapMode(getSdrModelFromSdrObject().GetSwapGraphicsMode());
+ SdrSwapGraphicsMode const nSwapMode(pModel->GetSwapGraphicsMode());
if (nSwapMode & SdrSwapGraphicsMode::TEMP)
{
return GRFMGR_AUTOSWAPSTREAM_TEMP;
@@ -1347,13 +1359,13 @@ IMPL_LINK( SdrGrafObj, ImpSwapHdl, const GraphicObject*, pO, SvStream* )
if( pO->IsInSwapOut() )
{
- if( !mbIsPreview && getSdrModelFromSdrObject().IsSwapGraphics() && mpGraphicObject->GetSizeBytes() > 20480 )
+ if( pModel && !mbIsPreview && pModel->IsSwapGraphics() && mpGraphicObject->GetSizeBytes() > 20480 )
{
// test if this object is visualized from someone
// ## test only if there are VOCs other than the preview renderer
if(!GetViewContact().HasViewObjectContacts())
{
- const SdrSwapGraphicsMode nSwapMode = getSdrModelFromSdrObject().GetSwapGraphicsMode();
+ const SdrSwapGraphicsMode nSwapMode = pModel->GetSwapGraphicsMode();
if( ( pGraphicLink ) &&
( nSwapMode & SdrSwapGraphicsMode::PURGE ) )
@@ -1379,73 +1391,78 @@ IMPL_LINK( SdrGrafObj, ImpSwapHdl, const GraphicObject*, pO, SvStream* )
else if( pO->IsInSwapIn() )
{
// can be loaded from the original document stream later
- if(mpGraphicObject->HasUserData())
+ if( pModel != nullptr )
{
- ::comphelper::LifecycleProxy proxy;
- OUString aUserData = mpGraphicObject->GetUserData();
- uno::Reference<io::XInputStream> const xStream(
- getSdrModelFromSdrObject().GetDocumentStream(aUserData, proxy));
-
- std::unique_ptr<SvStream> const pStream( (xStream.is())
- ? ::utl::UcbStreamHelper::CreateStream(xStream)
- : nullptr );
-
- if( pStream != nullptr )
+ if(mpGraphicObject->HasUserData())
{
- Graphic aGraphic;
+ ::comphelper::LifecycleProxy proxy;
+ OUString aUserData = mpGraphicObject->GetUserData();
+ uno::Reference<io::XInputStream> const xStream(
+ pModel->GetDocumentStream(aUserData, proxy));
- std::unique_ptr<css::uno::Sequence< css::beans::PropertyValue > > pFilterData;
+ std::unique_ptr<SvStream> const pStream( (xStream.is())
+ ? ::utl::UcbStreamHelper::CreateStream(xStream)
+ : nullptr );
- if(mbInsidePaint && !GetViewContact().HasViewObjectContacts())
+ if( pStream != nullptr )
{
- pFilterData.reset(new css::uno::Sequence< css::beans::PropertyValue >( 3 ));
-
- const css::awt::Size aPreviewSizeHint( 64, 64 );
- const bool bAllowPartialStreamRead = true;
- // create <GfxLink> instance also for previews in order to avoid that its corresponding
- // data is cleared in the graphic cache entry in case that the preview data equals the complete graphic data
- const bool bCreateNativeLink = true;
- (*pFilterData)[ 0 ].Name = "PreviewSizeHint";
- (*pFilterData)[ 0 ].Value <<= aPreviewSizeHint;
- (*pFilterData)[ 1 ].Name = "AllowPartialStreamRead";
- (*pFilterData)[ 1 ].Value <<= bAllowPartialStreamRead;
- (*pFilterData)[ 2 ].Name = "CreateNativeLink";
- (*pFilterData)[ 2 ].Value <<= bCreateNativeLink;
-
- mbIsPreview = true;
- }
+ Graphic aGraphic;
- if(!GraphicFilter::GetGraphicFilter().ImportGraphic(
- aGraphic, aUserData, *pStream,
- GRFILTER_FORMAT_DONTKNOW, nullptr, GraphicFilterImportFlags::NONE, pFilterData.get()))
- {
- const OUString aNewUserData( mpGraphicObject->GetUserData() );
- mpGraphicObject->SetGraphic( aGraphic );
- if( mbIsPreview )
+ std::unique_ptr<css::uno::Sequence< css::beans::PropertyValue > > pFilterData;
+
+ if(mbInsidePaint && !GetViewContact().HasViewObjectContacts())
{
- mpGraphicObject->SetUserData(aNewUserData);
+ pFilterData.reset(new css::uno::Sequence< css::beans::PropertyValue >( 3 ));
+
+ const css::awt::Size aPreviewSizeHint( 64, 64 );
+ const bool bAllowPartialStreamRead = true;
+ // create <GfxLink> instance also for previews in order to avoid that its corresponding
+ // data is cleared in the graphic cache entry in case that the preview data equals the complete graphic data
+ const bool bCreateNativeLink = true;
+ (*pFilterData)[ 0 ].Name = "PreviewSizeHint";
+ (*pFilterData)[ 0 ].Value <<= aPreviewSizeHint;
+ (*pFilterData)[ 1 ].Name = "AllowPartialStreamRead";
+ (*pFilterData)[ 1 ].Value <<= bAllowPartialStreamRead;
+ (*pFilterData)[ 2 ].Name = "CreateNativeLink";
+ (*pFilterData)[ 2 ].Value <<= bCreateNativeLink;
+
+ mbIsPreview = true;
}
- else
+
+ if(!GraphicFilter::GetGraphicFilter().ImportGraphic(
+ aGraphic, aUserData, *pStream,
+ GRFILTER_FORMAT_DONTKNOW, nullptr, GraphicFilterImportFlags::NONE, pFilterData.get()))
{
- mpGraphicObject->SetUserData();
+ const OUString aNewUserData( mpGraphicObject->GetUserData() );
+ mpGraphicObject->SetGraphic( aGraphic );
+ if( mbIsPreview )
+ {
+ mpGraphicObject->SetUserData(aNewUserData);
+ }
+ else
+ {
+ mpGraphicObject->SetUserData();
+ }
+
+ // Graphic successfully swapped in.
+ pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
}
+ pFilterData.reset();
- // Graphic successfully swapped in.
- pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
+ pStream->ResetError();
}
- pFilterData.reset();
-
- pStream->ResetError();
}
- }
- else if( !ImpUpdateGraphicLink( false ) )
- {
- pRet = GRFMGR_AUTOSWAPSTREAM_TEMP;
+ else if( !ImpUpdateGraphicLink( false ) )
+ {
+ pRet = GRFMGR_AUTOSWAPSTREAM_TEMP;
+ }
+ else
+ {
+ pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
+ }
}
else
- {
- pRet = GRFMGR_AUTOSWAPSTREAM_LOADED;
- }
+ pRet = GRFMGR_AUTOSWAPSTREAM_TEMP;
}
return pRet;
@@ -1464,27 +1481,30 @@ Reference< XInputStream > SdrGrafObj::getInputStream()
{
Reference< XInputStream > xStream;
- if (mpGraphicObject && GetGraphic().IsLink())
+ if( pModel )
{
- Graphic aGraphic( GetGraphic() );
- GfxLink aLink( aGraphic.GetLink() );
- sal_uInt32 nSize = aLink.GetDataSize();
- const void* pSourceData = static_cast<const void*>(aLink.GetData());
- if( nSize && pSourceData )
+ if (mpGraphicObject && GetGraphic().IsLink())
{
- sal_uInt8 * pBuffer = new sal_uInt8[ nSize ];
- memcpy( pBuffer, pSourceData, nSize );
+ Graphic aGraphic( GetGraphic() );
+ GfxLink aLink( aGraphic.GetLink() );
+ sal_uInt32 nSize = aLink.GetDataSize();
+ const void* pSourceData = static_cast<const void*>(aLink.GetData());
+ if( nSize && pSourceData )
+ {
+ sal_uInt8 * pBuffer = new sal_uInt8[ nSize ];
+ memcpy( pBuffer, pSourceData, nSize );
- SvMemoryStream* pStream = new SvMemoryStream( static_cast<void*>(pBuffer), static_cast<std::size_t>(nSize), StreamMode::READ );
- pStream->ObjectOwnsMemory( true );
- xStream.set( new utl::OInputStreamWrapper( pStream, true ) );
+ SvMemoryStream* pStream = new SvMemoryStream( static_cast<void*>(pBuffer), static_cast<std::size_t>(nSize), StreamMode::READ );
+ pStream->ObjectOwnsMemory( true );
+ xStream.set( new utl::OInputStreamWrapper( pStream, true ) );
+ }
}
- }
- if (!xStream.is() && !aFileName.isEmpty())
- {
- SvFileStream* pStream = new SvFileStream( aFileName, StreamMode::READ );
- xStream.set( new utl::OInputStreamWrapper( pStream ) );
+ if (!xStream.is() && !aFileName.isEmpty())
+ {
+ SvFileStream* pStream = new SvFileStream( aFileName, StreamMode::READ );
+ xStream.set( new utl::OInputStreamWrapper( pStream ) );
+ }
}
return xStream;