summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@libreoffice.org>2020-12-10 00:09:32 +0100
committerBjoern Michaelsen <bjoern.michaelsen@libreoffice.org>2020-12-10 09:25:47 +0100
commit4d6f00a097e68715c63c3388b1183bf08fa8cdbb (patch)
tree729a105fda227588a2ac48367fdfc114b94ab596 /sw
parent106a9e98c864fe07bf91331d510dd41e3801c6eb (diff)
flyincnt: Modify no more
Change-Id: I1500f5944a5a9504ef8c9c48c2d43da710de3fa4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107512 Tested-by: Jenkins Reviewed-by: Bjoern Michaelsen <bjoern.michaelsen@libreoffice.org>
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/inc/flyfrms.hxx8
-rw-r--r--sw/source/core/layout/flyincnt.cxx67
2 files changed, 39 insertions, 36 deletions
diff --git a/sw/source/core/inc/flyfrms.hxx b/sw/source/core/inc/flyfrms.hxx
index 160ca2bb85ca..a401e4abf0af 100644
--- a/sw/source/core/inc/flyfrms.hxx
+++ b/sw/source/core/inc/flyfrms.hxx
@@ -191,18 +191,16 @@ public:
};
// Flys that are bound to a character in Content
-class SwFlyInContentFrame : public SwFlyFrame
+class SwFlyInContentFrame final: public SwFlyFrame
{
Point m_aRef; // relative to this point AbsPos is being calculated
virtual void DestroyImpl() override;
virtual ~SwFlyInContentFrame() override;
-protected:
- virtual void NotifyBackground( SwPageFrame *pPage,
- const SwRect& rRect, PrepareHint eHint) override;
+ virtual void NotifyBackground(SwPageFrame *pPage, const SwRect& rRect, PrepareHint eHint) override;
virtual void MakeAll(vcl::RenderContext* pRenderContext) override;
- virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ) override;
+ virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
public:
// #i28701#
diff --git a/sw/source/core/layout/flyincnt.cxx b/sw/source/core/layout/flyincnt.cxx
index daeaaf314f17..be7b5722a593 100644
--- a/sw/source/core/layout/flyincnt.cxx
+++ b/sw/source/core/layout/flyincnt.cxx
@@ -90,45 +90,50 @@ void SwFlyInContentFrame::SetRefPoint( const Point& rPoint,
}
}
-void SwFlyInContentFrame::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
+void SwFlyInContentFrame::SwClientNotify(const SwModify&, const SfxHint& rHint)
{
- bool bCallPrepare = false;
- const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
- if (RES_ATTRSET_CHG == nWhich && pNew)
+ auto pLegacy = dynamic_cast<const sw::LegacyModifyHint*>(&rHint);
+ if(!pLegacy)
+ return;
+ std::pair<std::unique_ptr<SwAttrSetChg>, std::unique_ptr<SwAttrSetChg>> aTweakedChgs;
+ std::pair<const SfxPoolItem*, const SfxPoolItem*> aSuperArgs(nullptr, nullptr);
+ switch(pLegacy->GetWhich())
{
- if(pOld &&
- (SfxItemState::SET == static_cast<const SwAttrSetChg*>(pNew)->GetChgSet()->
- GetItemState(RES_SURROUND, false) ||
- SfxItemState::SET == static_cast<const SwAttrSetChg*>(pNew)->GetChgSet()->
- GetItemState(RES_FRMMACRO, false)) )
+ case RES_ATTRSET_CHG:
{
- SwAttrSetChg aOld( *static_cast<const SwAttrSetChg*>(pOld) );
- SwAttrSetChg aNew( *static_cast<const SwAttrSetChg*>(pNew) );
-
- aOld.ClearItem( RES_SURROUND );
- aNew.ClearItem( RES_SURROUND );
- aOld.ClearItem( RES_FRMMACRO );
- aNew.ClearItem( RES_FRMMACRO );
- if( aNew.Count() )
+ auto pOldAttrSetChg = static_cast<const SwAttrSetChg*>(pLegacy->m_pOld);
+ auto pNewAttrSetChg = static_cast<const SwAttrSetChg*>(pLegacy->m_pNew);
+ if(pOldAttrSetChg
+ && pNewAttrSetChg
+ && ((SfxItemState::SET == pNewAttrSetChg->GetChgSet()->GetItemState(RES_SURROUND, false))
+ || (SfxItemState::SET == pNewAttrSetChg->GetChgSet()->GetItemState(RES_FRMMACRO, false))))
{
- SwFlyFrame::Modify( &aOld, &aNew );
- bCallPrepare = true;
- }
- }
- else if( static_cast<const SwAttrSetChg*>(pNew)->GetChgSet()->Count())
- {
- SwFlyFrame::Modify( pOld, pNew );
- bCallPrepare = true;
+ aTweakedChgs.second = std::make_unique<SwAttrSetChg>(*pOldAttrSetChg);
+ aTweakedChgs.second->ClearItem(RES_SURROUND);
+ aTweakedChgs.second->ClearItem(RES_FRMMACRO);
+ if(aTweakedChgs.second->Count())
+ {
+ aTweakedChgs.first = std::make_unique<SwAttrSetChg>(*pOldAttrSetChg);
+ aTweakedChgs.first->ClearItem(RES_SURROUND);
+ aTweakedChgs.first->ClearItem(RES_FRMMACRO);
+ aSuperArgs = std::pair<const SfxPoolItem*, const SfxPoolItem*>(aTweakedChgs.first.get(), aTweakedChgs.second.get());
+ }
+ } else if(pNewAttrSetChg->GetChgSet()->Count())
+ aSuperArgs = std::pair<const SfxPoolItem*, const SfxPoolItem*>(pLegacy->m_pOld, pLegacy->m_pNew);
+ break;
}
+ case RES_SURROUND:
+ case RES_FRMMACRO:
+ break;
+ default:
+ aSuperArgs = std::pair<const SfxPoolItem*, const SfxPoolItem*>(pLegacy->m_pOld, pLegacy->m_pNew);
}
- else if( nWhich != RES_SURROUND && RES_FRMMACRO != nWhich )
+ if(aSuperArgs.second)
{
- SwFlyFrame::Modify( pOld, pNew );
- bCallPrepare = true;
+ SwFlyFrame::Modify(aSuperArgs.first, aSuperArgs.second);
+ if(GetAnchorFrame())
+ AnchorFrame()->Prepare(PrepareHint::FlyFrameAttributesChanged, GetFormat());
}
-
- if ( bCallPrepare && GetAnchorFrame() )
- AnchorFrame()->Prepare( PrepareHint::FlyFrameAttributesChanged, GetFormat() );
}
/// Here the content gets formatted initially.