sw/inc/anchoreddrawobject.hxx                                      |    4 
 sw/inc/anchoredobject.hxx                                          |    5 
 sw/qa/core/text/text.cxx                                           |    2 
 sw/qa/extras/layout/layout3.cxx                                    |    4 
 sw/qa/extras/uiwriter/uiwriter5.cxx                                |    4 
 sw/source/core/doc/doclay.cxx                                      |    6 -
 sw/source/core/draw/dcontact.cxx                                   |    8 -
 sw/source/core/draw/dview.cxx                                      |    4 
 sw/source/core/fields/postithelper.cxx                             |    4 
 sw/source/core/frmedt/fefly1.cxx                                   |   32 ++---
 sw/source/core/frmedt/feshview.cxx                                 |   12 +-
 sw/source/core/frmedt/fews.cxx                                     |    4 
 sw/source/core/inc/flyfrm.hxx                                      |    4 
 sw/source/core/layout/anchoreddrawobject.cxx                       |   58 
+++++-----
 sw/source/core/layout/anchoredobject.cxx                           |   46 
+++----
 sw/source/core/layout/atrfrm.cxx                                   |    2 
 sw/source/core/layout/calcmove.cxx                                 |    8 -
 sw/source/core/layout/flowfrm.cxx                                  |   16 +-
 sw/source/core/layout/fly.cxx                                      |   34 ++---
 sw/source/core/layout/flycnt.cxx                                   |   10 -
 sw/source/core/layout/flyincnt.cxx                                 |    2 
 sw/source/core/layout/flylay.cxx                                   |   10 -
 sw/source/core/layout/frmtool.cxx                                  |    6 -
 sw/source/core/layout/layact.cxx                                   |    2 
 sw/source/core/layout/objectformattertxtfrm.cxx                    |   17 +-
 sw/source/core/layout/pagechg.cxx                                  |   26 ++--
 sw/source/core/layout/sortedobjs.cxx                               |   22 +--
 sw/source/core/layout/tabfrm.cxx                                   |   32 ++---
 sw/source/core/layout/trvlfrm.cxx                                  |    7 -
 sw/source/core/layout/wsfrm.cxx                                    |    6 -
 sw/source/core/objectpositioning/anchoredobjectposition.cxx        |    2 
 sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx |    4 
 sw/source/core/text/EnhancedPDFExportHelper.cxx                    |    2 
 sw/source/core/text/frmform.cxx                                    |    2 
 sw/source/core/text/itratr.cxx                                     |    2 
 sw/source/core/text/itrform2.cxx                                   |    2 
 sw/source/core/text/porfly.cxx                                     |    2 
 sw/source/core/text/porlay.cxx                                     |    2 
 sw/source/core/text/txtfly.cxx                                     |   39 
+++---
 sw/source/core/text/txtfrm.cxx                                     |    2 
 sw/source/core/txtnode/ndtxt.cxx                                   |    6 -
 sw/source/core/unocore/unoobj2.cxx                                 |   12 +-
 42 files changed, 237 insertions(+), 237 deletions(-)

New commits:
commit 5c233dae8fb921a10921afa999d40ef2dbfc07ba
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Sun Jan 14 17:53:03 2024 +0600
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Mon Jan 15 13:04:55 2024 +0100

    Let SwAnchoredObject::GetFrameFormat return pointer, and drop HasFrameFormat
    
    In commit 19062c98da5b2e9edc7a99068fa06a83c7578826, it was important to
    check if objects have frame format before using GetFrameFormat.
    
    Thic change makes it simpler amd more obvious. Also, it allows to avoid
    two calls to GetUserCall, by obtaining the pointer once and checking it.
    
    Change-Id: I980fcba9e369e107f3d062e8cab0a34e02384290
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162044
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162079

diff --git a/sw/inc/anchoreddrawobject.hxx b/sw/inc/anchoreddrawobject.hxx
index 609582d4d326..bfc40fe07a3c 100644
--- a/sw/inc/anchoreddrawobject.hxx
+++ b/sw/inc/anchoreddrawobject.hxx
@@ -115,8 +115,8 @@ class SwAnchoredDrawObject final : public SwAnchoredObject
         }
 
         // accessors to the format
-        virtual SwFrameFormat& GetFrameFormat() override;
-        virtual const SwFrameFormat& GetFrameFormat() const override;
+        virtual SwFrameFormat* GetFrameFormat() override;
+        virtual const SwFrameFormat* GetFrameFormat() const override;
 
         // accessors to the object area and its position
         virtual SwRect GetObjRect() const override;
diff --git a/sw/inc/anchoredobject.hxx b/sw/inc/anchoredobject.hxx
index 9af198425714..48b192f69ba9 100644
--- a/sw/inc/anchoredobject.hxx
+++ b/sw/inc/anchoredobject.hxx
@@ -318,9 +318,8 @@ class SW_DLLPUBLIC SwAnchoredObject
         void SetCurrRelPos( Point _aRelPos );
 
         // accessors to the format
-        bool HasFrameFormat() const;
-        virtual SwFrameFormat& GetFrameFormat() = 0;
-        virtual const SwFrameFormat& GetFrameFormat() const = 0;
+        virtual SwFrameFormat* GetFrameFormat() = 0;
+        virtual const SwFrameFormat* GetFrameFormat() const = 0;
 
         // accessors to the object area and its position
         virtual SwRect GetObjRect() const = 0;
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
index 666e6d29f250..d61492d43d61 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -767,7 +767,7 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, 
testAsCharImageDocModelFromViewPoint)
     const SwSortedObjs& rSortedObjs = *pTextFrame->GetDrawObjs();
     const SwAnchoredObject* pAnchoredObject = rSortedObjs[0];
     // The content points to the start node, the next node is the graphic node.
-    SwNodeIndex aGraphicNode = 
*pAnchoredObject->GetFrameFormat().GetContent().GetContentIdx();
+    SwNodeIndex aGraphicNode = 
*pAnchoredObject->GetFrameFormat()->GetContent().GetContentIdx();
     ++aGraphicNode;
     tools::Rectangle aFlyFrame = 
pAnchoredObject->GetDrawObj()->GetLastBoundRect();
     Point aDocPos = aFlyFrame.Center();
diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx
index 9a1d9b2fb7c5..e0b29b43fc54 100644
--- a/sw/qa/extras/layout/layout3.cxx
+++ b/sw/qa/extras/layout/layout3.cxx
@@ -1776,12 +1776,12 @@ static SwRect lcl_getVisibleFlyObjRect(SwWrtShell* 
pWrtShell)
     SwSortedObjs* pDrawObjs = pPage->GetDrawObjs();
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDrawObjs->size());
     SwAnchoredObject* pDrawObj = (*pDrawObjs)[0];
-    CPPUNIT_ASSERT_EQUAL(OUString("Rahmen8"), 
pDrawObj->GetFrameFormat().GetName());
+    CPPUNIT_ASSERT_EQUAL(OUString("Rahmen8"), 
pDrawObj->GetFrameFormat()->GetName());
     pPage = static_cast<SwPageFrame*>(pPage->GetNext());
     pDrawObjs = pPage->GetDrawObjs();
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDrawObjs->size());
     pDrawObj = (*pDrawObjs)[0];
-    CPPUNIT_ASSERT_EQUAL(OUString("Rahmen123"), 
pDrawObj->GetFrameFormat().GetName());
+    CPPUNIT_ASSERT_EQUAL(OUString("Rahmen123"), 
pDrawObj->GetFrameFormat()->GetName());
     SwRect aFlyRect = pDrawObj->GetObjRect();
     CPPUNIT_ASSERT(pPage->getFrameArea().Contains(aFlyRect));
     return aFlyRect;
diff --git a/sw/qa/extras/uiwriter/uiwriter5.cxx 
b/sw/qa/extras/uiwriter/uiwriter5.cxx
index 31aefb112837..c6353f980d29 100644
--- a/sw/qa/extras/uiwriter/uiwriter5.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter5.cxx
@@ -1291,8 +1291,8 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testImageCommentAtChar)
     // Get the image anchor doc model position.
     SwFlyFrame* pFly = pWrtShell->GetCurrFlyFrame(false);
     CPPUNIT_ASSERT(pFly);
