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                                   |   22 +--
 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 +-
 wizards/source/scriptforge/SF_Array.xba                            |    2 
 43 files changed, 233 insertions(+), 233 deletions(-)

New commits:
commit 67a2cba41b6caeabac031f1ae35b6c465037b0fd
Author:     Jean-Pierre Ledure <[email protected]>
AuthorDate: Fri Jan 12 22:30:06 2024 +0100
Commit:     Xisco Fauli <[email protected]>
CommitDate: Tue Jan 16 09:40:22 2024 +0100

    ScriptForge (SF_Array) fix tdf#158976 Shuffle()
    
    The algorithm used to shuffle a 1D array
    prevented any item of the array to remain
    in the same entry after the shuffle.
    
    This has been fixed. The potential targeted entries
    to receive an item include the actual entry.
    
    This change might impact existing scripts that
    have Randomize()d their sorts to always get the
    same shuffle results. This should impact test
    scripts only.
    
    SF_Array.Shuffle() is available in Basic only.
    No impact on help pages.
    
    Change-Id: If56d901f4af68f8889a7352c306bae6e3443ae97
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161987
    Reviewed-by: Jean-Pierre Ledure <[email protected]>
    Tested-by: Jenkins
    (cherry picked from commit ca9168b8ad842c86b2168e12bb98087b9f8139bd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162009
    Reviewed-by: Xisco Fauli <[email protected]>
    (cherry picked from commit d4898d7bbe8496504e36f7d91f55f62043f6a302)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162105

diff --git a/wizards/source/scriptforge/SF_Array.xba 
b/wizards/source/scriptforge/SF_Array.xba
index 49bdab14770a..c12446133e72 100644
--- a/wizards/source/scriptforge/SF_Array.xba
+++ b/wizards/source/scriptforge/SF_Array.xba
@@ -1767,7 +1767,7 @@ Try:
        Next i
        &apos;  Now ... shuffle !
        Do While lCurrentIndex &gt; lMin
-               lRandomIndex = Int(Rnd * (lCurrentIndex - lMin)) + lMin
+               lRandomIndex = Int(Rnd * (lCurrentIndex - lMin + 1)) + lMin
                vSwapValue = vShuffle(lCurrentIndex)
                vShuffle(lCurrentIndex) = vShuffle(lRandomIndex)
                vShuffle(lRandomIndex) = vSwapValue
commit e5899a8aa8b27658035db757fc7bd58bd8f016e6
Author:     Mike Kaganski <[email protected]>
AuthorDate: Sun Jan 14 17:53:03 2024 +0600
Commit:     Xisco Fauli <[email protected]>
CommitDate: Tue Jan 16 09:40:11 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 <[email protected]>
    Signed-off-by: Xisco Fauli <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162079
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162088

diff --git a/sw/inc/anchoreddrawobject.hxx b/sw/inc/anchoreddrawobject.hxx
index eb457701a98d..da3ea0509ca8 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 0c90549e844e..73d212935f01 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -763,7 +763,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 9815c72adbd3..cda801c4334c 100644
--- a/sw/qa/extras/layout/layout3.cxx
+++ b/sw/qa/extras/layout/layout3.cxx
@@ -1583,12 +1583,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 285a3adb7c61..50e19edd273d 100644
--- a/sw/qa/extras/uiwriter/uiwriter5.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter5.cxx
@@ -1290,8 +1290,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 e71c7892398a..008b3e1053f7 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -557,10 +557,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 456241b660c0..ded538c55cdc 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -494,7 +494,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;
                 }
@@ -1236,7 +1236,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
@@ -1969,7 +1969,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)
@@ -2361,7 +2361,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 430e18ecfeaf..6c90846eae11 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 2fb646150d0e..9a3423ce9bc5 100644
--- a/sw/source/core/frmedt/fefly1.cxx
+++ b/sw/source/core/frmedt/fefly1.cxx
@@ -438,8 +438,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;
@@ -447,9 +447,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;
@@ -476,7 +476,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();
@@ -550,7 +550,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:
@@ -607,14 +607,14 @@ 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 (pObj->getChildrenOfSdrObject())
@@ -622,11 +622,11 @@ Point SwFEShell::FindAnchorPos( const Point& rAbsPos, 
bool bMoveIt )
                                 for (size_t i = 0;
                                      i < 
pObj->getChildrenOfSdrObject()->GetObjCount(); ++i)
                                     SwTextBoxHelper::changeAnchor(
-                                        &rFormat, 
pObj->getChildrenOfSdrObject()->GetObj(i));
+                                        pFormat, 
pObj->getChildrenOfSdrObject()->GetObj(i));
                             }
                             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 2bfd8f69146d..7154094dd59a 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -423,8 +423,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;