-    SwFrameFormat& rFlyFormat = pFly->GetFrameFormat();
-    const SwPosition* pImageAnchor = rFlyFormat.GetAnchor().GetContentAnchor();
+    SwFrameFormat* pFlyFormat = pFly->GetFrameFormat();
+    const SwPosition* pImageAnchor = 
pFlyFormat->GetAnchor().GetContentAnchor();
     CPPUNIT_ASSERT(pImageAnchor);
 
     // Get the annotation mark doc model start.
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index 2ecea30dc3be..ebbefd9738bd 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -554,10 +554,8 @@ SwPosFlyFrames SwDoc::GetAllFlyFormats( const SwPaM* 
pCmpRange, bool bDrawAlso,
             for(SwAnchoredObject* pAnchoredObj : rObjs)
             {
                 SwFrameFormat *pFly;
-                if ( pAnchoredObj->DynCastFlyFrame() !=  nullptr )
-                    pFly = &(pAnchoredObj->GetFrameFormat());
-                else if ( bDrawAlso )
-                    pFly = &(pAnchoredObj->GetFrameFormat());
+                if (bDrawAlso || pAnchoredObj->DynCastFlyFrame())
+                    pFly = pAnchoredObj->GetFrameFormat();
                 else
                     continue;
 
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index 5c2147ed91a9..aac8f2393c61 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -493,7 +493,7 @@ sal_uInt32 SwFlyDrawContact::GetOrdNumForNewRef(const 
SwFlyFrame* pFly,
         {
             for (SwAnchoredObject const*const pAnchoredObj : *pObjs)
             {
-                if (&pAnchoredObj->GetFrameFormat() == pDrawFormat)
+                if (pAnchoredObj->GetFrameFormat() == pDrawFormat)
                 {
                     return pAnchoredObj->GetDrawObj()->GetOrdNum() + 1;
                 }
@@ -1235,7 +1235,7 @@ void SwDrawContact::Changed_( const SdrObject& rObj,
                 // #i31698# - determine layout direction
                 // via draw frame format.
                 SwFrameFormat::tLayoutDir eLayoutDir =
-                                
pAnchoredDrawObj->GetFrameFormat().GetLayoutDir();
+                                
pAnchoredDrawObj->GetFrameFormat()->GetLayoutDir();
                 // use geometry of drawing object
                 tools::Rectangle aObjRect( rObj.GetSnapRect() );
                 // If drawing object is a member of a group, the adjustment
@@ -1967,7 +1967,7 @@ void SwDrawContact::ConnectToLayout( const 
SwFormatAnchor* pAnch )
                                 {
                                     for (const SwAnchoredObject* pAnchoredObj 
: *pObjs)
                                     {
-                                        if (&pAnchoredObj->GetFrameFormat() == 
pFlyFormat)
+                                        if (pAnchoredObj->GetFrameFormat() == 
pFlyFormat)
                                         {
                                             SdrPage* pDrawPage = 
pAnchoredObj->GetDrawObj()->getSdrPageFromSdrObject();
                                             if (pDrawPage)
@@ -2359,7 +2359,7 @@ void SwDrawVirtObj::AddToDrawingPage(SwFrame const& 
rAnchorFrame)
         {
             for (SwAnchoredObject const*const pAnchoredObj : *pObjs)
             {
-                if (&pAnchoredObj->GetFrameFormat() == pFlyFormat)
+                if (pAnchoredObj->GetFrameFormat() == pFlyFormat)
                 {
                     assert(dynamic_cast<SwFlyFrame const*>(pAnchoredObj));
 
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx
index 2bd1acaf3db3..fe0db61925c4 100644
--- a/sw/source/core/draw/dview.cxx
+++ b/sw/source/core/draw/dview.cxx
@@ -550,7 +550,7 @@ void SwDrawView::ObjOrderChanged( SdrObject* pObj, size_t 
nOldPos,
     {
         size_t nTmpNewPos( nNewPos );
         const SwFrameFormat* pParentFrameFormat =
-                pParentAnchoredObj ? &(pParentAnchoredObj->GetFrameFormat()) : 
nullptr;
+                pParentAnchoredObj ? pParentAnchoredObj->GetFrameFormat() : 
nullptr;
         const SdrObject* pTmpObj = pDrawPage->GetObj( nNewPos + 1 );
         while ( pTmpObj )
         {
@@ -562,7 +562,7 @@ void SwDrawView::ObjOrderChanged( SdrObject* pObj, size_t 
nOldPos,
             const SwFlyFrame* pTmpParentObj = pTmpAnchorFrame
                                             ? pTmpAnchorFrame->FindFlyFrame() 
: nullptr;
             if ( pTmpParentObj &&
-                 &(pTmpParentObj->GetFrameFormat()) != pParentFrameFormat )
+                 pTmpParentObj->GetFrameFormat() != pParentFrameFormat )
             {
                 if ( bMovedForward )
                 {
diff --git a/sw/source/core/fields/postithelper.cxx 
b/sw/source/core/fields/postithelper.cxx
index a3f27be6f533..06fb3db7ef06 100644
--- a/sw/source/core/fields/postithelper.cxx
+++ b/sw/source/core/fields/postithelper.cxx
@@ -97,8 +97,8 @@ SwAnchoredObject* GetAnchoredObjectOfAnnotationMark(const 
sw::mark::IMark& rAnno
 
     for (SwAnchoredObject* pObject : *pAnchored)
     {
-        SwFrameFormat& rFrameFormat = pObject->GetFrameFormat();
-        const SwPosition* pFrameAnchor = 
rFrameFormat.GetAnchor().GetContentAnchor();
+        SwFrameFormat* pFrameFormat = pObject->GetFrameFormat();
+        const SwPosition* pFrameAnchor = 
pFrameFormat->GetAnchor().GetContentAnchor();
         if (!pFrameAnchor)
         {
             continue;
diff --git a/sw/source/core/frmedt/fefly1.cxx b/sw/source/core/frmedt/fefly1.cxx
index 9e2fedcc3827..93ad4212cf65 100644
--- a/sw/source/core/frmedt/fefly1.cxx
+++ b/sw/source/core/frmedt/fefly1.cxx
@@ -286,8 +286,8 @@ void SwFEShell::UnfloatFlyFrame()
         return;
     }
 
-    SwFrameFormat& rFlyFormat = pFly->GetFrameFormat();
-    const SwFormatContent& rContent = rFlyFormat.GetContent();
+    SwFrameFormat* pFlyFormat = pFly->GetFrameFormat();
+    const SwFormatContent& rContent = pFlyFormat->GetContent();
     const SwNodeIndex* pFlyStart = rContent.GetContentIdx();
     if (!pFlyStart)
     {
@@ -315,7 +315,7 @@ void SwFEShell::UnfloatFlyFrame()
     }
 
     SwNodeRange aRange(pFlyStart->GetNode(), SwNodeOffset(1), *pFlyEnd, 
SwNodeOffset(-1));
-    const SwFormatAnchor& rAnchor = rFlyFormat.GetAnchor();
+    const SwFormatAnchor& rAnchor = pFlyFormat->GetAnchor();
     SwNode* pAnchor = rAnchor.GetAnchorNode();
     if (!pAnchor)
     {
@@ -327,8 +327,8 @@ void SwFEShell::UnfloatFlyFrame()
     rIDCO.MoveNodeRange(aRange, aInsertPos.GetNode(), 
SwMoveFlags::CREATEUNDOOBJ);
 
     // Remove the fly frame frame.
-    IDocumentLayoutAccess& rIDLA = rFlyFormat.getIDocumentLayoutAccess();
-    rIDLA.DelLayoutFormat(&rFlyFormat);
+    IDocumentLayoutAccess& rIDLA = pFlyFormat->getIDocumentLayoutAccess();
+    rIDLA.DelLayoutFormat(pFlyFormat);
 }
 
 // Get selected fly
@@ -496,8 +496,8 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, bool 
bMoveIt )
 
     // #i28701#
     SwAnchoredObject* pAnchoredObj = ::GetUserCall( pObj )->GetAnchoredObj( 
pObj );
-    SwFrameFormat& rFormat = pAnchoredObj->GetFrameFormat();
-    const RndStdIds nAnchorId = rFormat.GetAnchor().GetAnchorId();
+    SwFrameFormat* pFormat = pAnchoredObj->GetFrameFormat();
+    const RndStdIds nAnchorId = pFormat->GetAnchor().GetAnchorId();
 
     if ( RndStdIds::FLY_AS_CHAR == nAnchorId )
         return aRet;
@@ -505,9 +505,9 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, bool 
bMoveIt )
     bool bFlyFrame = dynamic_cast<SwVirtFlyDrawObj *>(pObj) != nullptr;
 
     bool bTextBox = false;
-    if (rFormat.Which() == RES_DRAWFRMFMT)
+    if (pFormat->Which() == RES_DRAWFRMFMT)
     {
-        bTextBox = SwTextBoxHelper::isTextBox(&rFormat, RES_DRAWFRMFMT, pObj);
+        bTextBox = SwTextBoxHelper::isTextBox(pFormat, RES_DRAWFRMFMT, pObj);
     }
 
     SwFlyFrame* pFly = nullptr;
@@ -534,7 +534,7 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, bool 
bMoveIt )
     {
         auto pFlyFormat
             = dynamic_cast<const 
SwFlyFrameFormat*>(SwTextBoxHelper::getOtherTextBoxFormat(
-                &rFormat, RES_DRAWFRMFMT, pObj));
+                pFormat, RES_DRAWFRMFMT, pObj));
         if (pFlyFormat)
         {
             pFly = pFlyFormat->GetFrame();
@@ -608,7 +608,7 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, bool 
bMoveIt )
 
             if ( bMoveIt || (nAnchorId == RndStdIds::FLY_AT_CHAR) )
             {
-                SwFormatAnchor aAnch( rFormat.GetAnchor() );
+                SwFormatAnchor aAnch( pFormat->GetAnchor() );
                 switch ( nAnchorId )
                 {
                     case RndStdIds::FLY_AT_PARA:
@@ -665,24 +665,24 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, 
bool bMoveIt )
                     // anchor attribute is change and re-create them 
afterwards.
                     {
                         std::unique_ptr<SwHandleAnchorNodeChg> 
pHandleAnchorNodeChg;
-                        SwFlyFrameFormat* pFlyFrameFormat( 
dynamic_cast<SwFlyFrameFormat*>(&rFormat) );
+                        SwFlyFrameFormat* pFlyFrameFormat( 
dynamic_cast<SwFlyFrameFormat*>(pFormat) );
                         if ( pFlyFrameFormat )
                         {
                             pHandleAnchorNodeChg.reset(
                                 new SwHandleAnchorNodeChg( *pFlyFrameFormat, 
aAnch ));
                         }
-                        rFormat.GetDoc()->SetAttr( aAnch, rFormat );
-                        if (SwTextBoxHelper::getOtherTextBoxFormat(&rFormat, 
RES_DRAWFRMFMT,
+                        pFormat->GetDoc()->SetAttr( aAnch, *pFormat );
+                        if (SwTextBoxHelper::getOtherTextBoxFormat(pFormat, 
RES_DRAWFRMFMT,
                             pObj))
                         {
                             if (SdrObjList* pObjList = 
pObj->getChildrenOfSdrObject())
                             {
                                 for (const rtl::Reference<SdrObject>& pChild : 
*pObjList)
-                                    SwTextBoxHelper::changeAnchor(&rFormat, 
pChild.get());
+                                    SwTextBoxHelper::changeAnchor(pFormat, 
pChild.get());
                             }
                             else
                                 SwTextBoxHelper::syncFlyFrameAttr(
-                                    rFormat, rFormat.GetAttrSet(), pObj);
+                                    *pFormat, pFormat->GetAttrSet(), pObj);
                         }
                     }
                     // #i28701# - no call of method
diff --git a/sw/source/core/frmedt/feshview.cxx 
b/sw/source/core/frmedt/feshview.cxx
index 30e448dec8e3..9154758364fb 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -392,8 +392,8 @@ bool SwFEShell::MoveAnchor( SwMove nDir )
         SwFrame* pNew = pOld;
         // #i28701#
         SwAnchoredObject* pAnchoredObj = ::GetUserCall( pObj 
)->GetAnchoredObj( pObj );
-        SwFrameFormat& rFormat = pAnchoredObj->GetFrameFormat();
-        SwFormatAnchor aAnch( rFormat.GetAnchor() );
+        SwFrameFormat* pFormat = pAnchoredObj->GetFrameFormat();
+        SwFormatAnchor aAnch( pFormat->GetAnchor() );
         RndStdIds nAnchorId = aAnch.GetAnchorId();
         if ( RndStdIds::FLY_AS_CHAR == nAnchorId )
             return false;
@@ -582,13 +582,13 @@ bool SwFEShell::MoveAnchor( SwMove nDir )
             // anchor attribute is change and re-create them afterwards.
             {
                 std::unique_ptr<SwHandleAnchorNodeChg> pHandleAnchorNodeChg;
-                SwFlyFrameFormat* pFlyFrameFormat( 
dynamic_cast<SwFlyFrameFormat*>(&rFormat) );
+                SwFlyFrameFormat* pFlyFrameFormat( 
dynamic_cast<SwFlyFrameFormat*>(pFormat) );
                 if ( pFlyFrameFormat )
                 {
                     pHandleAnchorNodeChg.reset(
                         new SwHandleAnchorNodeChg( *pFlyFrameFormat, aAnch ));
                 }
-                rFormat.GetDoc()->SetAttr( aAnch, rFormat );
+                pFormat->GetDoc()->SetAttr( aAnch, *pFormat );
             }
             // #i28701# - no call of method
             // <CheckCharRectAndTopOfLine()> for to-character anchored
@@ -1317,8 +1317,8 @@ bool SwFEShell::ShouldObjectBeSelected(const Point& rPt)
                 if ( pObj->GetLayer() == rIDDMA.GetHellId() )
                 {
                     const SwAnchoredObject* pAnchoredObj = ::GetUserCall( pObj 
)->GetAnchoredObj( pObj );
-                    const SwFrameFormat& rFormat = 
pAnchoredObj->GetFrameFormat();
-                    const SwFormatSurround& rSurround = rFormat.GetSurround();
+                    const SwFrameFormat* pFormat = 
pAnchoredObj->GetFrameFormat();
+                    const SwFormatSurround& rSurround = pFormat->GetSurround();
                     if ( rSurround.GetSurround() == 
css::text::WrapTextMode_THROUGH )
                     {
                         bObjInBackground = true;
diff --git a/sw/source/core/frmedt/fews.cxx b/sw/source/core/frmedt/fews.cxx
index bce8e2bb9747..539f48531353 100644
--- a/sw/source/core/frmedt/fews.cxx
+++ b/sw/source/core/frmedt/fews.cxx
@@ -464,12 +464,12 @@ void SwFEShell::InsertLabel( const SwLabelType eType, 
const OUString &rText, con
                 // This table is in a split fly, but we will insert a label, 
which means this is not
                 // a floating table anymore, disable the "can split" bit, 
it'll be hidden on the UI
                 // anyway.
-                SwFrameFormat& rFlyFormat = pFly->GetFrameFormat();
+                SwFrameFormat* pFormat = pFly->GetFrameFormat();
                 SfxItemSetFixed<RES_FLY_SPLIT, RES_FLY_SPLIT> 
aSet(GetDoc()->GetAttrPool());
                 SwFormatFlySplit aSplit(false);
                 aSet.Put(aSplit);
                 // SwUndoFormatAttr is created for us.
-                GetDoc()->SetFlyFrameAttr(rFlyFormat, aSet);
+                GetDoc()->SetFlyFrameAttr(*pFormat, aSet);
             }
         }
         break;
diff --git a/sw/source/core/inc/flyfrm.hxx b/sw/source/core/inc/flyfrm.hxx
index d1f14591bc2f..dfbd7e8daf58 100644
--- a/sw/source/core/inc/flyfrm.hxx
+++ b/sw/source/core/inc/flyfrm.hxx
@@ -266,8 +266,8 @@ public:
     virtual void InvalidateObjPos() override;
     virtual void RegisterAtPage(SwPageFrame&) override;
 
-    virtual SwFrameFormat& GetFrameFormat() override;
-    virtual const SwFrameFormat& GetFrameFormat() const override;
+    virtual SwFrameFormat* GetFrameFormat() override;
+    virtual const SwFrameFormat* GetFrameFormat() const override;
 
     virtual SwRect GetObjRect() const override;
 
diff --git a/sw/source/core/layout/anchoreddrawobject.cxx 
b/sw/source/core/layout/anchoreddrawobject.cxx
index 6dc6cac5d1b2..77a19aa8295a 100644
--- a/sw/source/core/layout/anchoreddrawobject.cxx
+++ b/sw/source/core/layout/anchoreddrawobject.cxx
@@ -214,13 +214,13 @@ SwAnchoredDrawObject::~SwAnchoredDrawObject()
 // --> #i62875#
 void SwAnchoredDrawObject::UpdateLayoutDir()
 {
-    SwFrameFormat::tLayoutDir nOldLayoutDir( GetFrameFormat().GetLayoutDir() );
+    SwFrameFormat::tLayoutDir nOldLayoutDir( GetFrameFormat()->GetLayoutDir() 
);
 
     SwAnchoredObject::UpdateLayoutDir();
 
     if ( !NotYetPositioned() &&
-         GetFrameFormat().GetLayoutDir() != nOldLayoutDir &&
-         
GetFrameFormat().GetDoc()->GetDocumentSettingManager().get(DocumentSettingId::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE)
 &&
+         GetFrameFormat()->GetLayoutDir() != nOldLayoutDir &&
+         
GetFrameFormat()->GetDoc()->GetDocumentSettingManager().get(DocumentSettingId::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE)
 &&
          !IsOutsidePage() )
     {
         mbCaptureAfterLayoutDirChange = true;
@@ -284,7 +284,7 @@ void SwAnchoredDrawObject::MakeObjPos()
         // #i44334#, #i44681# - check, if positioning
         // attributes already have been set.
         if ( dynamic_cast< const SwDrawVirtObj* >(GetDrawObj()) ==  nullptr &&
-             !static_cast<SwDrawFrameFormat&>(GetFrameFormat()).IsPosAttrSet() 
)
+             
!static_cast<SwDrawFrameFormat*>(GetFrameFormat())->IsPosAttrSet() )
         {
             SetPositioningAttr();
         }
@@ -395,7 +395,7 @@ void SwAnchoredDrawObject::MakeObjPosAnchoredAtPara()
 
     // Format of anchor is needed for (vertical) fly offsets, otherwise the
     // lack of fly portions will result in an incorrect 0 offset.
-    bool bAddVerticalFlyOffsets = 
GetFrameFormat().getIDocumentSettingAccess().get(
+    bool bAddVerticalFlyOffsets = 
GetFrameFormat()->getIDocumentSettingAccess().get(
         DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS);
     bool bFormatAnchorOnce = !bJoinLocked && bAddVerticalFlyOffsets;
 
@@ -518,11 +518,12 @@ void SwAnchoredDrawObject::SetDrawObjAnchor()
         // correct object position, caused by setting new anchor position
         DrawObj()->Move( aMove );
         // Sync textbox if it wasn't done at move
-        if ( SwTextBoxHelper::isTextBox(&GetFrameFormat(), RES_DRAWFRMFMT) && 
GetFrameFormat().GetDoc() &&
-            
GetFrameFormat().GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell() &&
-            
GetFrameFormat().GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell()->IsInConstructor())
+        SwFrameFormat* pObjFormat = GetFrameFormat();
+        if ( SwTextBoxHelper::isTextBox(pObjFormat, RES_DRAWFRMFMT) && 
pObjFormat->GetDoc() &&
+            
pObjFormat->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell() &&
+            
pObjFormat->GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell()->IsInConstructor())
         {
-            SwTextBoxHelper::changeAnchor(&GetFrameFormat(), 
GetFrameFormat().FindRealSdrObject());
+            SwTextBoxHelper::changeAnchor(pObjFormat, 
pObjFormat->FindRealSdrObject());
         }
         // --> #i70122# - missing invalidation
         InvalidateObjRectWithSpaces();
@@ -543,7 +544,7 @@ void SwAnchoredDrawObject::InvalidatePage_( SwPageFrame* 
_pPageFrame )
 
     // --> #i35007# - correct invalidation for as-character
     // anchored objects.
-    if ( GetFrameFormat().GetAnchor().GetAnchorId() == RndStdIds::FLY_AS_CHAR )
+    if ( GetFrameFormat()->GetAnchor().GetAnchorId() == RndStdIds::FLY_AS_CHAR 
)
     {
         _pPageFrame->InvalidateFlyInCnt();
     }
@@ -582,13 +583,14 @@ void SwAnchoredDrawObject::InvalidateObjPos()
     // anchored object, because its positioned by the format of its anchor 
frame.
     // --> #i44559# - assure, that text hint is already
     // existing in the text frame
+    const SwFrameFormat* pObjFormat = GetFrameFormat();
     if ( GetAnchorFrame()->DynCastTextFrame() != nullptr &&
-         (GetFrameFormat().GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AS_CHAR) )
+         (pObjFormat->GetAnchor().GetAnchorId() == RndStdIds::FLY_AS_CHAR) )
     {
         SwTextFrame* pAnchorTextFrame( 
static_cast<SwTextFrame*>(AnchorFrame()) );
-        if (pAnchorTextFrame->CalcFlyPos(&GetFrameFormat()) != 
TextFrameIndex(COMPLETE_STRING))
+        if (pAnchorTextFrame->CalcFlyPos(pObjFormat) != 
TextFrameIndex(COMPLETE_STRING))
         {
-            AnchorFrame()->Prepare( PrepareHint::FlyFrameAttributesChanged, 
&GetFrameFormat() );
+            AnchorFrame()->Prepare(PrepareHint::FlyFrameAttributesChanged, 
pObjFormat);
         }
     }
 
@@ -615,15 +617,15 @@ void SwAnchoredDrawObject::InvalidateObjPos()
     }
 }
 
-SwFrameFormat& SwAnchoredDrawObject::GetFrameFormat()
+SwFrameFormat* SwAnchoredDrawObject::GetFrameFormat()
 {
     
assert(static_cast<SwDrawContact*>(GetUserCall(GetDrawObj()))->GetFormat());
-    return 
*(static_cast<SwDrawContact*>(GetUserCall(GetDrawObj()))->GetFormat());
+    return static_cast<SwDrawContact*>(GetUserCall(GetDrawObj()))->GetFormat();
 }
-const SwFrameFormat& SwAnchoredDrawObject::GetFrameFormat() const
+const SwFrameFormat* SwAnchoredDrawObject::GetFrameFormat() const
 {
     
assert(static_cast<SwDrawContact*>(GetUserCall(GetDrawObj()))->GetFormat());
-    return 
*(static_cast<SwDrawContact*>(GetUserCall(GetDrawObj()))->GetFormat());
+    return static_cast<SwDrawContact*>(GetUserCall(GetDrawObj()))->GetFormat();
 }
 
 SwRect SwAnchoredDrawObject::GetObjRect() const
@@ -807,10 +809,11 @@ void SwAnchoredDrawObject::AdjustPositioningAttr( const 
SwFrame* _pNewAnchorFram
 
     SwFormatHoriOrient hori(nHoriRelPos, text::HoriOrientation::NONE, 
text::RelOrientation::FRAME);
     SwFormatVertOrient vert(nVertRelPos, text::VertOrientation::NONE, 
text::RelOrientation::FRAME);
-    SfxItemSetFixed<RES_VERT_ORIENT, RES_HORI_ORIENT> 
items(GetFrameFormat().GetDoc()->GetAttrPool());
+    SwFrameFormat* pObjFormat = GetFrameFormat();
+    SfxItemSetFixed<RES_VERT_ORIENT, RES_HORI_ORIENT> 
items(pObjFormat->GetDoc()->GetAttrPool());
     items.Put(hori);
     items.Put(vert);
-    GetFrameFormat().GetDoc()->SetAttr(items, GetFrameFormat());
+    pObjFormat->GetDoc()->SetAttr(items, *pObjFormat);
 }
 
 // --> #i34748# - change return type.
@@ -845,6 +848,7 @@ void SwAnchoredDrawObject::SetPositioningAttr()
     SwDrawContact* pDrawContact =
                         static_cast<SwDrawContact*>(GetUserCall( GetDrawObj() 
));
 
+    SwFrameFormat* pObjFormat = GetFrameFormat();
     if ( !pDrawContact->ObjAnchoredAsChar() )
     {
         SwRect aObjRect( GetObjRect() );
@@ -853,10 +857,10 @@ void SwAnchoredDrawObject::SetPositioningAttr()
         SwTwips nVertPos = aObjRect.Top();
         // #i44334#, #i44681#
         // perform conversion only if position is in 
horizontal-left-to-right-layout.
-        if ( GetFrameFormat().GetPositionLayoutDir() ==
+        if (pObjFormat->GetPositionLayoutDir() ==
                 text::PositionLayoutDir::PositionInHoriL2R )
         {
-            SwFrameFormat::tLayoutDir eLayoutDir = 
GetFrameFormat().GetLayoutDir();
+            SwFrameFormat::tLayoutDir eLayoutDir = pObjFormat->GetLayoutDir();
             switch ( eLayoutDir )
             {
                 case SwFrameFormat::HORI_L2R:
@@ -885,28 +889,28 @@ void SwAnchoredDrawObject::SetPositioningAttr()
         // --> #i71182#
         // only change position - do not lose other attributes
 
-        SwFormatHoriOrient aHori( GetFrameFormat().GetHoriOrient() );
+        SwFormatHoriOrient aHori(pObjFormat->GetHoriOrient());
         if (nHoriPos != aHori.GetPos()) {
             aHori.SetPos( nHoriPos );
             InvalidateObjRectWithSpaces();
-            GetFrameFormat().SetFormatAttr( aHori );
+            pObjFormat->SetFormatAttr(aHori);
         }
 
-        SwFormatVertOrient aVert( GetFrameFormat().GetVertOrient() );
+        SwFormatVertOrient aVert(pObjFormat->GetVertOrient());
         if (nVertPos != aVert.GetPos()) {
             aVert.SetPos( nVertPos );
             InvalidateObjRectWithSpaces();
-            GetFrameFormat().SetFormatAttr( aVert );
+            pObjFormat->SetFormatAttr(aVert);
         }
 
         // --> #i36010# - set layout direction of the position
-        GetFrameFormat().SetPositionLayoutDir(
+        pObjFormat->SetPositionLayoutDir(
             text::PositionLayoutDir::PositionInLayoutDirOfAnchor );
     }
     // --> #i65798# - also for as-character anchored objects
     // --> #i45952# - indicate that position
     // attributes are set now.
-    static_cast<SwDrawFrameFormat&>(GetFrameFormat()).PosAttrSet();
+    static_cast<SwDrawFrameFormat*>(pObjFormat)->PosAttrSet();
 }
 
 void SwAnchoredDrawObject::NotifyBackground( SwPageFrame* _pPageFrame,
diff --git a/sw/source/core/layout/anchoredobject.cxx 
b/sw/source/core/layout/anchoredobject.cxx
index fe959a688723..a74438afb361 100644
--- a/sw/source/core/layout/anchoredobject.cxx
+++ b/sw/source/core/layout/anchoredobject.cxx
@@ -99,8 +99,6 @@ void SwAnchoredObject::ClearVertPosOrientFrame()
     }
 }
 
-bool SwAnchoredObject::HasFrameFormat() const { return 
GetUserCall(GetDrawObj()); }
-
 SwAnchoredObject::~SwAnchoredObject()
 {
     ClearVertPosOrientFrame();
@@ -218,7 +216,7 @@ void SwAnchoredObject::CheckCharRectAndTopOfLine(
          GetAnchorFrame()->IsTextFrame()) )
         return;
 
-    const SwFormatAnchor& rAnch = GetFrameFormat().GetAnchor();
+    const SwFormatAnchor& rAnch = GetFrameFormat()->GetAnchor();
     if ( !((rAnch.GetAnchorId() == RndStdIds::FLY_AT_CHAR) &&
          rAnch.GetAnchorNode()) )
         return;
@@ -265,8 +263,9 @@ void SwAnchoredObject::CheckCharRect( const SwFormatAnchor& 
_rAnch,
     {
         SwRectFnSet aRectFnSet(&_rAnchorCharFrame);
         // determine positioning and alignment
-        SwFormatVertOrient aVert( GetFrameFormat().GetVertOrient() );
-        SwFormatHoriOrient aHori( GetFrameFormat().GetHoriOrient() );
+        const SwFrameFormat* pObjFormat = GetFrameFormat();
+        SwFormatVertOrient aVert( pObjFormat->GetVertOrient() );
+        SwFormatHoriOrient aHori( pObjFormat->GetHoriOrient() );
         // check for anchor character rectangle changes for certain
         // positionings and alignments
         // add condition to invalidate position,
@@ -319,7 +318,7 @@ void SwAnchoredObject::CheckTopOfLine( const 
SwFormatAnchor& _rAnch,
         return;
 
     // check alignment for invalidation of position
-    if ( GetFrameFormat().GetVertOrient().GetRelationOrient() == 
text::RelOrientation::TEXT_LINE )
+    if ( GetFrameFormat()->GetVertOrient().GetRelationOrient() == 
text::RelOrientation::TEXT_LINE )
     {
         // #i26945#, #i35911# - unlock position of
         // anchored object, if it isn't registered at the page,
@@ -376,7 +375,7 @@ void SwAnchoredObject::UpdateLayoutDir()
             nLayoutDir = SwFrameFormat::HORI_R2L;
         }
     }
-    GetFrameFormat().SetLayoutDir( nLayoutDir );
+    GetFrameFormat()->SetLayoutDir( nLayoutDir );
 }
 
 /** method to perform necessary invalidations for the positioning of
@@ -411,10 +410,8 @@ bool SwAnchoredObject::ConsiderObjWrapInfluenceOnObjPos() 
const
 {
     bool bRet( false );
 
-    if (HasFrameFormat())
+    if (const SwFrameFormat* pObjFormat = GetFrameFormat())
     {
-        const SwFrameFormat& rObjFormat = GetFrameFormat();
-
         // --> #i3317# - add condition <IsTmpConsiderWrapInfluence()>
         // --> #i55204#
         // - correction: wrapping style influence has been considered, if 
condition
@@ -424,13 +421,13 @@ bool SwAnchoredObject::ConsiderObjWrapInfluenceOnObjPos() 
const
         {
             bRet = true;
         }
-        else if (rObjFormat.getIDocumentSettingAccess().get(
+        else if (pObjFormat->getIDocumentSettingAccess().get(
                      DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION))
         {
-            const SwFormatAnchor& rAnchor = rObjFormat.GetAnchor();
+            const SwFormatAnchor& rAnchor = pObjFormat->GetAnchor();
             if (((rAnchor.GetAnchorId() == RndStdIds::FLY_AT_CHAR)
                  || (rAnchor.GetAnchorId() == RndStdIds::FLY_AT_PARA))
-                && rObjFormat.GetSurround().GetSurround() != 
css::text::WrapTextMode_THROUGH)
+                && pObjFormat->GetSurround().GetSurround() != 
css::text::WrapTextMode_THROUGH)
             {
                 // --> #i34520# - text also wraps around anchored
                 // objects in the layer Hell - see the text formatting.
@@ -574,11 +571,10 @@ const SwRect& SwAnchoredObject::GetObjRectWithSpaces() 
const
     if ( !mbObjRectWithSpacesValid )
     {
         maObjRectWithSpaces = GetObjBoundRect();
-        if (HasFrameFormat())
+        if (const SwFrameFormat* pFormat = GetFrameFormat())
         {
-            const SwFrameFormat& rFormat = GetFrameFormat();
-            const SvxULSpaceItem& rUL = rFormat.GetULSpace();
-            const SvxLRSpaceItem& rLR = rFormat.GetLRSpace();
+            const SvxULSpaceItem& rUL = pFormat->GetULSpace();
+            const SvxLRSpaceItem& rLR = pFormat->GetLRSpace();
             {
                 maObjRectWithSpaces.Top(std::max(
                     maObjRectWithSpaces.Top() - tools::Long(rUL.GetUpper()), 
tools::Long(0)));
@@ -629,7 +625,7 @@ void SwAnchoredObject::UpdateObjInSortedList()
     if(!GetAnchorFrame())
         return;
 
-    if ( 
GetFrameFormat().getIDocumentSettingAccess().get(DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION)
 )
+    if ( 
GetFrameFormat()->getIDocumentSettingAccess().get(DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION)
 )
     {
         // invalidate position of all anchored objects at anchor frame
         if ( GetAnchorFrame()->GetDrawObjs() )
@@ -664,7 +660,7 @@ void SwAnchoredObject::UpdateObjInSortedList()
     // update its position in the sorted object list of its page frame
     // note: as-character anchored object aren't registered at a page frame
     if ( GetPageFrame() && GetPageFrame()->GetSortedObjs() &&
-        GetFrameFormat().GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR )
+        GetFrameFormat()->GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR )
     {
         GetPageFrame()->GetSortedObjs()->Update( *this );
     }
@@ -721,9 +717,9 @@ SwTextFrame* SwAnchoredObject::FindAnchorCharFrame()
     // --> #i44339# - check, if anchor frame exists.
     if ( mpAnchorFrame )
     {
-        if (HasFrameFormat())
+        if (const SwFrameFormat* pFormat = GetFrameFormat())
         {
-            const SwFormatAnchor& rAnch = GetFrameFormat().GetAnchor();
+            const SwFormatAnchor& rAnch = pFormat->GetAnchor();
             if ((rAnch.GetAnchorId() == RndStdIds::FLY_AT_CHAR)
                 || (rAnch.GetAnchorId() == RndStdIds::FLY_AS_CHAR))
             {
@@ -774,8 +770,8 @@ SwTextFrame* SwAnchoredObject::FindAnchorCharFrame()
 */
 bool SwAnchoredObject::IsFormatPossible() const
 {
-    if (HasFrameFormat())
-        return 
GetFrameFormat().GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId( 
GetDrawObj()->GetLayer() );
+    if (const SwFrameFormat* pFormat = GetFrameFormat())
+        return 
pFormat->GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId( 
GetDrawObj()->GetLayer() );
     return false;
 }
 
@@ -795,7 +791,7 @@ void SwAnchoredObject::SetTmpConsiderWrapInfluence( const 
bool _bTmpConsiderWrap
     // --> #i35911#
     if ( mbTmpConsiderWrapInfluence )
     {
-        SwLayouter::InsertObjForTmpConsiderWrapInfluence( 
*(GetFrameFormat().GetDoc()),
+        SwLayouter::InsertObjForTmpConsiderWrapInfluence( 
*(GetFrameFormat()->GetDoc()),
                                                           *this );
     }
 }
@@ -805,7 +801,7 @@ void SwAnchoredObject::ClearTmpConsiderWrapInfluence()
     mbTmpConsiderWrapInfluence = false;
     mbClearedEnvironment = false;
     SetClearedEnvironment( false );
-    SwLayouter::RemoveObjForTmpConsiderWrapInfluence( 
*(GetFrameFormat().GetDoc()),
+    SwLayouter::RemoveObjForTmpConsiderWrapInfluence( 
*(GetFrameFormat()->GetDoc()),
                                                       *this );
 }
 void SwAnchoredObject::SetTmpConsiderWrapInfluenceOfOtherObjs()
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index 2a1ab80763d8..5e95d1aaf787 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -3121,7 +3121,7 @@ void SwFlyFrameFormat::MakeFrames()
                 // #i28701# - consider changed type of
                 // <SwSortedObjs> entries.
                 if( pObj->DynCastFlyFrame() !=  nullptr &&
-                    (&pObj->GetFrameFormat()) == this )
+                    (pObj->GetFrameFormat()) == this )
                 {
                     bAdd = false;
                     break;
diff --git a/sw/source/core/layout/calcmove.cxx 
b/sw/source/core/layout/calcmove.cxx
index 4d4b2de28994..c2bbdd8904f8 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -1131,18 +1131,18 @@ void SwContentFrame::MakePrtArea( const SwBorderAttrs 
&rAttrs )
                 // #i28701# - consider changed type of
                 // <SwSortedObjs> entries
                 SwAnchoredObject* pObj = (*GetDrawObjs())[i];
-                const SwFrameFormat& rFormat = pObj->GetFrameFormat();
+                const SwFrameFormat* pFormat = pObj->GetFrameFormat();
                 const bool bFly = pObj->DynCastFlyFrame() !=  nullptr;
                 if ((bFly && (FAR_AWAY == pObj->GetObjRect().Width()))
-                    || rFormat.GetFrameSize().GetWidthPercent())
+                    || pFormat->GetFrameSize().GetWidthPercent())
                 {
                     continue;
                 }
 
-                if ( RndStdIds::FLY_AS_CHAR == 
rFormat.GetAnchor().GetAnchorId() )
+                if ( RndStdIds::FLY_AS_CHAR == 
pFormat->GetAnchor().GetAnchorId() )
                 {
                     nMinWidth = std::max( nMinWidth,
-                                     bFly ? rFormat.GetFrameSize().GetWidth()
+                                     bFly ? pFormat->GetFrameSize().GetWidth()
                                           : pObj->GetObjRect().Width() );
                 }
             }
diff --git a/sw/source/core/layout/flowfrm.cxx 
b/sw/source/core/layout/flowfrm.cxx
index 981736de7004..da509e2a6bea 100644
--- a/sw/source/core/layout/flowfrm.cxx
+++ b/sw/source/core/layout/flowfrm.cxx
@@ -217,7 +217,7 @@ bool IsNextContentFullPage(const SwFrame& rThis)
             continue;
         }
 
-        const SwFormatSurround& rSurround = 
pDrawObj->GetFrameFormat().GetSurround();
+        const SwFormatSurround& rSurround = 
pDrawObj->GetFrameFormat()->GetSurround();
         if (rSurround.GetSurround() != text::WrapTextMode_NONE)
         {
             continue;
@@ -379,10 +379,10 @@ sal_uInt8 SwFlowFrame::BwdMoveNecessary( const 
SwPageFrame *pPage, const SwRect
         {
 
             SwAnchoredObject* pObj = rObjs[i];
-            const SwFrameFormat& rFormat = pObj->GetFrameFormat();
+            const SwFrameFormat* pFormat = pObj->GetFrameFormat();
             const SwRect aRect( pObj->GetObjRect() );
             if ( aRect.Overlaps( rRect ) &&
-                 rFormat.GetSurround().GetSurround() != 
css::text::WrapTextMode_THROUGH )
+                 pFormat->GetSurround().GetSurround() != 
css::text::WrapTextMode_THROUGH )
             {
                 if( m_rThis.IsLayoutFrame() && //Fly Lower of This?
                     Is_Lower_Of( &m_rThis, pObj->GetDrawObj() ) )
@@ -404,10 +404,10 @@ sal_uInt8 SwFlowFrame::BwdMoveNecessary( const 
SwPageFrame *pPage, const SwRect
                 // flow, because then I wouldn't evade it.
                 if ( ::IsFrameInSameContext( pAnchor, &m_rThis ) )
                 {
-                    if ( rFormat.GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AT_PARA )
+                    if ( pFormat->GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AT_PARA )
                     {
                         // The index of the other one can be retrieved using 
the anchor attribute.
-                        SwNodeOffset nTmpIndex = 
rFormat.GetAnchor().GetAnchorNode()->GetIndex();
+                        SwNodeOffset nTmpIndex = 
pFormat->GetAnchor().GetAnchorNode()->GetIndex();
                         // Now we're going to check whether the current 
paragraph before
                         // the anchor of the displacing object sits in the 
text. If this
                         // is the case, we don't try to evade it.
@@ -1224,13 +1224,13 @@ bool SwFlowFrame::IsPrevObjMove() const
         // text flow to the next layout frame
         for (SwAnchoredObject* pObj : *pPre->GetDrawObjs())
         {
-
+            const SwFrameFormat* pObjFormat = pObj->GetFrameFormat();
             // Do not consider hidden objects
             // i#26945 - do not consider object, which
             // doesn't follow the text flow.
-            if ( 
pObj->GetFrameFormat().GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId(
+            if ( 
pObjFormat->GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId(
                                             pObj->GetDrawObj()->GetLayer() ) &&
-                 pObj->GetFrameFormat().GetFollowTextFlow().GetValue() )
+                 pObjFormat->GetFollowTextFlow().GetValue() )
             {
                 const SwLayoutFrame* pVertPosOrientFrame = 
pObj->GetVertPosOrientFrame();
                 if ( pVertPosOrientFrame &&
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index d23c30a0aaf1..6e7e6235dcb3 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -99,10 +99,10 @@ SwTwips GetFlyAnchorBottom(SwFlyFrame* pFly, const SwFrame& 
rAnchor)
         return 0;
     }
 
-    const auto& rFrameFormat = pFly->GetFrameFormat();
-    const IDocumentSettingAccess& rIDSA = 
rFrameFormat.getIDocumentSettingAccess();
+    const auto* pFrameFormat = pFly->GetFrameFormat();
+    const IDocumentSettingAccess& rIDSA = 
pFrameFormat->getIDocumentSettingAccess();
     // Allow overlap with bottom margin / footer only in case we're relative 
to the page frame.
-    bool bVertPageFrame = rFrameFormat.GetVertOrient().GetRelationOrient() == 
text::RelOrientation::PAGE_FRAME;
+    bool bVertPageFrame = pFrameFormat->GetVertOrient().GetRelationOrient() == 
text::RelOrientation::PAGE_FRAME;
     bool bInBody = rAnchor.IsInDocBody();
     bool bLegacy = rIDSA.get(DocumentSettingId::TAB_OVER_MARGIN) && 
(bVertPageFrame || !bInBody);
     if (bLegacy)
@@ -1271,7 +1271,7 @@ void SwFlyFrame::ChgRelPos( const Point &rNewPos )
     const SwTextFrame *pAutoFrame = nullptr;
     // #i34948# - handle also at-page and at-fly anchored
     // Writer fly frames
-    const RndStdIds eAnchorType = GetFrameFormat().GetAnchor().GetAnchorId();
+    const RndStdIds eAnchorType = GetFrameFormat()->GetAnchor().GetAnchorId();
     if ( eAnchorType == RndStdIds::FLY_AT_PAGE )
     {
         aVert.SetVertOrient( text::VertOrientation::NONE );
@@ -1759,13 +1759,13 @@ void CalcContent( SwLayoutFrame *pLay, bool bNoColl )
                             {
                                 OSL_FAIL( "::CalcContent(..) - loop detected, 
perform attribute changes to avoid the loop" );
                                 // Prevent oscillation
-                                SwFrameFormat& rFormat = 
pAnchoredObj->GetFrameFormat();
-                                SwFormatSurround aAttr( rFormat.GetSurround() 
);
+                                SwFrameFormat* pFormat = 
pAnchoredObj->GetFrameFormat();
+                                SwFormatSurround aAttr( pFormat->GetSurround() 
);
                                 if( css::text::WrapTextMode_THROUGH != 
aAttr.GetSurround() )
                                 {
                                     // When on auto position, we can only set 
it to
                                     // flow through
-                                    if ((rFormat.GetAnchor().GetAnchorId() ==
+                                    if ((pFormat->GetAnchor().GetAnchorId() ==
                                             RndStdIds::FLY_AT_CHAR) &&
                                         (css::text::WrapTextMode_PARALLEL ==
                                             aAttr.GetSurround()))
@@ -1776,9 +1776,9 @@ void CalcContent( SwLayoutFrame *pLay, bool bNoColl )
                                     {
                                         aAttr.SetSurround( 
css::text::WrapTextMode_PARALLEL );
                                     }
-                                    rFormat.LockModify();
-                                    rFormat.SetFormatAttr( aAttr );
-                                    rFormat.UnlockModify();
+                                    pFormat->LockModify();
+                                    pFormat->SetFormatAttr( aAttr );
+                                    pFormat->UnlockModify();
                                 }
                             }
                             else
@@ -2054,7 +2054,7 @@ bool SwFlyFrame::IsShowUnfloatButton(SwWrtShell* pWrtSh) 
const
     if (pWrtSh->GetViewOptions()->IsReadonly())
         return false;
 
-    const SdrObject *pObj = GetFrameFormat().FindRealSdrObject();
+    const SdrObject *pObj = GetFrameFormat()->FindRealSdrObject();
     if (pObj == nullptr)
         return false;
 
@@ -2631,7 +2631,7 @@ void SwFrame::InvalidateObjs( const bool 
_bNoInvaOfAsCharAnchoredObjs )
     for (SwAnchoredObject* pAnchoredObj : *GetDrawObjs())
     {
         if ( _bNoInvaOfAsCharAnchoredObjs &&
-             (pAnchoredObj->GetFrameFormat().GetAnchor().GetAnchorId()
+             (pAnchoredObj->GetFrameFormat()->GetAnchor().GetAnchorId()
                 == RndStdIds::FLY_AS_CHAR) )
         {
             continue;
@@ -2738,7 +2738,7 @@ void SwLayoutFrame::NotifyLowerObjs( const bool 
_bUnlockPosOfObjs )
             bool isPositionedByHF(false);
             if (IsHeaderFrame() || IsFooterFrame())
             {
-                auto const 
nO(pObj->GetFrameFormat().GetVertOrient().GetRelationOrient());
+                auto const 
nO(pObj->GetFrameFormat()->GetVertOrient().GetRelationOrient());
                 if (nO == text::RelOrientation::PAGE_PRINT_AREA
                     || nO == text::RelOrientation::PAGE_PRINT_AREA_BOTTOM
                     || nO == text::RelOrientation::PAGE_PRINT_AREA_TOP)
@@ -3093,17 +3093,17 @@ void SwFlyFrame::InvalidateObjPos()
     InvalidateObjRectWithSpaces();
 }
 
-SwFrameFormat& SwFlyFrame::GetFrameFormat()
+SwFrameFormat* SwFlyFrame::GetFrameFormat()
 {
     OSL_ENSURE( GetFormat(),
             "<SwFlyFrame::GetFrameFormat()> - missing frame format -> crash." 
);
-    return *GetFormat();
+    return GetFormat();
 }
-const SwFrameFormat& SwFlyFrame::GetFrameFormat() const
+const SwFrameFormat* SwFlyFrame::GetFrameFormat() const
 {
     OSL_ENSURE( GetFormat(),
             "<SwFlyFrame::GetFrameFormat()> - missing frame format -> crash." 
);
-    return *GetFormat();
+    return GetFormat();
 }
 
 SwRect SwFlyFrame::GetObjRect() const
diff --git a/sw/source/core/layout/flycnt.cxx b/sw/source/core/layout/flycnt.cxx
index a53b8841f84a..2ed6fbf08942 100644
--- a/sw/source/core/layout/flycnt.cxx
+++ b/sw/source/core/layout/flycnt.cxx
@@ -162,13 +162,13 @@ void SwFlyAtContentFrame::SwClientNotify(const SwModify& 
rMod, const SfxHint& rH
         // of the given fly frame format is registered.
         if(bFound && pContent && pContent->GetDrawObjs())
         {
-            SwFrameFormat* pMyFlyFrameFormat(&GetFrameFormat());
+            SwFrameFormat* pMyFlyFrameFormat(GetFrameFormat());
             SwSortedObjs &rObjs = *pContent->GetDrawObjs();
             for(SwAnchoredObject* rObj : rObjs)
             {
                 SwFlyFrame* pFlyFrame = rObj->DynCastFlyFrame();
                 if (pFlyFrame &&
-                     &(pFlyFrame->GetFrameFormat()) == pMyFlyFrameFormat)
+                     pFlyFrame->GetFrameFormat() == pMyFlyFrameFormat)
                 {
                     bFound = false;
                     break;
@@ -330,7 +330,8 @@ bool SwOszControl::ChkOsz()
 |*/
 void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* pRenderContext)
 {
-    if ( 
!GetFormat()->GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId( 
GetVirtDrawObj()->GetLayer() ) )
+    const SwDoc& rDoc = *(GetFormat()->GetDoc());
+    if 
(!rDoc.getIDocumentDrawModelAccess().IsVisibleLayerId(GetVirtDrawObj()->GetLayer()))
     {
         return;
     }
@@ -450,7 +451,6 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* 
pRenderContext)
                 SwTextFrame* pAnchorTextFrame( 
static_cast<SwTextFrame*>(AnchorFrame()) );
                 bool bInsert( true );
                 sal_uInt32 nAnchorFrameToPageNum( 0 );
-                const SwDoc& rDoc = *(GetFrameFormat().GetDoc());
                 if ( SwLayouter::FrameMovedFwdByObjPos(
                                         rDoc, *pAnchorTextFrame, 
nAnchorFrameToPageNum ) )
                 {
@@ -518,7 +518,7 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* 
pRenderContext)
               !bConsiderWrapInfluenceDueToOverlapPrevCol &&
               // #i40444#
               !bConsiderWrapInfluenceDueToMovedFwdAnchor &&
-              
GetFormat()->GetDoc()->getIDocumentDrawModelAccess().IsVisibleLayerId( 
GetVirtDrawObj()->GetLayer() ) );
+              rDoc.getIDocumentDrawModelAccess().IsVisibleLayerId( 
GetVirtDrawObj()->GetLayer() ) );
 
     // #i3317# - instead of attribute change apply
     // temporarily the 'straightforward positioning process'.
diff --git a/sw/source/core/layout/flyincnt.cxx 
b/sw/source/core/layout/flyincnt.cxx
index 7fb8f93f1635..36c7837e95e8 100644
--- a/sw/source/core/layout/flyincnt.cxx
+++ b/sw/source/core/layout/flyincnt.cxx
@@ -191,7 +191,7 @@ void SwFlyInContentFrame::MakeObjPos()
 void SwFlyInContentFrame::ActionOnInvalidation( const InvalidationType 
_nInvalid )
 {
     if ( INVALID_POS == _nInvalid || INVALID_ALL == _nInvalid )
-        AnchorFrame()->Prepare( PrepareHint::FlyFrameAttributesChanged, 
&GetFrameFormat() );
+        AnchorFrame()->Prepare( PrepareHint::FlyFrameAttributesChanged, 
GetFrameFormat() );
 }
 
 void SwFlyInContentFrame::NotifyBackground( SwPageFrame *, const SwRect& rRect,
diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx
index 66e27adb8f47..7ac95d65e0d8 100644
--- a/sw/source/core/layout/flylay.cxx
+++ b/sw/source/core/layout/flylay.cxx
@@ -153,7 +153,7 @@ void SwFlyFreeFrame::MakeAll(vcl::RenderContext* 
/*pRenderContext*/)
         if ( !IsNoMoveOnCheckClip() &&
              !( PositionLocked() &&
                 GetAnchorFrame()->IsInFly() &&
-                GetFrameFormat().GetFollowTextFlow().GetValue() ) )
+                GetFrameFormat()->GetFollowTextFlow().GetValue() ) )
         {
             setFrameAreaPositionValid(false);
         }
@@ -1100,7 +1100,7 @@ void SwPageFrame::AppendDrawObjToPage( SwAnchoredObject& 
_rNewObj )
             pFlyFrame->GetVirtDrawObj()->SetOrdNum( nNewNum );
     }
 
-    if ( RndStdIds::FLY_AS_CHAR == 
_rNewObj.GetFrameFormat().GetAnchor().GetAnchorId() )
+    if ( RndStdIds::FLY_AS_CHAR == 
_rNewObj.GetFrameFormat()->GetAnchor().GetAnchorId() )
     {
         return;
     }
@@ -1140,9 +1140,9 @@ void SwPageFrame::RemoveDrawObjFromPage( 
SwAnchoredObject& _rToRemoveObj )
         }
         if ( GetUpper() )
         {
-            if (_rToRemoveObj.HasFrameFormat()
-                && RndStdIds::FLY_AS_CHAR
-                       != 
_rToRemoveObj.GetFrameFormat().GetAnchor().GetAnchorId())
+            const SwFrameFormat* pObjFormat = _rToRemoveObj.GetFrameFormat();
+            if (pObjFormat
+                && RndStdIds::FLY_AS_CHAR != 
pObjFormat->GetAnchor().GetAnchorId())
             {
                 static_cast<SwRootFrame*>(GetUpper())->SetSuperfluous();
                 InvalidatePage();
diff --git a/sw/source/core/layout/frmtool.cxx 
b/sw/source/core/layout/frmtool.cxx
index c4dbb28f0073..e8fa815776e2 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -1025,7 +1025,7 @@ void SwContentNotify::ImplDestroy()
         SwSortedObjs* pObjs = pMasterFrame->GetDrawObjs();
         for (SwAnchoredObject* pAnchoredObj : *pObjs)
         {
-            if ( pAnchoredObj->GetFrameFormat().GetAnchor().GetAnchorId()
+            if ( pAnchoredObj->GetFrameFormat()->GetAnchor().GetAnchorId()
                     == RndStdIds::FLY_AT_CHAR )
             {
                 pAnchoredObj->CheckCharRectAndTopOfLine( 
!pMasterFrame->IsEmpty() );
@@ -2835,7 +2835,7 @@ static void lcl_RemoveObjsFromPage( SwFrame* _pFrame )
         // #115759# - remove also drawing objects from page
         else if ( auto pDrawObj = dynamic_cast<SwAnchoredDrawObject*>( pObj) )
         {
-            if (pObj->GetFrameFormat().GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR)
+            if (pObj->GetFrameFormat()->GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR)
             {
                 if (SwPageFrame *pPg = pObj->GetPageFrame())
                     pPg->RemoveDrawObjFromPage( *pDrawObj );
@@ -2996,7 +2996,7 @@ static void lcl_AddObjsToPage( SwFrame* _pFrame, 
SwPageFrame* _pPage )
         // #115759# - remove also drawing objects from page
         else if ( dynamic_cast<const SwAnchoredDrawObject*>( pObj) !=  nullptr 
)
         {
-            if (pObj->GetFrameFormat().GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR)
+            if (pObj->GetFrameFormat()->GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR)
             {
                 pObj->InvalidateObjPos();
                 _pPage->AppendDrawObjToPage(
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index 747470129c96..a705ef251176 100644
--- a/sw/source/core/layout/layact.cxx
+++ b/sw/source/core/layout/layact.cxx
@@ -1673,7 +1673,7 @@ bool SwLayAction::FormatContent(SwPageFrame *const pPage)
                 assert(pAnchorPage);
                 if (pAnchorPage != pPage
                     && pPage->GetPhyPageNum() < pAnchorPage->GetPhyPageNum()
-                    && pObj->GetFrameFormat().GetAnchor().GetAnchorId()
+                    && pObj->GetFrameFormat()->GetAnchor().GetAnchorId()
                         != RndStdIds::FLY_AS_CHAR)
                 {
                     moved.emplace_back(pObj, pAnchorPage);
diff --git a/sw/source/core/layout/objectformattertxtfrm.cxx 
b/sw/source/core/layout/objectformattertxtfrm.cxx
index 6b2503d40c39..9a44b0df624b 100644
--- a/sw/source/core/layout/objectformattertxtfrm.cxx
+++ b/sw/source/core/layout/objectformattertxtfrm.cxx
@@ -148,7 +148,7 @@ bool SwObjectFormatterTextFrame::DoFormatObj( 
SwAnchoredObject& _rAnchoredObj,
                 _rAnchoredObj.RestartLayoutProcess() &&
                 !( _rAnchoredObj.PositionLocked() &&
                    _rAnchoredObj.GetAnchorFrame()->IsInFly() &&
-                   
_rAnchoredObj.GetFrameFormat().GetFollowTextFlow().GetValue() );
+                   
_rAnchoredObj.GetFrameFormat()->GetFollowTextFlow().GetValue() );
         if ( bRestart )
         {
             bSuccess = false;
@@ -168,7 +168,7 @@ bool SwObjectFormatterTextFrame::DoFormatObj( 
SwAnchoredObject& _rAnchoredObj,
         if ( bSuccess &&
              _rAnchoredObj.ConsiderObjWrapInfluenceOnObjPos() &&
              ( _bCheckForMovedFwd ||
-               _rAnchoredObj.GetFrameFormat().GetWrapInfluenceOnObjPos().
+               _rAnchoredObj.GetFrameFormat()->GetWrapInfluenceOnObjPos().
                     // #i35017# - handle ITERATIVE as ONCE_SUCCESSIVE
                     GetWrapInfluenceOnObjPos( true ) ==
                         // #i35017# - constant name has changed
@@ -481,10 +481,11 @@ bool SwObjectFormatterTextFrame::DoFormatObjs()
 
 void SwObjectFormatterTextFrame::InvalidatePrevObjs( SwAnchoredObject& 
_rAnchoredObj )
 {
+    const SwFrameFormat* pObjFormat = _rAnchoredObj.GetFrameFormat();
     // invalidate all previous objects, whose wrapping influence on the object
     // positioning is <NONE_CONCURRENT_POSITIONED>.
     // Note: list of objects at anchor frame is sorted by this property.
-    if ( _rAnchoredObj.GetFrameFormat().GetWrapInfluenceOnObjPos().
+    if (pObjFormat->GetWrapInfluenceOnObjPos().
                 // #i35017# - handle ITERATIVE as ONCE_SUCCESSIVE
                 GetWrapInfluenceOnObjPos( true ) !=
                             // #i35017# - constant name has changed
@@ -501,7 +502,7 @@ void SwObjectFormatterTextFrame::InvalidatePrevObjs( 
SwAnchoredObject& _rAnchore
     {
         --i;
         SwAnchoredObject* pAnchoredObj = (*pObjs)[i];
-        if ( pAnchoredObj->GetFrameFormat().GetWrapInfluenceOnObjPos().
+        if (pObjFormat->GetWrapInfluenceOnObjPos().
                 // #i35017# - handle ITERATIVE as ONCE_SUCCESSIVE
                 GetWrapInfluenceOnObjPos( true ) ==
                     // #i35017# - constant name has changed
@@ -546,7 +547,7 @@ SwAnchoredObject* 
SwObjectFormatterTextFrame::GetFirstObjWithMovedFwdAnchor(
     {
         SwAnchoredObject* pAnchoredObj = GetCollectedObj(i);
         if ( pAnchoredObj->ConsiderObjWrapInfluenceOnObjPos() &&
-             pAnchoredObj->GetFrameFormat().GetWrapInfluenceOnObjPos().
+             pAnchoredObj->GetFrameFormat()->GetWrapInfluenceOnObjPos().
                     // #i35017# - handle ITERATIVE as ONCE_SUCCESSIVE
                     GetWrapInfluenceOnObjPos( true ) == 
_nWrapInfluenceOnPosition )
         {
@@ -648,8 +649,8 @@ bool SwObjectFormatterTextFrame::CheckMovedFwdCondition(
     // which will be on the next page.
     if ( !bAnchorIsMovedForward &&
          _bAnchoredAtMasterBeforeFormatAnchor &&
-        ((_rAnchoredObj.GetFrameFormat().GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AT_CHAR) ||
-         (_rAnchoredObj.GetFrameFormat().GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AT_PARA)))
+        ((_rAnchoredObj.GetFrameFormat()->GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AT_CHAR) ||
+         (_rAnchoredObj.GetFrameFormat()->GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AT_PARA)))
     {
         SwFrame* pAnchorFrame = 
_rAnchoredObj.GetAnchorFrameContainingAnchPos();
         OSL_ENSURE( pAnchorFrame->IsTextFrame(),
@@ -703,7 +704,7 @@ bool SwObjectFormatterTextFrame::CheckMovedFwdCondition(
                 if ((pObjAnchorPage == &rFromPageFrame
                         ? _boInFollow // same-page but will move forward
                         : rFromPageFrame.GetPhyPageNum() < 
pObjAnchorPage->GetPhyPageNum())
-                    && pObj->GetFrameFormat().GetAnchor().GetAnchorId()
+                    && pObj->GetFrameFormat()->GetAnchor().GetAnchorId()
                         != RndStdIds::FLY_AS_CHAR)
                 {
                     if (pPageFrameOfAnchor->GetPhyPageNum() < 
pObjAnchorPage->GetPhyPageNum())
diff --git a/sw/source/core/layout/pagechg.cxx 
b/sw/source/core/layout/pagechg.cxx
index e70cb6846981..bf4bcc45ea3a 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -1708,8 +1708,8 @@ void SwRootFrame::AssertPageFlys( SwPageFrame *pPage )
             while ( pPage->GetSortedObjs() && i< 
pPage->GetSortedObjs()->size() )
             {
                 // #i28701#
-                SwFrameFormat& rFormat = 
(*pPage->GetSortedObjs())[i]->GetFrameFormat();
-                const SwFormatAnchor &rAnch = rFormat.GetAnchor();
+                SwFrameFormat* pFormat = 
(*pPage->GetSortedObjs())[i]->GetFrameFormat();
+                const SwFormatAnchor &rAnch = pFormat->GetAnchor();
                 const sal_uInt16 nPg = rAnch.GetPageNum();
                 if ((rAnch.GetAnchorId() == RndStdIds::FLY_AT_PAGE) &&
                      nPg != pPage->GetPhyPageNum() )
@@ -1722,12 +1722,12 @@ void SwRootFrame::AssertPageFlys( SwPageFrame *pPage )
                         // It can move by itself. Just send a modify to its 
anchor attribute.
 #if OSL_DEBUG_LEVEL > 1
                         const size_t nCnt = pPage->GetSortedObjs()->size();
-                        
rFormat.CallSwClientNotify(sw::LegacyModifyHint(nullptr, &rAnch));
+                        
pFormat->CallSwClientNotify(sw::LegacyModifyHint(nullptr, &rAnch));
                         OSL_ENSURE( !pPage->GetSortedObjs() ||
                                 nCnt != pPage->GetSortedObjs()->size(),
                                 "Object couldn't be reattached!" );
 #else
-                        
rFormat.CallSwClientNotify(sw::LegacyModifyHint(nullptr, &rAnch));
+                        
pFormat->CallSwClientNotify(sw::LegacyModifyHint(nullptr, &rAnch));
 #endif
                         // Do not increment index, in this case
                         continue;
@@ -1853,19 +1853,19 @@ void SwRootFrame::ImplCalcBrowseWidth()
             {
                 // #i28701#
                 SwAnchoredObject* pAnchoredObj = (*pFrame->GetDrawObjs())[i];
-                const SwFrameFormat& rFormat = pAnchoredObj->GetFrameFormat();
+                const SwFrameFormat* pFormat = pAnchoredObj->GetFrameFormat();
                 const bool bFly = pAnchoredObj->DynCastFlyFrame() !=  nullptr;
                 if ((bFly && (FAR_AWAY == pAnchoredObj->GetObjRect().Width()))
-                    || rFormat.GetFrameSize().GetWidthPercent())
+                    || pFormat->GetFrameSize().GetWidthPercent())
                 {
                     continue;
                 }
 
                 tools::Long nWidth = 0;
-                switch ( rFormat.GetAnchor().GetAnchorId() )
+                switch ( pFormat->GetAnchor().GetAnchorId() )
                 {
                     case RndStdIds::FLY_AS_CHAR:
-                        nWidth = bFly ? rFormat.GetFrameSize().GetWidth() :
+                        nWidth = bFly ? pFormat->GetFrameSize().GetWidth() :
                                         pAnchoredObj->GetObjRect().Width();
                         break;
                     case RndStdIds::FLY_AT_PARA:
@@ -1877,8 +1877,8 @@ void SwRootFrame::ImplCalcBrowseWidth()
                             // at position FAR_AWAY.
                             if ( bFly )
                             {
-                                nWidth = rFormat.GetFrameSize().GetWidth();
-                                const SwFormatHoriOrient &rHori = 
rFormat.GetHoriOrient();
+                                nWidth = pFormat->GetFrameSize().GetWidth();
+                                const SwFormatHoriOrient &rHori = 
pFormat->GetHoriOrient();
                                 switch ( rHori.GetHoriOrient() )
                                 {
                                     case text::HoriOrientation::NONE:
@@ -2013,8 +2013,8 @@ static void lcl_MoveAllLowerObjs( SwFrame* pFrame, const 
Point& rOffset )
     for (size_t i = 0; i < pSortedObj->size(); ++i)
     {
         SwAnchoredObject *const pAnchoredObj = (*pSortedObj)[i];
-        const SwFrameFormat& rObjFormat = pAnchoredObj->GetFrameFormat();
-        const SwFormatAnchor& rAnchor = rObjFormat.GetAnchor();
+        const SwFrameFormat* pObjFormat = pAnchoredObj->GetFrameFormat();
+        const SwFormatAnchor& rAnchor = pObjFormat->GetAnchor();
 
         // all except from the as character anchored objects are moved
         // when processing the page frame:
@@ -2070,7 +2070,7 @@ static void lcl_MoveAllLowerObjs( SwFrame* pFrame, const 
Point& rOffset )
             pAnchoredDrawObj->SetLastObjRect( 
pAnchoredDrawObj->GetObjRect().SVRect() );
 
             // clear contour cache
-            if ( pAnchoredDrawObj->GetFrameFormat().GetSurround().IsContour() )
+            if ( pAnchoredDrawObj->GetFrameFormat()->GetSurround().IsContour() 
)
                 ClrContourCache( pAnchoredDrawObj->GetDrawObj() );
         }
         // #i92511#
diff --git a/sw/source/core/layout/sortedobjs.cxx 
b/sw/source/core/layout/sortedobjs.cxx
index 1e5f1aa293be..e0c29d51801c 100644
--- a/sw/source/core/layout/sortedobjs.cxx
+++ b/sw/source/core/layout/sortedobjs.cxx
@@ -78,16 +78,16 @@ struct ObjAnchorOrder
                      const SwAnchoredObject* _pNewAnchoredObj )
     {
         // get attributes of listed object
-        if (!_pListedAnchoredObj->HasFrameFormat())
+        const SwFrameFormat* pFormatListed = 
_pListedAnchoredObj->GetFrameFormat();
+        if (!pFormatListed)
             return false;
-        const SwFrameFormat& rFormatListed = 
_pListedAnchoredObj->GetFrameFormat();
-        const SwFormatAnchor* pAnchorListed = &(rFormatListed.GetAnchor());
+        const SwFormatAnchor* pAnchorListed = &(pFormatListed->GetAnchor());
 
         // get attributes of new object
-        if (!_pNewAnchoredObj->HasFrameFormat())
+        const SwFrameFormat* pFormatNew = _pNewAnchoredObj->GetFrameFormat();
+        if (!pFormatNew)
             return false;
-        const SwFrameFormat& rFormatNew = _pNewAnchoredObj->GetFrameFormat();
-        const SwFormatAnchor* pAnchorNew = &(rFormatNew.GetAnchor());
+        const SwFormatAnchor* pAnchorNew = &(pFormatNew->GetAnchor());
 
         // check for to-page anchored objects
         if ((pAnchorListed->GetAnchorId() == RndStdIds::FLY_AT_PAGE) &&
@@ -160,15 +160,15 @@ struct ObjAnchorOrder
         // objects anchored at the same content and at the same content anchor
         // node position with the same anchor type
         // Thus, compare its wrapping style including its layer
-        const IDocumentDrawModelAccess& rIDDMA = 
rFormatListed.getIDocumentDrawModelAccess();
+        const IDocumentDrawModelAccess& rIDDMA = 
pFormatListed->getIDocumentDrawModelAccess();
         const SdrLayerID nHellId = rIDDMA.GetHellId();
         const SdrLayerID nInvisibleHellId = rIDDMA.GetInvisibleHellId();
         const bool bWrapThroughOrHellListed =
-                    rFormatListed.GetSurround().GetSurround() == 
css::text::WrapTextMode_THROUGH ||
+                    pFormatListed->GetSurround().GetSurround() == 
css::text::WrapTextMode_THROUGH ||
                     _pListedAnchoredObj->GetDrawObj()->GetLayer() == nHellId ||
                     _pListedAnchoredObj->GetDrawObj()->GetLayer() == 
nInvisibleHellId;
         const bool bWrapThroughOrHellNew =
-                    rFormatNew.GetSurround().GetSurround() == 
css::text::WrapTextMode_THROUGH ||
+                    pFormatNew->GetSurround().GetSurround() == 
css::text::WrapTextMode_THROUGH ||
                     _pNewAnchoredObj->GetDrawObj()->GetLayer() == nHellId ||
                     _pNewAnchoredObj->GetDrawObj()->GetLayer() == 
nInvisibleHellId;
         if ( bWrapThroughOrHellListed != bWrapThroughOrHellNew )
@@ -183,9 +183,9 @@ struct ObjAnchorOrder
         // objects anchored at the same content with a set text wrapping
         // Thus, compare wrap influences on object position
         const SwFormatWrapInfluenceOnObjPos* pWrapInfluenceOnObjPosListed =
-                                        
&(rFormatListed.GetWrapInfluenceOnObjPos());
+                                        
&(pFormatListed->GetWrapInfluenceOnObjPos());
         const SwFormatWrapInfluenceOnObjPos* pWrapInfluenceOnObjPosNew =
-                                        
&(rFormatNew.GetWrapInfluenceOnObjPos());
+                                        
&(pFormatNew->GetWrapInfluenceOnObjPos());
         // #i35017# - handle ITERATIVE as ONCE_SUCCESSIVE
         if ( pWrapInfluenceOnObjPosListed->GetWrapInfluenceOnObjPos( true ) !=
                 pWrapInfluenceOnObjPosNew->GetWrapInfluenceOnObjPos( true ) )
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index c1acc0c9e9fe..12f27d749c04 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -286,12 +286,12 @@ static void lcl_InvalidateLowerObjs( SwLayoutFrame& 
_rLayoutFrame,
                     // that anchored object is correctly positioned.
                     pAnchoredObj->ClearCharRectAndTopOfLine();
                     pAnchoredObj->SetCurrRelPos( Point( 0, 0 ) );
-                    if ( 
pAnchoredObj->GetFrameFormat().GetAnchor().GetAnchorId()
-                            == RndStdIds::FLY_AS_CHAR )
+                    const SwFrameFormat* pObjFormat = 
pAnchoredObj->GetFrameFormat();
+                    if (pObjFormat->GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AS_CHAR)
                     {
                         pAnchoredObj->AnchorFrame()
                                 ->Prepare( 
PrepareHint::FlyFrameAttributesChanged,
-                                           &(pAnchoredObj->GetFrameFormat()) );
+                                           pObjFormat );
                     }
                     if ( pFly != nullptr )
                     {
@@ -4447,8 +4447,8 @@ tools::Long CalcHeightWithFlys( const SwFrame *pFrame )
                 {
                     // OD 30.09.2003 #i18732# - only objects, which follow
                     // the text flow have to be considered.
-                    const SwFrameFormat& rFrameFormat = 
pAnchoredObj->GetFrameFormat();
-                    bool bFollowTextFlow = 
rFrameFormat.GetFollowTextFlow().GetValue();
+                    const SwFrameFormat* pFrameFormat = 
pAnchoredObj->GetFrameFormat();
+                    bool bFollowTextFlow = 
pFrameFormat->GetFollowTextFlow().GetValue();
                     bool bIsFarAway = pAnchoredObj->GetObjRect().Top() != 
FAR_AWAY;
                     const SwPageFrame* pPageFrm = pTmp->FindPageFrame();
                     bool bIsAnchoredToTmpFrm = false;
@@ -4456,14 +4456,14 @@ tools::Long CalcHeightWithFlys( const SwFrame *pFrame )
                         bIsAnchoredToTmpFrm = pAnchoredObj->GetPageFrame() == 
pPageFrm ||
                         (pPageFrm->GetFormatPage().GetPhyPageNum() == 
pAnchoredObj->GetPageFrame()->GetFormatPage().GetPhyPageNum() + 1);
                     const bool bConsiderObj =
-                        (rFrameFormat.GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR) &&
+                        (pFrameFormat->GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR) &&
                         bIsFarAway &&
                         bFollowTextFlow && bIsAnchoredToTmpFrm;
-                    bool bWrapThrough = rFrameFormat.GetSurround().GetValue() 
== text::WrapTextMode_THROUGH;
-                    bool bInBackground = !rFrameFormat.GetOpaque().GetValue();
+                    bool bWrapThrough = pFrameFormat->GetSurround().GetValue() 
== text::WrapTextMode_THROUGH;
+                    bool bInBackground = !pFrameFormat->GetOpaque().GetValue();
                     // Legacy render requires in-background setting, the new 
mode does not.
                     bool bConsiderFollowTextFlow = bInBackground
-                                                   || 
!rFrameFormat.getIDocumentSettingAccess().get(
+                                                   || 
!pFrameFormat->getIDocumentSettingAccess().get(
                                                        
DocumentSettingId::USE_FORMER_TEXT_WRAPPING);
                     if (pFrame->IsInTab() && bFollowTextFlow && bWrapThrough 
&& bConsiderFollowTextFlow)
                     {
@@ -4475,7 +4475,7 @@ tools::Long CalcHeightWithFlys( const SwFrame *pFrame )
 
                     if ( bConsiderObj )
                     {
-                        const SwFormatFrameSize &rSz = 
rFrameFormat.GetFrameSize();
+                        const SwFormatFrameSize &rSz = 
pFrameFormat->GetFrameSize();
                         if( !rSz.GetHeightPercent() )
                         {
                             const SwTwips nDistOfFlyBottomToAnchorTop =
@@ -5428,7 +5428,7 @@ static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, 
tools::Long lYStart, bool bI
                     // from its anchor frame.
                     bool bVertPosDepOnAnchor( true );
                     {
-                        SwFormatVertOrient aVert( 
pAnchoredObj->GetFrameFormat().GetVertOrient() );
+                        SwFormatVertOrient aVert( 
pAnchoredObj->GetFrameFormat()->GetVertOrient() );
                         switch ( aVert.GetRelationOrient() )
                         {
                             case text::RelOrientation::PAGE_FRAME:
@@ -5528,7 +5528,7 @@ static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, 
tools::Long lYStart, bool bI
                         if ( pTabFrame &&
                              !( pTabFrame->IsFollow() &&
                                 pTabFrame->FindMaster()->IsRebuildLastLine() ) 
&&
-                            
(pAnchoredObj->GetFrameFormat().GetAnchor().GetAnchorId()
+                            
(pAnchoredObj->GetFrameFormat()->GetAnchor().GetAnchorId()
                                                             != 
RndStdIds::FLY_AS_CHAR))
                         {
                             SwPageFrame* pPageFrame = 
pAnchoredObj->GetPageFrame();
@@ -5546,7 +5546,7 @@ static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, 
tools::Long lYStart, bool bI
                         // #i52904# - re-introduce direct move
                         // of drawing objects
                         const bool bDirectMove =
-                                static_cast<const 
SwDrawFrameFormat&>(pAnchoredObj->GetFrameFormat()).IsPosAttrSet() &&
+                                static_cast<const 
SwDrawFrameFormat*>(pAnchoredObj->GetFrameFormat())->IsPosAttrSet() &&
                                 bVertPosDepOnAnchor &&
                                 
!pAnchoredObj->ConsiderObjWrapInfluenceOnObjPos();
                         if ( bDirectMove )
@@ -5804,8 +5804,8 @@ void SwCellFrame::Format( vcl::RenderContext* 
/*pRenderContext*/, const SwBorder
                 const SwFrame* pAnch = pAnchoredObj->GetAnchorFrame();
                 if ( (bConsiderWrapOnObjPos && IsAnLower( pAnch )) || 
(!bConsiderWrapOnObjPos && aTmp.Overlaps( aRect )) )
                 {
-                    const SwFrameFormat& rAnchoredObjFrameFormat = 
pAnchoredObj->GetFrameFormat();
-                    const SwFormatSurround &rSur = 
rAnchoredObjFrameFormat.GetSurround();
+                    const SwFrameFormat* pAnchoredObjFrameFormat = 
pAnchoredObj->GetFrameFormat();
+                    const SwFormatSurround &rSur = 
pAnchoredObjFrameFormat->GetSurround();
 
                     if ( bConsiderWrapOnObjPos || 
css::text::WrapTextMode_THROUGH != rSur.GetSurround() )
                     {
@@ -5825,7 +5825,7 @@ void SwCellFrame::Format( vcl::RenderContext* 
/*pRenderContext*/, const SwBorder
                         if ( bConsiderWrapOnObjPos ||
                              !IsAnLower( pAnch ) ||
                              pAnchoredObj->IsTmpConsiderWrapInfluence() ||
-                             
!rAnchoredObjFrameFormat.GetFollowTextFlow().GetValue() )
+                             
!pAnchoredObjFrameFormat->GetFollowTextFlow().GetValue() )
                         {
                             bVertDir = false;
                             break;
diff --git a/sw/source/core/layout/trvlfrm.cxx 
b/sw/source/core/layout/trvlfrm.cxx
index 5f8e3aa995a3..459c046021f8 100644
--- a/sw/source/core/layout/trvlfrm.cxx
+++ b/sw/source/core/layout/trvlfrm.cxx
@@ -70,8 +70,9 @@ namespace {
             const SwVirtFlyDrawObj* pObj =
                                 static_cast<const SwVirtFlyDrawObj*>(aIter());
             const SwAnchoredObject* pAnchoredObj = GetUserCall( aIter() 
)->GetAnchoredObj( aIter() );
-            const SwFormatSurround& rSurround = 
pAnchoredObj->GetFrameFormat().GetSurround();
-            const SvxOpaqueItem& rOpaque = 
pAnchoredObj->GetFrameFormat().GetOpaque();
+            const SwFrameFormat* pObjFormat = pAnchoredObj->GetFrameFormat();
+            const SwFormatSurround& rSurround = pObjFormat->GetSurround();
+            const SvxOpaqueItem& rOpaque = pObjFormat->GetOpaque();
             bool bInBackground = ( rSurround.GetSurround() == 
css::text::WrapTextMode_THROUGH ) && !rOpaque.GetValue();
 
             bool bBackgroundMatches = bInBackground == bSearchBackground;
@@ -2646,7 +2647,7 @@ void SwRootFrame::CalcFrameRects(SwShellCursor const& 
rCursor, SwRects & rRects,
                     continue;
                 const SwVirtFlyDrawObj* pObj = pFly->GetVirtDrawObj();
                 const SwFormatSurround &rSur = 
pFly->GetFormat()->GetSurround();
-                SwFormatAnchor const& 
rAnchor(pAnchoredObj->GetFrameFormat().GetAnchor());
+                SwFormatAnchor const& 
rAnchor(pAnchoredObj->GetFrameFormat()->GetAnchor());
                 const SwPosition* anchoredAt = rAnchor.GetContentAnchor();
                 bool inSelection = (
                             anchoredAt != nullptr
diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx
index 1cd01d53c680..aa108e16b6ec 100644
--- a/sw/source/core/layout/wsfrm.cxx
+++ b/sw/source/core/layout/wsfrm.cxx
@@ -2347,8 +2347,8 @@ SwTwips SwContentFrame::ShrinkFrame( SwTwips nDist, bool 
bTst, bool bInfo )
 
                     if( aBound.Overlaps( aRect ) )
                     {
-                        const SwFrameFormat& rFormat = 
pAnchoredObj->GetFrameFormat();
-                        if( css::text::WrapTextMode_THROUGH != 
rFormat.GetSurround().GetSurround() )
+                        const SwFrameFormat* pFormat = 
pAnchoredObj->GetFrameFormat();
+                        if( css::text::WrapTextMode_THROUGH != 
pFormat->GetSurround().GetSurround() )
                         {
                             const SwFrame* pAnchor = 
pAnchoredObj->GetAnchorFrame();
                             if ( pAnchor && pAnchor->FindFooterOrHeader() == 
GetUpper() )
@@ -4327,7 +4327,7 @@ void SwRootFrame::InvalidateAllObjPos()
             const SwSortedObjs& rObjs = *(pPageFrame->GetSortedObjs());
             for (SwAnchoredObject* pAnchoredObj : rObjs)
             {
-                const SwFormatAnchor& rAnch = 
pAnchoredObj->GetFrameFormat().GetAnchor();
+                const SwFormatAnchor& rAnch = 
pAnchoredObj->GetFrameFormat()->GetAnchor();
                 if ((rAnch.GetAnchorId() != RndStdIds::FLY_AT_PARA) &&
                     (rAnch.GetAnchorId() != RndStdIds::FLY_AT_CHAR))
                 {
diff --git a/sw/source/core/objectpositioning/anchoredobjectposition.cxx 
b/sw/source/core/objectpositioning/anchoredobjectposition.cxx
index e530e36df365..ab35ae7af738 100644
--- a/sw/source/core/objectpositioning/anchoredobjectposition.cxx
+++ b/sw/source/core/objectpositioning/anchoredobjectposition.cxx
@@ -106,7 +106,7 @@ void SwAnchoredObjectPosition::GetInfoAboutObj()
     // determine format the object belongs to
     {
         // #i28701#
-        mpFrameFormat = &mpAnchoredObj->GetFrameFormat();
+        mpFrameFormat = mpAnchoredObj->GetFrameFormat();
         assert(mpFrameFormat &&
                 "<SwAnchoredObjectPosition::GetInfoAboutObj() - missing frame 
format.");
     }
diff --git a/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx 
b/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx
index 8e4af98b7169..50af1061151b 100644
--- a/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx
+++ b/sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx
@@ -1241,7 +1241,7 @@ void SwToContentAnchoredObjectPosition::CalcOverlap(const 
SwTextFrame* pAnchorFr
             break;
         }
 
-        if (SwTextBoxHelper::isTextBox(&pAnchoredObj->GetFrameFormat(), 
RES_FLYFRMFMT))
+        if (SwTextBoxHelper::isTextBox(pAnchoredObj->GetFrameFormat(), 
RES_FLYFRMFMT))
         {
             // Overlapping with the frame of a textbox is fine.
             continue;
@@ -1276,7 +1276,7 @@ void SwToContentAnchoredObjectPosition::CalcOverlap(const 
SwTextFrame* pAnchorFr
             }
         }
 
-        css::text::WrapTextMode eWrap = 
pAnchoredObj->GetFrameFormat().GetSurround().GetSurround();
+        css::text::WrapTextMode eWrap = 
pAnchoredObj->GetFrameFormat()->GetSurround().GetSurround();
         if (eWrap == css::text::WrapTextMode_THROUGH)
         {
             // The other object is wrap through: allowed to overlap.
diff --git a/sw/source/core/text/EnhancedPDFExportHelper.cxx 
b/sw/source/core/text/EnhancedPDFExportHelper.cxx
index 499dcc24178a..5ad1fbe8f005 100644
--- a/sw/source/core/text/EnhancedPDFExportHelper.cxx
+++ b/sw/source/core/text/EnhancedPDFExportHelper.cxx
@@ -1626,7 +1626,7 @@ void SwTaggedPDFHelper::BeginBlockStructureElements()
             {
                 const SwFlyFrame* pFly = static_cast<const 
SwFlyFrame*>(pFrame);
                 if (pFly->GetAnchorFrame()->FindFooterOrHeader() != nullptr
-                    || 
pFly->GetFrameFormat().GetAttrSet().Get(RES_DECORATIVE).GetValue())
+                    || 
pFly->GetFrameFormat()->GetAttrSet().Get(RES_DECORATIVE).GetValue())
                 {
                     nPDFType = vcl::PDFWriter::NonStructElement;
                 }
diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx
index 76a1df56210a..e19b834a5618 100644
--- a/sw/source/core/text/frmform.cxx
+++ b/sw/source/core/text/frmform.cxx
@@ -1120,7 +1120,7 @@ void SwTextFrame::FormatAdjust( SwTextFormatter &rLine,
     bool bOnlyContainsAsCharAnchoredObj =
             !IsFollow() && nStrLen == TextFrameIndex(1) &&
             GetDrawObjs() && GetDrawObjs()->size() == 1 &&
-            (*GetDrawObjs())[0]->GetFrameFormat().GetAnchor().GetAnchorId() == 
RndStdIds::FLY_AS_CHAR;
+            (*GetDrawObjs())[0]->GetFrameFormat()->GetAnchor().GetAnchorId() 
== RndStdIds::FLY_AS_CHAR;
 
     // Still try split text frame if we have columns.
     if (FindColFrame())
diff --git a/sw/source/core/text/itratr.cxx b/sw/source/core/text/itratr.cxx
index 24203ecb531c..bb008d24a344 100644
--- a/sw/source/core/text/itratr.cxx
+++ b/sw/source/core/text/itratr.cxx
@@ -1576,7 +1576,7 @@ bool SwTextFrame::IsEmptyWithSplitFly() const
     }
 
     // It has a split fly anchored to it.
-    if (pFlyFrame->GetFrameFormat().GetVertOrient().GetPos() >= 0)
+    if (pFlyFrame->GetFrameFormat()->GetVertOrient().GetPos() >= 0)
     {
         return false;
     }
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index c0b4894f8a38..4305e9d0948c 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -420,7 +420,7 @@ void SwTextFormatter::BuildPortions( SwTextFormatInfo &rInf 
)
                 if (pAnchoredObj->RestartLayoutProcess()
                     && !pAnchoredObj->IsTmpConsiderWrapInfluence())
                 {
-                    SwFormatAnchor const& 
rAnchor(pAnchoredObj->GetFrameFormat().GetAnchor());
+                    SwFormatAnchor const& 
rAnchor(pAnchoredObj->GetFrameFormat()->GetAnchor());
                     assert(rAnchor.GetAnchorId() == RndStdIds::FLY_AT_CHAR || 
rAnchor.GetAnchorId() == RndStdIds::FLY_AT_PARA);
                     TextFrameIndex const 
nAnchor(GetTextFrame()->MapModelToViewPos(*rAnchor.GetContentAnchor()));
                     if (pFollow->GetOffset() <= nAnchor
diff --git a/sw/source/core/text/porfly.cxx b/sw/source/core/text/porfly.cxx
index 14d1bf6eaa8a..19ac692cf42f 100644
--- a/sw/source/core/text/porfly.cxx
+++ b/sw/source/core/text/porfly.cxx
@@ -168,7 +168,7 @@ void SwTextFrame::MoveFlyInCnt(SwTextFrame *pNew,
     {
         // Consider changed type of <SwSortedList> entries
         SwAnchoredObject* pAnchoredObj = (*pObjs)[i];
-        const SwFormatAnchor& rAnch = 
pAnchoredObj->GetFrameFormat().GetAnchor();
+        const SwFormatAnchor& rAnch = 
pAnchoredObj->GetFrameFormat()->GetAnchor();
         if (rAnch.GetAnchorId() == RndStdIds::FLY_AS_CHAR)
         {
             const SwPosition* pPos = rAnch.GetContentAnchor();
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
index cae54845be7b..2ba2fcf75fb4 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -748,7 +748,7 @@ void SwLineLayout::CalcLine( SwTextFormatter &rLine, 
SwTextFormatInfo &rInf )
                     {
                         bool bDeleted = false;
                         size_t nAuthor = std::string::npos;
-                        const SwFormatAnchor& rAnchor = 
pAnchoredObj->GetFrameFormat().GetAnchor();
+                        const SwFormatAnchor& rAnchor = 
pAnchoredObj->GetFrameFormat()->GetAnchor();
                         if ( rAnchor.GetAnchorId() == RndStdIds::FLY_AT_CHAR )
                         {
                             SwPosition aAnchor = *rAnchor.GetContentAnchor();
diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx
index 6d25e4c96581..7c4d9a2e160d 100644
--- a/sw/source/core/text/txtfly.cxx
+++ b/sw/source/core/text/txtfly.cxx
@@ -162,7 +162,7 @@ SwRect SwContourCache::CalcBoundRect( const 
SwAnchoredObject* pAnchoredObj,
                                             const bool bRight )
 {
     SwRect aRet;
-    const SwFrameFormat* pFormat = &(pAnchoredObj->GetFrameFormat());
+    const SwFrameFormat* pFormat = pAnchoredObj->GetFrameFormat();
     bool bHandleContour(pFormat->GetSurround().IsContour());
 
     if(!bHandleContour)
@@ -594,7 +594,7 @@ void SwTextFly::DrawFlyRect( OutputDevice* pOut, const 
SwRect &rRect )
             if (pFly)
             {
                 // #i68520#
-                const SwFormatSurround& rSur = 
pAnchoredObjTmp->GetFrameFormat().GetSurround();
+                const SwFormatSurround& rSur = 
pAnchoredObjTmp->GetFrameFormat()->GetSurround();
 
                 // OD 24.01.2003 #106593# - correct clipping of fly frame area.
                 // Consider that fly frame background/shadow can be transparent
@@ -655,8 +655,8 @@ bool SwTextFly::GetTop( const SwAnchoredObject* 
_pAnchoredObj,
         if( ( bInFootnote || bInFooterOrHeader ) && m_bTopRule )
         {
             // #i26945#
-            const SwFrameFormat& rFrameFormat = 
_pAnchoredObj->GetFrameFormat();
-            const SwFormatAnchor& rNewA = rFrameFormat.GetAnchor();
+            const SwFrameFormat* pFrameFormat = 
_pAnchoredObj->GetFrameFormat();
+            const SwFormatAnchor& rNewA = pFrameFormat->GetAnchor();
             if (RndStdIds::FLY_AT_PAGE == rNewA.GetAnchorId())
             {
                 if ( bInFootnote )
@@ -664,7 +664,7 @@ bool SwTextFly::GetTop( const SwAnchoredObject* 
_pAnchoredObj,
 
                 if ( bInFooterOrHeader )
                 {
-                    const SwFormatVertOrient& aVert( 
rFrameFormat.GetVertOrient() );
+                    const SwFormatVertOrient& 
aVert(pFrameFormat->GetVertOrient());
                     bool bVertPrt = aVert.GetRelationOrient() == 
text::RelOrientation::PRINT_AREA ||
                             aVert.GetRelationOrient() == 
text::RelOrientation::PAGE_PRINT_AREA;
                     if( bVertPrt )
@@ -710,13 +710,14 @@ bool SwTextFly::GetTop( const SwAnchoredObject* 
_pAnchoredObj,
             {
                 // Within chained Flys we only avoid Lower
                 // #i68520#
-                const SwFormatChain &rChain = 
mpCurrAnchoredObj->GetFrameFormat().GetChain();
+                const SwFrameFormat* pCurObjFormat = 
mpCurrAnchoredObj->GetFrameFormat();
+                const SwFormatChain& rChain = pCurObjFormat->GetChain();
                 if ( !rChain.GetPrev() && !rChain.GetNext() )
                 {
                     // #i26945#
-                    const SwFormatAnchor& rNewA = 
_pAnchoredObj->GetFrameFormat().GetAnchor();
+                    const SwFormatAnchor& rNewA = 
_pAnchoredObj->GetFrameFormat()->GetAnchor();
                     // #i68520#
-                    const SwFormatAnchor& rCurrA = 
mpCurrAnchoredObj->GetFrameFormat().GetAnchor();
+                    const SwFormatAnchor& rCurrA = pCurObjFormat->GetAnchor();
 
                     // If <mpCurrAnchoredObj> is anchored as character, its 
content
                     // does not wrap around pNew
@@ -768,9 +769,9 @@ bool SwTextFly::GetTop( const SwAnchoredObject* 
_pAnchoredObj,
         if ( bEvade )
         {
             // #i26945#
-            if (_pAnchoredObj->HasFrameFormat())
+            if (const SwFrameFormat* pAnchoredObjFormat = 
_pAnchoredObj->GetFrameFormat())
             {
-                const SwFormatAnchor& rNewA = 
_pAnchoredObj->GetFrameFormat().GetAnchor();
+                const SwFormatAnchor& rNewA = pAnchoredObjFormat->GetAnchor();
                 OSL_ENSURE(RndStdIds::FLY_AS_CHAR != rNewA.GetAnchorId(),
                            "Don't call GetTop with a FlyInContentFrame");
                 if (RndStdIds::FLY_AT_PAGE == rNewA.GetAnchorId())
@@ -926,7 +927,7 @@ SwAnchoredObjList& SwTextFly::InitAnchoredObjList()
                  !pAnchoredObj->ConsiderForTextWrap() ||
                  ( mbIgnoreObjsInHeaderFooter && !bFooterHeader &&
                    pAnchoredObj->GetAnchorFrame()->FindFooterOrHeader() ) ||
-                 ( bAllowCompatWrap && 
!pAnchoredObj->GetFrameFormat().GetFollowTextFlow().GetValue() )
+                 ( bAllowCompatWrap && 
!pAnchoredObj->GetFrameFormat()->GetFollowTextFlow().GetValue() )
                )
             {
                 continue;
@@ -964,13 +965,13 @@ SwAnchoredObjList& SwTextFly::InitAnchoredObjList()
                     mpAnchoredObjList->insert( aInsPosIter, pAnchoredObj );
                 }
 
-                const SwFormatSurround &rFlyFormat = 
pAnchoredObj->GetFrameFormat().GetSurround();
+                const SwFrameFormat* pObjFormat = 
pAnchoredObj->GetFrameFormat();
+                const SwFormatSurround& rFlyFormat = pObjFormat->GetSurround();
                 // #i68520#
                 if ( rFlyFormat.IsAnchorOnly() &&
                      pAnchoredObj->GetAnchorFrame() == GetMaster() )
                 {
-                    const SwFormatVertOrient &rTmpFormat =
-                                    
pAnchoredObj->GetFrameFormat().GetVertOrient();
+                    const SwFormatVertOrient &rTmpFormat = 
pObjFormat->GetVertOrient();
                     if( text::VertOrientation::BOTTOM != 
rTmpFormat.GetVertOrient() )
                         m_nMinBottom = ( aRectFnSet.IsVert() && m_nMinBottom ) 
?
                                      std::min( m_nMinBottom, aBound.Left() ) :
@@ -1005,11 +1006,11 @@ SwTwips SwTextFly::CalcMinBottom() const
         for( size_t i = 0; i < nCount; ++i )
         {
             SwAnchoredObject* pAnchoredObj = (*pDrawObj)[ i ];
-            const SwFormatSurround &rFlyFormat = 
pAnchoredObj->GetFrameFormat().GetSurround();
+            const SwFrameFormat* pObjFormat = pAnchoredObj->GetFrameFormat();
+            const SwFormatSurround& rFlyFormat = pObjFormat->GetSurround();
             if( rFlyFormat.IsAnchorOnly() )
             {
-                const SwFormatVertOrient &rTmpFormat =
-                                    
pAnchoredObj->GetFrameFormat().GetVertOrient();
+                const SwFormatVertOrient &rTmpFormat = 
pObjFormat->GetVertOrient();
                 if( text::VertOrientation::BOTTOM != 
rTmpFormat.GetVertOrient() )
                 {
                     const SwRect& aBound( pAnchoredObj->GetObjRectWithSpaces() 
);
@@ -1125,7 +1126,7 @@ bool SwTextFly::ForEach( const SwRect &rRect, SwRect* 
pRect, bool bAvoid ) const
             if ( mpCurrAnchoredObj != pAnchoredObj && aRect.Overlaps( rRect ) )
             {
                 // #i68520#
-                const SwFormat* pFormat( &(pAnchoredObj->GetFrameFormat()) );
+                const SwFormat* pFormat(pAnchoredObj->GetFrameFormat());
                 const SwFormatSurround &rSur = pFormat->GetSurround();
                 if( bAvoid )
                 {
@@ -1412,7 +1413,7 @@ SwRect SwTextFly::AnchoredObjToRect( const 
SwAnchoredObject* pAnchoredObj,
 
 css::text::WrapTextMode SwTextFly::GetSurroundForTextWrap( const 
SwAnchoredObject* pAnchoredObj ) const
 {
-    const SwFrameFormat* pFormat = &(pAnchoredObj->GetFrameFormat());
+    const SwFrameFormat* pFormat = pAnchoredObj->GetFrameFormat();
     const SwFormatSurround &rFlyFormat = pFormat->GetSurround();
     css::text::WrapTextMode eSurroundForTextWrap = rFlyFormat.GetSurround();
 
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index 18eb78db8348..799e3500455b 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -3104,7 +3104,7 @@ bool SwTextFrame::Prepare( const PrepareHint ePrep, const 
void* pVoid,
                             SwAnchoredObject* pAnchoredObj = 
(*GetDrawObjs())[i];
                             // i#28701 - consider all
                             // to-character anchored objects
-                            if ( 
pAnchoredObj->GetFrameFormat().GetAnchor().GetAnchorId()
+                            if ( 
pAnchoredObj->GetFrameFormat()->GetAnchor().GetAnchorId()
                                     == RndStdIds::FLY_AT_CHAR )
                             {
                                 bFormat = true;
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 47bff5e08bac..77dbe2e0290f 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -412,12 +412,12 @@ void MoveMergedFlysAndFootnotes(std::vector<SwTextFrame*> 
const& rFrames,
             }
             for (SwAnchoredObject *const pObj : objs)
             {
-                SwFrameFormat & rFormat(pObj->GetFrameFormat());
-                SwFormatAnchor const& rAnchor(rFormat.GetAnchor());
+                SwFrameFormat* pFormat(pObj->GetFrameFormat());
+                SwFormatAnchor const& rAnchor(pFormat->GetAnchor());
                 if (rFirstNode.GetIndex() < 
rAnchor.GetAnchorNode()->GetIndex())
                 {
                     // move it to the new frame of "this"
-                    rFormat.CallSwClientNotify(sw::LegacyModifyHint(&rAnchor, 
&rAnchor));
+                    pFormat->CallSwClientNotify(sw::LegacyModifyHint(&rAnchor, 
&rAnchor));
                     // note pObjs will be deleted if it becomes empty
                     assert(!pFrame->GetDrawObjs() || !pObjs->Contains(*pObj));
                 }
diff --git a/sw/source/core/unocore/unoobj2.cxx 
b/sw/source/core/unocore/unoobj2.cxx
index 7614f0a31485..5cb73bf7b8f0 100644
--- a/sw/source/core/unocore/unoobj2.cxx
+++ b/sw/source/core/unocore/unoobj2.cxx
@@ -121,9 +121,9 @@ struct FrameClientSortListLess
             return;
         for(const auto pAnchoredObj : *pObjs)
         {
-            SwFrameFormat& rFormat = pAnchoredObj->GetFrameFormat();
+            SwFrameFormat* pFormat = pAnchoredObj->GetFrameFormat();
             // Filter out textboxes, which are not interesting at a UNO level.
-            if(SwTextBoxHelper::isTextBox(&rFormat, RES_FLYFRMFMT))
+            if(SwTextBoxHelper::isTextBox(pFormat, RES_FLYFRMFMT))
                 continue;
 
             if (nAnchorType == RndStdIds::FLY_AT_PARA)
@@ -137,11 +137,11 @@ struct FrameClientSortListLess
                 }
             }
 
-            if(rFormat.GetAnchor().GetAnchorId() == nAnchorType)
+            if(pFormat->GetAnchor().GetAnchorId() == nAnchorType)
             {
-                const sal_Int32 nIdx = 
rFormat.GetAnchor().GetAnchorContentOffset();
-                const auto nOrder = rFormat.GetAnchor().GetOrder();
-                rFrames.emplace_back(nIdx, nOrder, 
std::make_unique<sw::FrameClient>(&rFormat));
+                const sal_Int32 nIdx = 
pFormat->GetAnchor().GetAnchorContentOffset();
+                const auto nOrder = pFormat->GetAnchor().GetOrder();
+                rFrames.emplace_back(nIdx, nOrder, 
std::make_unique<sw::FrameClient>(pFormat));
             }
         }
     }

Reply via email to