@@ -613,13 +613,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
@@ -1476,8 +1476,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 cb26f3357225..f5a743480316 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 4b47f0ad2b4e..0882f926c50e 100644
--- a/sw/source/core/inc/flyfrm.hxx
+++ b/sw/source/core/inc/flyfrm.hxx
@@ -269,8 +269,8 @@ public:
     virtual void MakeObjPos() override;
     virtual void InvalidateObjPos() 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 d541ae34ce83..83fcdb75ff92 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 e4351b163e15..c991757fbc24 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -3116,7 +3116,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 872e872083f8..a72523f1ca4c 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 8dc5706ccddc..8b3b316ec469 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)
@@ -1273,7 +1273,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 );
@@ -1761,13 +1761,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()))
@@ -1778,9 +1778,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
@@ -2056,7 +2056,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;
 
@@ -2633,7 +2633,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;
@@ -2740,7 +2740,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)
@@ -3095,17 +3095,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 09fd24f28c4a..5d24c21ace54 100644
--- a/sw/source/core/layout/flycnt.cxx
+++ b/sw/source/core/layout/flycnt.cxx
@@ -161,13 +161,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;
@@ -329,7 +329,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;
     }
@@ -449,7 +450,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 ) )
                 {
@@ -517,7 +517,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 2455f7a6d130..1e5782acc793 100644
--- a/sw/source/core/layout/flyincnt.cxx
+++ b/sw/source/core/layout/flyincnt.cxx
@@ -185,7 +185,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 880bdaa87520..2f14d5f1147f 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);
         }
@@ -1103,7 +1103,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;
     }
@@ -1143,9 +1143,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 e65f09a00d7d..7fc012d3aebf 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 6f11380fc030..2388b5acc65a 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -1716,8 +1716,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() )
@@ -1730,12 +1730,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;
@@ -1861,19 +1861,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:
@@ -1885,8 +1885,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:
@@ -2021,8 +2021,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:
@@ -2078,7 +2078,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 bbea3ddbb6f0..f730d85f7db5 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 )
                     {
@@ -4432,8 +4432,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;
@@ -4441,14 +4441,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)
                     {
@@ -4460,7 +4460,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 =
@@ -5413,7 +5413,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:
@@ -5516,7 +5516,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();
@@ -5538,7 +5538,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 )
@@ -5796,8 +5796,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() )
                     {
@@ -5817,7 +5817,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 311d177d32bf..4880ea635146 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;
@@ -2648,7 +2649,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 9d696a2650f7..537c79334189 100644
--- a/sw/source/core/layout/wsfrm.cxx
+++ b/sw/source/core/layout/wsfrm.cxx
@@ -2317,8 +2317,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() )
@@ -4270,7 +4270,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 31802ee4c184..2bf0a6119dc5 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 e9a7363c37cf..d9f75fefaf13 100644
--- a/sw/source/core/text/EnhancedPDFExportHelper.cxx
+++ b/sw/source/core/text/EnhancedPDFExportHelper.cxx
@@ -1581,7 +1581,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 495820336fb3..e583aa395d57 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 358d6d5068f3..2f9b196b2e40 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 8d52962bb7f7..e88e679e1d5b 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 7bee98d9821a..be306e17a105 100644
--- a/sw/source/core/text/porfly.cxx
+++ b/sw/source/core/text/porfly.cxx
@@ -158,7 +158,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 50a8489b5088..cd7fc0d956ae 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -744,7 +744,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 b2f367fa1ca7..3efaa4262d14 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() ) :
@@ -1010,11 +1011,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() 
);
@@ -1130,7 +1131,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 )
                 {
@@ -1417,7 +1418,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 3405fc6167bf..9cdd00abd436 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -3003,7 +3003,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 b5cc61b13f2b..69a5fe26b71e 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -409,12 +409,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 472babcd8243..1f4bbe609956 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)
@@ -141,11 +141,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