[Libreoffice-commits] core.git: sw/source

Mike Kaganski mike.kaganski at collabora.com
Fri Sep 23 08:36:17 UTC 2016


 sw/source/core/doc/tblrwcl.cxx                                      |    4 
 sw/source/core/docnode/ndtbl.cxx                                    |   68 -
 sw/source/core/docnode/ndtbl1.cxx                                   |   32 
 sw/source/core/frmedt/fetab.cxx                                     |   66 -
 sw/source/core/frmedt/fews.cxx                                      |   52 -
 sw/source/core/frmedt/tblsel.cxx                                    |  122 +-
 sw/source/core/inc/frame.hxx                                        |   59 -
 sw/source/core/layout/anchoreddrawobject.cxx                        |    4 
 sw/source/core/layout/anchoredobject.cxx                            |   18 
 sw/source/core/layout/calcmove.cxx                                  |  160 +--
 sw/source/core/layout/flowfrm.cxx                                   |   26 
 sw/source/core/layout/fly.cxx                                       |   96 +-
 sw/source/core/layout/flycnt.cxx                                    |   14 
 sw/source/core/layout/flyincnt.cxx                                  |    4 
 sw/source/core/layout/flylay.cxx                                    |   80 -
 sw/source/core/layout/frmtool.cxx                                   |   60 -
 sw/source/core/layout/ftnfrm.cxx                                    |  100 +-
 sw/source/core/layout/layact.cxx                                    |   52 -
 sw/source/core/layout/layouter.cxx                                  |    6 
 sw/source/core/layout/pagechg.cxx                                   |   14 
 sw/source/core/layout/paintfrm.cxx                                  |   34 
 sw/source/core/layout/sectfrm.cxx                                   |  194 ++--
 sw/source/core/layout/tabfrm.cxx                                    |  412 +++++-----
 sw/source/core/layout/trvlfrm.cxx                                   |  205 ++--
 sw/source/core/layout/wsfrm.cxx                                     |  187 ++--
 sw/source/core/objectpositioning/anchoredobjectposition.cxx         |  130 +--
 sw/source/core/objectpositioning/ascharanchoredobjectposition.cxx   |    8 
 sw/source/core/objectpositioning/tocntntanchoredobjectposition.cxx  |  158 +--
 sw/source/core/objectpositioning/tolayoutanchoredobjectposition.cxx |   16 
 sw/source/core/text/EnhancedPDFExportHelper.cxx                     |   22 
 sw/source/core/text/frmcrsr.cxx                                     |   84 +-
 sw/source/core/text/frmform.cxx                                     |   86 +-
 sw/source/core/text/frminf.cxx                                      |   14 
 sw/source/core/text/itratr.cxx                                      |    6 
 sw/source/core/text/itrcrsr.cxx                                     |   14 
 sw/source/core/text/itrform2.cxx                                    |   28 
 sw/source/core/text/porrst.cxx                                      |   10 
 sw/source/core/text/txtfly.cxx                                      |  128 +--
 sw/source/core/text/txtfrm.cxx                                      |   84 +-
 sw/source/core/text/txtftn.cxx                                      |   54 -
 sw/source/core/text/widorp.cxx                                      |   44 -
 sw/source/core/txtnode/txtedt.cxx                                   |   52 -
 42 files changed, 1506 insertions(+), 1501 deletions(-)

New commits:
commit 6bdcb730faa5b996882b4648b86b7caf93b8f421
Author: Mike Kaganski <mike.kaganski at collabora.com>
Date:   Tue Sep 20 20:51:54 2016 +0300

    Replace SWRECTFN macro with a class
    
    Change-Id: Ib400c5930be84d26665b0e12a61508c8fbfd7f08
    Reviewed-on: https://gerrit.libreoffice.org/29105
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>

diff --git a/sw/source/core/doc/tblrwcl.cxx b/sw/source/core/doc/tblrwcl.cxx
index e0f13cc..8dd4f4b 100644
--- a/sw/source/core/doc/tblrwcl.cxx
+++ b/sw/source/core/doc/tblrwcl.cxx
@@ -1073,8 +1073,8 @@ bool SwTable::OldSplitRow( SwDoc* pDoc, const SwSelBoxes& rBoxes, sal_uInt16 nCn
             SwTableBox* pSelBox = rBoxes[n];
             const SwRowFrame* pRow = GetRowFrame( *pSelBox->GetUpper() );
             OSL_ENSURE( pRow, "Where is the SwTableLine's Frame?" );
-            SWRECTFN( pRow )
-            pRowHeights[ n ] = (pRow->Frame().*fnRect->fnGetHeight)();
+            SwRectFnSet aRectFnSet(pRow);
+            pRowHeights[ n ] = (pRow->Frame().*aRectFnSet->fnGetHeight)();
         }
     }
 
diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index 936a5b5..eb15585a 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -2532,16 +2532,16 @@ void SwDoc::GetTabCols( SwTabCols &rFill, const SwCursor* pCursor,
     }
 
     // Set fixed points, LeftMin in Document coordinates, all others relative
-    SWRECTFN( pTab )
+    SwRectFnSet aRectFnSet(pTab);
     const SwPageFrame* pPage = pTab->FindPageFrame();
-    const sal_uLong nLeftMin = (pTab->Frame().*fnRect->fnGetLeft)() -
-                           (pPage->Frame().*fnRect->fnGetLeft)();
-    const sal_uLong nRightMax = (pTab->Frame().*fnRect->fnGetRight)() -
-                            (pPage->Frame().*fnRect->fnGetLeft)();
+    const sal_uLong nLeftMin = (pTab->Frame().*aRectFnSet->fnGetLeft)() -
+                           (pPage->Frame().*aRectFnSet->fnGetLeft)();
+    const sal_uLong nRightMax = (pTab->Frame().*aRectFnSet->fnGetRight)() -
+                            (pPage->Frame().*aRectFnSet->fnGetLeft)();
 
     rFill.SetLeftMin ( nLeftMin );
-    rFill.SetLeft    ( (pTab->Prt().*fnRect->fnGetLeft)() );
-    rFill.SetRight   ( (pTab->Prt().*fnRect->fnGetRight)());
+    rFill.SetLeft    ( (pTab->Prt().*aRectFnSet->fnGetLeft)() );
+    rFill.SetRight   ( (pTab->Prt().*aRectFnSet->fnGetRight)());
     rFill.SetRightMax( nRightMax - nLeftMin );
 
     pTab->GetTable()->GetTabCols( rFill, pBox );
@@ -2611,14 +2611,14 @@ void SwDoc::GetTabRows( SwTabCols &rFill, const SwCursor* ,
     const SwFrame* pFrame = pTab->GetNextLayoutLeaf();
 
     // Set fixed points, LeftMin in Document coordinates, all others relative
-    SWRECTFN( pTab )
+    SwRectFnSet aRectFnSet(pTab);
     const SwPageFrame* pPage = pTab->FindPageFrame();
-    const long nLeftMin  = ( bVert ?
+    const long nLeftMin  = ( aRectFnSet.bVert ?
                              pTab->GetPrtLeft() - pPage->Frame().Left() :
                              pTab->GetPrtTop() - pPage->Frame().Top() );
-    const long nLeft     = bVert ? LONG_MAX : 0;
-    const long nRight    = (pTab->Prt().*fnRect->fnGetHeight)();
-    const long nRightMax = bVert ? nRight : LONG_MAX;
+    const long nLeft     = aRectFnSet.bVert ? LONG_MAX : 0;
+    const long nRight    = (pTab->Prt().*aRectFnSet->fnGetHeight)();
+    const long nRightMax = aRectFnSet.bVert ? nRight : LONG_MAX;
 
     rFill.SetLeftMin( nLeftMin );
     rFill.SetLeft( nLeft );
@@ -2639,8 +2639,8 @@ void SwDoc::GetTabRows( SwTabCols &rFill, const SwCursor* ,
         if ( pFrame->IsCellFrame() && pFrame->FindTabFrame() == pTab )
         {
             // upper and lower borders of current cell frame:
-            long nUpperBorder = (pFrame->Frame().*fnRect->fnGetTop)();
-            long nLowerBorder = (pFrame->Frame().*fnRect->fnGetBottom)();
+            long nUpperBorder = (pFrame->Frame().*aRectFnSet->fnGetTop)();
+            long nLowerBorder = (pFrame->Frame().*aRectFnSet->fnGetBottom)();
 
             // get boundaries for nUpperBorder:
             aIter = aBoundaries.find( nUpperBorder );
@@ -2688,10 +2688,10 @@ void SwDoc::GetTabRows( SwTabCols &rFill, const SwCursor* ,
     size_t nIdx = 0;
     for ( aIter = aBoundaries.begin(); aIter != aBoundaries.end(); ++aIter )
     {
-        const long nTabTop = (pTab->*fnRect->fnGetPrtTop)();
-        const long nKey = (*fnRect->fnYDiff)( (*aIter).first, nTabTop );
+        const long nTabTop = (pTab->*aRectFnSet->fnGetPrtTop)();
+        const long nKey = (*aRectFnSet->fnYDiff)( (*aIter).first, nTabTop );
         const std::pair< long, long > aTmpPair = (*aIter).second;
-        const long nFirst = (*fnRect->fnYDiff)( aTmpPair.first, nTabTop );
+        const long nFirst = (*aRectFnSet->fnYDiff)( aTmpPair.first, nTabTop );
         const long nSecond = aTmpPair.second;
 
         aHiddenIter = aHidden.find( (*aIter).first );
@@ -2729,11 +2729,11 @@ void SwDoc::SetTabCols( const SwTabCols &rNew, bool bCurRowOnly,
     // we need to switch to absolute ones.
     SwTable& rTab = *pTab->GetTable();
     const SwFormatFrameSize& rTableFrameSz = rTab.GetFrameFormat()->GetFrameSize();
-    SWRECTFN( pTab )
+    SwRectFnSet aRectFnSet(pTab);
     // #i17174# - With fix for #i9040# the shadow size is taken
     // from the table width. Thus, add its left and right size to current table
     // printing area width in order to get the correct table size attribute.
-    SwTwips nPrtWidth = (pTab->Prt().*fnRect->fnGetWidth)();
+    SwTwips nPrtWidth = (pTab->Prt().*aRectFnSet->fnGetWidth)();
     {
         SvxShadowItem aShadow( rTab.GetFrameFormat()->GetShadow() );
         nPrtWidth += aShadow.CalcShadowSpace( SvxShadowItemSide::LEFT ) +
@@ -2749,15 +2749,15 @@ void SwDoc::SetTabCols( const SwTabCols &rNew, bool bCurRowOnly,
     SwTabCols aOld( rNew.Count() );
 
     const SwPageFrame* pPage = pTab->FindPageFrame();
-    const sal_uLong nLeftMin = (pTab->Frame().*fnRect->fnGetLeft)() -
-                           (pPage->Frame().*fnRect->fnGetLeft)();
-    const sal_uLong nRightMax = (pTab->Frame().*fnRect->fnGetRight)() -
-                            (pPage->Frame().*fnRect->fnGetLeft)();
+    const sal_uLong nLeftMin = (pTab->Frame().*aRectFnSet->fnGetLeft)() -
+                           (pPage->Frame().*aRectFnSet->fnGetLeft)();
+    const sal_uLong nRightMax = (pTab->Frame().*aRectFnSet->fnGetRight)() -
+                            (pPage->Frame().*aRectFnSet->fnGetLeft)();
 
     // Set fixed points, LeftMin in Document coordinates, all others relative
     aOld.SetLeftMin ( nLeftMin );
-    aOld.SetLeft    ( (pTab->Prt().*fnRect->fnGetLeft)() );
-    aOld.SetRight   ( (pTab->Prt().*fnRect->fnGetRight)());
+    aOld.SetLeft    ( (pTab->Prt().*aRectFnSet->fnGetLeft)() );
+    aOld.SetRight   ( (pTab->Prt().*aRectFnSet->fnGetRight)());
     aOld.SetRightMax( nRightMax - nLeftMin );
 
     rTab.GetTabCols( aOld, pBox );
@@ -2775,15 +2775,15 @@ void SwDoc::SetTabRows( const SwTabCols &rNew, bool bCurColOnly,
 
     // If the Table is still using relative values (USHRT_MAX)
     // we need to switch to absolute ones.
-    SWRECTFN( pTab )
+    SwRectFnSet aRectFnSet(pTab);
     SwTabCols aOld( rNew.Count() );
 
     // Set fixed points, LeftMin in Document coordinates, all others relative
     const SwPageFrame* pPage = pTab->FindPageFrame();
 
-    aOld.SetRight( (pTab->Prt().*fnRect->fnGetHeight)() );
+    aOld.SetRight( (pTab->Prt().*aRectFnSet->fnGetHeight)() );
     long nLeftMin;
-    if ( bVert )
+    if ( aRectFnSet.bVert )
     {
         nLeftMin = pTab->GetPrtLeft() - pPage->Frame().Left();
         aOld.SetLeft    ( LONG_MAX );
@@ -2809,8 +2809,8 @@ void SwDoc::SetTabRows( const SwTabCols &rNew, bool bCurColOnly,
 
     for ( size_t i = 0; i <= nCount; ++i )
     {
-        const size_t nIdxStt = bVert ? nCount - i : i - 1;
-        const size_t nIdxEnd = bVert ? nCount - i - 1 : i;
+        const size_t nIdxStt = aRectFnSet.bVert ? nCount - i : i - 1;
+        const size_t nIdxEnd = aRectFnSet.bVert ? nCount - i - 1 : i;
 
         const long nOldRowStart = i == 0  ? 0 : aOld[ nIdxStt ];
         const long nOldRowEnd =   i == nCount ? aOld.GetRight() : aOld[ nIdxEnd ];
@@ -2837,9 +2837,9 @@ void SwDoc::SetTabRows( const SwTabCols &rNew, bool bCurColOnly,
             {
                 if ( pFrame->IsCellFrame() && pFrame->FindTabFrame() == pTab )
                 {
-                    const long nLowerBorder = (pFrame->Frame().*fnRect->fnGetBottom)();
-                    const sal_uLong nTabTop = (pTab->*fnRect->fnGetPrtTop)();
-                    if ( std::abs( (*fnRect->fnYInc)( nTabTop, nOldRowEnd ) - nLowerBorder ) <= ROWFUZZY )
+                    const long nLowerBorder = (pFrame->Frame().*aRectFnSet->fnGetBottom)();
+                    const sal_uLong nTabTop = (pTab->*aRectFnSet->fnGetPrtTop)();
+                    if ( std::abs( (*aRectFnSet->fnYInc)( nTabTop, nOldRowEnd ) - nLowerBorder ) <= ROWFUZZY )
                     {
                         if ( !bCurColOnly || pFrame == pBoxFrame )
                         {
@@ -2857,7 +2857,7 @@ void SwDoc::SetTabRows( const SwTabCols &rNew, bool bCurColOnly,
                                 {
                                     // The new row height must not to be calculated from a overlapping box
                                     SwFormatFrameSize aNew( pLine->GetFrameFormat()->GetFrameSize() );
-                                    const long nNewSize = (pFrame->Frame().*fnRect->fnGetHeight)() + nDiff;
+                                    const long nNewSize = (pFrame->Frame().*aRectFnSet->fnGetHeight)() + nDiff;
                                     if( nNewSize != aNew.GetHeight() )
                                     {
                                         aNew.SetHeight( nNewSize );
diff --git a/sw/source/core/docnode/ndtbl1.cxx b/sw/source/core/docnode/ndtbl1.cxx
index 7d728a2..15f146c 100644
--- a/sw/source/core/docnode/ndtbl1.cxx
+++ b/sw/source/core/docnode/ndtbl1.cxx
@@ -1272,23 +1272,23 @@ static sal_uInt16 lcl_CalcCellFit( const SwLayoutFrame *pCell )
 {
     SwTwips nRet = 0;
     const SwFrame *pFrame = pCell->Lower(); // The whole Line
-    SWRECTFN( pCell )
+    SwRectFnSet aRectFnSet(pCell);
     while ( pFrame )
     {
-        const SwTwips nAdd = (pFrame->Frame().*fnRect->fnGetWidth)() -
-                             (pFrame->Prt().*fnRect->fnGetWidth)();
+        const SwTwips nAdd = (pFrame->Frame().*aRectFnSet->fnGetWidth)() -
+                             (pFrame->Prt().*aRectFnSet->fnGetWidth)();
 
         // pFrame does not necessarily have to be a SwTextFrame!
         const SwTwips nCalcFitToContent = pFrame->IsTextFrame() ?
                                           const_cast<SwTextFrame*>(static_cast<const SwTextFrame*>(pFrame))->CalcFitToContent() :
-                                          (pFrame->Prt().*fnRect->fnGetWidth)();
+                                          (pFrame->Prt().*aRectFnSet->fnGetWidth)();
 
         nRet = std::max( nRet, nCalcFitToContent + nAdd );
         pFrame = pFrame->GetNext();
     }
     // Surrounding border as well as left and Right Border also need to be respected
-    nRet += (pCell->Frame().*fnRect->fnGetWidth)() -
-            (pCell->Prt().*fnRect->fnGetWidth)();
+    nRet += (pCell->Frame().*aRectFnSet->fnGetWidth)() -
+            (pCell->Prt().*aRectFnSet->fnGetWidth)();
 
     // To compensate for the accuracy of calculation later on in SwTable::SetTabCols
     // we keep adding up a little.
@@ -1317,7 +1317,7 @@ static void lcl_CalcSubColValues( std::vector<sal_uInt16> &rToFill, const SwTabC
                     ::lcl_CalcCellFit( pCell ) :
                     MINLAY + sal_uInt16(pCell->Frame().Width() - pCell->Prt().Width());
 
-    SWRECTFN( pTab )
+    SwRectFnSet aRectFnSet(pTab);
 
     for ( size_t i = 0 ; i <= rCols.Count(); ++i )
     {
@@ -1327,14 +1327,14 @@ static void lcl_CalcSubColValues( std::vector<sal_uInt16> &rToFill, const SwTabC
         nColRight += rCols.GetLeftMin();
 
         // Adapt values to the proportions of the Table (Follows)
-        if ( rCols.GetLeftMin() != (pTab->Frame().*fnRect->fnGetLeft)() )
+        if ( rCols.GetLeftMin() != (pTab->Frame().*aRectFnSet->fnGetLeft)() )
         {
-            const long nDiff = (pTab->Frame().*fnRect->fnGetLeft)() - rCols.GetLeftMin();
+            const long nDiff = (pTab->Frame().*aRectFnSet->fnGetLeft)() - rCols.GetLeftMin();
             nColLeft  += nDiff;
             nColRight += nDiff;
         }
-        const long nCellLeft  = (pCell->Frame().*fnRect->fnGetLeft)();
-        const long nCellRight = (pCell->Frame().*fnRect->fnGetRight)();
+        const long nCellLeft  = (pCell->Frame().*aRectFnSet->fnGetLeft)();
+        const long nCellRight = (pCell->Frame().*aRectFnSet->fnGetRight)();
 
         // Calculate overlapping value
         long nWidth = 0;
@@ -1384,7 +1384,7 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
         const SwTabFrame *pTab = pSelUnion->GetTable();
         const SwRect &rUnion = pSelUnion->GetUnion();
 
-        SWRECTFN( pTab )
+        SwRectFnSet aRectFnSet(pTab);
         bool bRTL = pTab->IsRightToLeft();
 
         const SwLayoutFrame *pCell = pTab->FirstCell();
@@ -1394,8 +1394,8 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
         {
             if ( pCell->IsCellFrame() && pCell->FindTabFrame() == pTab && ::IsFrameInTableSel( rUnion, pCell ) )
             {
-                const long nCLeft  = (pCell->Frame().*fnRect->fnGetLeft)();
-                const long nCRight = (pCell->Frame().*fnRect->fnGetRight)();
+                const long nCLeft  = (pCell->Frame().*aRectFnSet->fnGetLeft)();
+                const long nCRight = (pCell->Frame().*aRectFnSet->fnGetRight)();
 
                 bool bNotInCols = true;
 
@@ -1418,9 +1418,9 @@ static void lcl_CalcColValues( std::vector<sal_uInt16> &rToFill, const SwTabCols
                     // Adapt values to the proportions of the Table (Follows)
                     long nLeftA  = nColLeft;
                     long nRightA = nColRight;
-                    if ( rCols.GetLeftMin() !=  sal_uInt16((pTab->Frame().*fnRect->fnGetLeft)()) )
+                    if ( rCols.GetLeftMin() !=  sal_uInt16((pTab->Frame().*aRectFnSet->fnGetLeft)()) )
                     {
-                        const long nDiff = (pTab->Frame().*fnRect->fnGetLeft)() - rCols.GetLeftMin();
+                        const long nDiff = (pTab->Frame().*aRectFnSet->fnGetLeft)() - rCols.GetLeftMin();
                         nLeftA  += nDiff;
                         nRightA += nDiff;
                     }
diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx
index cda915d..fddaf6e 100644
--- a/sw/source/core/frmedt/fetab.cxx
+++ b/sw/source/core/frmedt/fetab.cxx
@@ -527,21 +527,21 @@ void SwFEShell::GetTabCols_( SwTabCols &rToFill, const SwFrame *pBox ) const
         if (g_pColumnCacheLastTable == pTab->GetTable())
         {
             bDel = false;
-            SWRECTFN( pTab )
+            SwRectFnSet aRectFnSet(pTab);
 
             const SwPageFrame* pPage = pTab->FindPageFrame();
-            const sal_uLong nLeftMin = (pTab->Frame().*fnRect->fnGetLeft)() -
-                                   (pPage->Frame().*fnRect->fnGetLeft)();
-            const sal_uLong nRightMax = (pTab->Frame().*fnRect->fnGetRight)() -
-                                    (pPage->Frame().*fnRect->fnGetLeft)();
+            const sal_uLong nLeftMin = (pTab->Frame().*aRectFnSet->fnGetLeft)() -
+                                   (pPage->Frame().*aRectFnSet->fnGetLeft)();
+            const sal_uLong nRightMax = (pTab->Frame().*aRectFnSet->fnGetRight)() -
+                                    (pPage->Frame().*aRectFnSet->fnGetLeft)();
 
             if (g_pColumnCacheLastTabFrame != pTab)
             {
                 // if TabFrame was changed, we only shift a little bit
                 // as the width is the same
-                SWRECTFNX( g_pColumnCacheLastTabFrame )
+                SwRectFnSet fnRectX(g_pColumnCacheLastTabFrame);
                 if ((g_pColumnCacheLastTabFrame->Frame().*fnRectX->fnGetWidth)() ==
-                    (pTab->Frame().*fnRect->fnGetWidth)() )
+                    (pTab->Frame().*aRectFnSet->fnGetWidth)() )
                 {
                     pLastCols->SetLeftMin( nLeftMin );
 
@@ -553,8 +553,8 @@ void SwFEShell::GetTabCols_( SwTabCols &rToFill, const SwFrame *pBox ) const
 
             if ( !bDel &&
                  pLastCols->GetLeftMin () == (sal_uInt16)nLeftMin &&
-                 pLastCols->GetLeft    () == (sal_uInt16)(pTab->Prt().*fnRect->fnGetLeft)() &&
-                 pLastCols->GetRight   () == (sal_uInt16)(pTab->Prt().*fnRect->fnGetRight)()&&
+                 pLastCols->GetLeft    () == (sal_uInt16)(pTab->Prt().*aRectFnSet->fnGetLeft)() &&
+                 pLastCols->GetRight   () == (sal_uInt16)(pTab->Prt().*aRectFnSet->fnGetRight)()&&
                  pLastCols->GetRightMax() == (sal_uInt16)nRightMax - pLastCols->GetLeftMin() )
             {
                 if (g_pColumnCacheLastCellFrame != pBox)
@@ -600,14 +600,14 @@ void SwFEShell::GetTabRows_( SwTabCols &rToFill, const SwFrame *pBox ) const
         if (g_pRowCacheLastTable == pTab->GetTable())
         {
             bDel = false;
-            SWRECTFN( pTab )
+            SwRectFnSet aRectFnSet(pTab);
             const SwPageFrame* pPage = pTab->FindPageFrame();
-            const long nLeftMin  = ( bVert ?
+            const long nLeftMin  = ( aRectFnSet.bVert ?
                                      pTab->GetPrtLeft() - pPage->Frame().Left() :
                                      pTab->GetPrtTop() - pPage->Frame().Top() );
-            const long nLeft     = bVert ? LONG_MAX : 0;
-            const long nRight    = (pTab->Prt().*fnRect->fnGetHeight)();
-            const long nRightMax = bVert ? nRight : LONG_MAX;
+            const long nLeft     = aRectFnSet.bVert ? LONG_MAX : 0;
+            const long nRight    = (pTab->Prt().*aRectFnSet->fnGetHeight)();
+            const long nRightMax = aRectFnSet.bVert ? nRight : LONG_MAX;
 
             if (g_pRowCacheLastTabFrame != pTab || g_pRowCacheLastCellFrame != pBox)
                 bDel = true;
@@ -1358,7 +1358,7 @@ size_t SwFEShell::GetCurTabColNum() const
 
     size_t nRet = 0;
 
-    SWRECTFN( pFrame )
+    SwRectFnSet aRectFnSet(pFrame);
 
     const SwPageFrame* pPage = pFrame->FindPageFrame();
 
@@ -1368,7 +1368,7 @@ size_t SwFEShell::GetCurTabColNum() const
 
     if( pFrame->FindTabFrame()->IsRightToLeft() )
     {
-        long nX = (pFrame->Frame().*fnRect->fnGetRight)() - (pPage->Frame().*fnRect->fnGetLeft)();
+        long nX = (pFrame->Frame().*aRectFnSet->fnGetRight)() - (pPage->Frame().*aRectFnSet->fnGetLeft)();
 
         const long nRight = aTabCols.GetLeftMin() + aTabCols.GetRight();
 
@@ -1385,8 +1385,8 @@ size_t SwFEShell::GetCurTabColNum() const
     }
     else
     {
-        const long nX = (pFrame->Frame().*fnRect->fnGetLeft)() -
-                        (pPage->Frame().*fnRect->fnGetLeft)();
+        const long nX = (pFrame->Frame().*aRectFnSet->fnGetLeft)() -
+                        (pPage->Frame().*aRectFnSet->fnGetLeft)();
 
         const long nLeft = aTabCols.GetLeftMin();
 
@@ -1467,22 +1467,22 @@ static const SwCellFrame *lcl_FindFrame( const SwLayoutFrame *pLay, const Point
                     // We first check if the given point is 'close' to the left or top
                     // border of the table frame:
                     OSL_ENSURE( pFrame, "Nested table frame without outer table" );
-                    SWRECTFN( pFrame )
+                    SwRectFnSet aRectFnSet(pFrame);
                     const bool bRTL = pFrame->IsRightToLeft();
 
                     SwRect aTabRect = pFrame->Prt();
                     aTabRect.Pos() += pFrame->Frame().Pos();
 
                     const SwTwips nLeft = bRTL ?
-                                          (aTabRect.*fnRect->fnGetRight)() :
-                                          (aTabRect.*fnRect->fnGetLeft)();
-                    const SwTwips nTop  = (aTabRect.*fnRect->fnGetTop)();
+                                          (aTabRect.*aRectFnSet->fnGetRight)() :
+                                          (aTabRect.*aRectFnSet->fnGetLeft)();
+                    const SwTwips nTop  = (aTabRect.*aRectFnSet->fnGetTop)();
 
-                    SwTwips& rPointX = bVert ? aPt.Y() : aPt.X();
-                    SwTwips& rPointY = bVert ? aPt.X() : aPt.Y();
+                    SwTwips& rPointX = aRectFnSet.bVert ? aPt.Y() : aPt.X();
+                    SwTwips& rPointY = aRectFnSet.bVert ? aPt.X() : aPt.Y();
 
-                    const SwTwips nXDiff = (*fnRect->fnXDiff)( nLeft, rPointX ) * ( bRTL ? (-1) : 1 );
-                    const SwTwips nYDiff = (*fnRect->fnYDiff)( nTop, rPointY );
+                    const SwTwips nXDiff = (*aRectFnSet->fnXDiff)( nLeft, rPointX ) * ( bRTL ? (-1) : 1 );
+                    const SwTwips nYDiff = (*aRectFnSet->fnYDiff)( nTop, rPointY );
 
                     bCloseToRow = nXDiff >= 0 && nXDiff < nFuzzy;
                     bCloseToCol = nYDiff >= 0 && nYDiff < nFuzzy;
@@ -1506,7 +1506,7 @@ static const SwCellFrame *lcl_FindFrame( const SwLayoutFrame *pLay, const Point
                     // If we found the point to be 'close' to the left or top border
                     // of the table frame, we adjust the point to be on that border:
                     if ( bCloseToRow && bCloseToCol )
-                        aPt = bRTL ? aTabRect.TopRight() : (aTabRect.*fnRect->fnGetPos)();
+                        aPt = bRTL ? aTabRect.TopRight() : (aTabRect.*aRectFnSet->fnGetPos)();
                     else if ( bCloseToRow )
                         rPointX = nLeft;
                     else if ( bCloseToCol )
@@ -1581,10 +1581,10 @@ static const SwCellFrame *lcl_FindFrame( const SwLayoutFrame *pLay, const Point
                     SwRect aTabRect = pTabFrame->Prt();
                     aTabRect.Pos() += pTabFrame->Frame().Pos();
 
-                    SWRECTFN( pTabFrame )
+                    SwRectFnSet aRectFnSet(pTabFrame);
 
-                    const SwTwips nTabTop  = (aTabRect.*fnRect->fnGetTop)();
-                    const SwTwips nMouseTop  = bVert ? rPt.X() : rPt.Y();
+                    const SwTwips nTabTop  = (aTabRect.*aRectFnSet->fnGetTop)();
+                    const SwTwips nMouseTop = aRectFnSet.bVert ? rPt.X() : rPt.Y();
 
                     // Do not allow to drag upper table border:
                     if ( !::IsSame( nTabTop, nMouseTop ) )
@@ -2186,8 +2186,8 @@ bool SwFEShell::SetColRowWidthHeight( sal_uInt16 eType, sal_uInt16 nDiff )
     // if the table is in relative values (USHRT_MAX)
     // then it should be recalculated to absolute values now
     const SwFormatFrameSize& rTableFrameSz = pTab->GetFormat()->GetFrameSize();
-    SWRECTFN( pTab )
-    long nPrtWidth = (pTab->Prt().*fnRect->fnGetWidth)();
+    SwRectFnSet aRectFnSet(pTab);
+    long nPrtWidth = (pTab->Prt().*aRectFnSet->fnGetWidth)();
     if( TBLVAR_CHGABS == pTab->GetTable()->GetTableChgMode() &&
         ( eType & nsTableChgWidthHeightType::WH_COL_LEFT || eType & nsTableChgWidthHeightType::WH_COL_RIGHT ) &&
         text::HoriOrientation::NONE == pTab->GetFormat()->GetHoriOrient().GetHoriOrient() &&
@@ -2201,7 +2201,7 @@ bool SwFEShell::SetColRowWidthHeight( sal_uInt16 eType, sal_uInt16 nDiff )
     if( (eType & (nsTableChgWidthHeightType::WH_FLAG_BIGGER | nsTableChgWidthHeightType::WH_FLAG_INSDEL)) ==
         (nsTableChgWidthHeightType::WH_FLAG_BIGGER | nsTableChgWidthHeightType::WH_FLAG_INSDEL) )
     {
-        nDiff = sal_uInt16((pFrame->Frame().*fnRect->fnGetWidth)());
+        nDiff = sal_uInt16((pFrame->Frame().*aRectFnSet->fnGetWidth)());
 
         // we must move the cursor outside the current cell before
         // deleting the cells.
diff --git a/sw/source/core/frmedt/fews.cxx b/sw/source/core/frmedt/fews.cxx
index 29ed7cc..e5cbd3b 100644
--- a/sw/source/core/frmedt/fews.cxx
+++ b/sw/source/core/frmedt/fews.cxx
@@ -745,17 +745,17 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
         if ( !pFrame )
             pFrame = pTmp;
         _orRect = pFrame->Frame();
-        SWRECTFN( pFrame )
+        SwRectFnSet aRectFnSet(pFrame);
         bRTL = pFrame->IsRightToLeft();
         if ( bRTL )
             aPos = pFrame->Frame().TopRight();
         else
-            aPos = (pFrame->Frame().*fnRect->fnGetPos)();
+            aPos = (pFrame->Frame().*aRectFnSet->fnGetPos)();
 
-        if( bVert || bVertL2R )
+        if( aRectFnSet.bVert || aRectFnSet.bVertL2R )
         {
-            bVertic = bVert;
-            bVerticalL2R = bVertL2R;
+            bVertic = aRectFnSet.bVert;
+            bVerticalL2R = aRectFnSet.bVertL2R;
             _bMirror = false; // no mirroring in vertical environment
             switch ( _eHoriRelOrient )
             {
@@ -805,7 +805,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
             }
         }
 
-        if ( bVert && !bVertL2R )
+        if ( aRectFnSet.bVert && !aRectFnSet.bVertL2R )
         {
             switch ( _eVertRelOrient )
             {
@@ -817,7 +817,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                 break;
             }
         }
-        else if ( bVertL2R )
+        else if ( aRectFnSet.bVertL2R )
         {
             switch ( _eVertRelOrient )
             {
@@ -856,7 +856,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
     {
         const SwFrame* pUpper = ( pFrame->IsPageFrame() || pFrame->IsFlyFrame() ) ?
                               pFrame : pFrame->GetUpper();
-        SWRECTFN( pUpper );
+        SwRectFnSet aRectFnSet(pUpper);
         if ( _opPercent )
         {
             // If the size is relative from page, then full size should be counted from the page frame.
@@ -876,7 +876,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
         if ( bRTL )
             aPos = pFrame->Frame().TopRight();
         else
-            aPos = (pFrame->Frame().*fnRect->fnGetPos)();
+            aPos = (pFrame->Frame().*aRectFnSet->fnGetPos)();
         // #i17567# - allow negative positions
         // for fly frames anchor to paragraph/to character.
         if ((_nAnchorId == FLY_AT_PARA) || (_nAnchorId == FLY_AT_CHAR))
@@ -904,11 +904,11 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                 // to page areas.
                 if ( _eVertRelOrient == text::RelOrientation::PAGE_FRAME || _eVertRelOrient == text::RelOrientation::PAGE_PRINT_AREA )
                 {
-                    if ( bVert && !bVertL2R )
+                    if ( aRectFnSet.bVert && !aRectFnSet.bVertL2R )
                     {
                         aPos.X() = aVertEnvironRect.Right();
                     }
-                    else if ( bVertL2R )
+                    else if ( aRectFnSet.bVertL2R )
                     {
                         aPos.X() = aVertEnvironRect.Left();
                     }
@@ -928,7 +928,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                 // to page areas.
                 if ( _eVertRelOrient == text::RelOrientation::PAGE_FRAME || _eVertRelOrient == text::RelOrientation::PAGE_PRINT_AREA )
                 {
-                    if ( bVert && !bVertL2R )
+                    if ( aRectFnSet.bVert && !aRectFnSet.bVertL2R )
                     {
                         aPos.X() = aVertEnvironRect.Right();
                         if ( _eVertRelOrient == text::RelOrientation::PAGE_PRINT_AREA )
@@ -936,7 +936,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                             aPos.setX(aPos.getX() - rVertEnvironLayFrame.GetRightMargin());
                         }
                     }
-                    else if ( bVertL2R )
+                    else if ( aRectFnSet.bVertL2R )
                     {
                         aPos.X() = aVertEnvironRect.Left();
                         if ( _eVertRelOrient == text::RelOrientation::PAGE_PRINT_AREA )
@@ -987,7 +987,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                         SwPosition aDefaultContentPos( *(pTextFrame->GetTextNode()) );
                         pTextFrame->GetAutoPos( aChRect, aDefaultContentPos );
                     }
-                    nTop = (aChRect.*fnRect->fnGetBottom)();
+                    nTop = (aChRect.*aRectFnSet->fnGetBottom)();
                 }
                 else
                 {
@@ -1002,7 +1002,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                         pTextFrame->GetTopOfLine( nTop, aDefaultContentPos );
                     }
                 }
-                if ( bVert || bVertL2R )
+                if ( aRectFnSet.bVert || aRectFnSet.bVertL2R )
                 {
                     aPos.setX(nTop);
                 }
@@ -1031,8 +1031,8 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                     SwPosition aDefaultContentPos( *(pTextFrame->GetTextNode()) );
                     pTextFrame->GetAutoPos( aChRect, aDefaultContentPos );
                 }
-                nLeft = (aChRect.*fnRect->fnGetLeft)();
-                if ( bVert || bVertL2R )
+                nLeft = (aChRect.*aRectFnSet->fnGetLeft)();
+                if ( aRectFnSet.bVert || aRectFnSet.bVertL2R )
                 {
                     aPos.setY(nLeft);
                 }
@@ -1041,7 +1041,7 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                     aPos.setX(nLeft);
                 }
             }
-            if ( bVert || bVertL2R )
+            if ( aRectFnSet.bVert || aRectFnSet.bVertL2R )
             {
                 _orRect = SwRect( aVertEnvironRect.Left(),
                                   aHoriEnvironRect.Top(),
@@ -1069,13 +1069,13 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                 if ( pUpper->IsCellFrame() )//MA_FLY_HEIGHT
                 {
                     const SwFrame* pTab = pUpper->FindTabFrame();
-                    long nBottom = (pTab->GetUpper()->*fnRect->fnGetPrtBottom)();
-                    (_orRect.*fnRect->fnSetBottom)( nBottom );
+                    long nBottom = (pTab->GetUpper()->*aRectFnSet->fnGetPrtBottom)();
+                    (_orRect.*aRectFnSet->fnSetBottom)( nBottom );
                 }
             }
             // only use 90% of height for character bound
             {
-                if( bVert || bVertL2R )
+                if( aRectFnSet.bVert || aRectFnSet.bVertL2R )
                     _orRect.Width( (_orRect.Width()*9)/10 );
                 else
                     _orRect.Height( (_orRect.Height()*9)/10 );
@@ -1085,10 +1085,10 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
         const SwTwips nBaseOfstForFly = ( pFrame->IsTextFrame() && pFly ) ?
                                         static_cast<const SwTextFrame*>(pFrame)->GetBaseOfstForFly( !bWrapThrough ) :
                                          0;
-        if( bVert || bVertL2R )
+        if( aRectFnSet.bVert || aRectFnSet.bVertL2R )
         {
-            bVertic = bVert;
-            bVerticalL2R = bVertL2R;
+            bVertic = aRectFnSet.bVert;
+            bVerticalL2R = aRectFnSet.bVertL2R;
             _bMirror = false;
 
             switch ( _eHoriRelOrient )
@@ -1096,12 +1096,12 @@ void SwFEShell::CalcBoundRect( SwRect& _orRect,
                 case text::RelOrientation::FRAME_RIGHT:
                 {
                     aPos.setY(aPos.getY() + pFrame->Prt().Height());
-                    aPos += (pFrame->Prt().*fnRect->fnGetPos)();
+                    aPos += (pFrame->Prt().*aRectFnSet->fnGetPos)();
                     break;
                 }
                 case text::RelOrientation::PRINT_AREA:
                 {
-                    aPos += (pFrame->Prt().*fnRect->fnGetPos)();
+                    aPos += (pFrame->Prt().*aRectFnSet->fnGetPos)();
                     aPos.setY(aPos.getY() + nBaseOfstForFly);
                     break;
                 }
diff --git a/sw/source/core/frmedt/tblsel.cxx b/sw/source/core/frmedt/tblsel.cxx
index 1410901..610b83e 100644
--- a/sw/source/core/frmedt/tblsel.cxx
+++ b/sw/source/core/frmedt/tblsel.cxx
@@ -474,7 +474,7 @@ bool ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd )
             SwSelUnion *pUnion = &rSelUnion;
             const SwTabFrame *pTable = pUnion->GetTable();
 
-            SWRECTFN( pTable )
+            SwRectFnSet aRectFnSet(pTable);
             bool bRTL = pTable->IsRightToLeft();
 
             if( !pTable->IsValid() && nLoopMax  )
@@ -522,8 +522,8 @@ bool ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd )
 
                         // ignore if FrameRect is outside the union
 
-                        const long nXFuzzy = bVert ? 0 : 20;
-                        const long nYFuzzy = bVert ? 20 : 0;
+                        const long nXFuzzy = aRectFnSet.bVert ? 0 : 20;
+                        const long nYFuzzy = aRectFnSet.bVert ? 20 : 0;
 
                         if( !(  rUnion.Top()  + nYFuzzy > nFrameBottom ||
                                 nUnionBottom < rFrameRect.Top() + nYFuzzy ||
@@ -578,7 +578,7 @@ bool ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd )
             for( n = 0 ; n < aCellFrames.size(); ++n )
             {
                 const Sort_CellFrame& rCF = aCellFrames[ n ];
-                if( (rCF.pFrame->Frame().*fnRect->fnGetTop)() != nYPos )
+                if( (rCF.pFrame->Frame().*aRectFnSet->fnGetTop)() != nYPos )
                 {
                     // new row
                     if( n )
@@ -592,20 +592,20 @@ bool ChkChartSel( const SwNode& rSttNd, const SwNode& rEndNd )
                         }
                     }
                     nCellCnt = 1;
-                    nYPos = (rCF.pFrame->Frame().*fnRect->fnGetTop)();
-                    nHeight = (rCF.pFrame->Frame().*fnRect->fnGetHeight)();
+                    nYPos = (rCF.pFrame->Frame().*aRectFnSet->fnGetTop)();
+                    nHeight = (rCF.pFrame->Frame().*aRectFnSet->fnGetHeight)();
 
                     nXPos = bRTL ?
-                            (rCF.pFrame->Frame().*fnRect->fnGetLeft)() :
-                            (rCF.pFrame->Frame().*fnRect->fnGetRight)();
+                            (rCF.pFrame->Frame().*aRectFnSet->fnGetLeft)() :
+                            (rCF.pFrame->Frame().*aRectFnSet->fnGetRight)();
                 }
                 else if( nXPos == ( bRTL ?
-                                    (rCF.pFrame->Frame().*fnRect->fnGetRight)() :
-                                    (rCF.pFrame->Frame().*fnRect->fnGetLeft)() ) &&
-                         nHeight == (rCF.pFrame->Frame().*fnRect->fnGetHeight)() )
+                                    (rCF.pFrame->Frame().*aRectFnSet->fnGetRight)() :
+                                    (rCF.pFrame->Frame().*aRectFnSet->fnGetLeft)() ) &&
+                         nHeight == (rCF.pFrame->Frame().*aRectFnSet->fnGetHeight)() )
                 {
                     nXPos += ( bRTL ? (-1) : 1 ) *
-                             (rCF.pFrame->Frame().*fnRect->fnGetWidth)();
+                             (rCF.pFrame->Frame().*aRectFnSet->fnGetWidth)();
                     ++nCellCnt;
                 }
                 else
@@ -934,7 +934,7 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
     long nWidth;
     SwTableBox* pLastBox = nullptr;
 
-    SWRECTFN( pStart->GetUpper() )
+    SwRectFnSet aRectFnSet(pStart->GetUpper());
 
     for ( auto & rSelUnion : aUnions )
     {
@@ -983,8 +983,8 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
                                 pLastBox = pBox;
                                 rBoxes.insert( pBox );
                                 aPosArr.insert(
-                                    CmpLPt( (pCell->Frame().*fnRect->fnGetPos)(),
-                                    pBox, bVert ) );
+                                    CmpLPt( (pCell->Frame().*aRectFnSet->fnGetPos)(),
+                                    pBox, aRectFnSet.bVert ) );
 
                                 pBox = pBox->GetUpper()->GetTabBoxes()[ nInsPos ];
                                 aNew.SetWidth( nTmpWidth );
@@ -1000,8 +1000,8 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
                                 pLastBox = pBox;
                                 rBoxes.insert( pBox );
                                 aPosArr.insert(
-                                    CmpLPt( (pCell->Frame().*fnRect->fnGetPos)(),
-                                    pBox, bVert ) );
+                                    CmpLPt( (pCell->Frame().*aRectFnSet->fnGetPos)(),
+                                    pBox, aRectFnSet.bVert ) );
                             }
                         }
                         // overlapping on left- or right-side
@@ -1047,8 +1047,8 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
                             pLastBox = pBox;
                             rBoxes.insert( pBox );
                             aPosArr.insert(
-                                CmpLPt( (pCell->Frame().*fnRect->fnGetPos)(),
-                                pBox, bVert ) );
+                                CmpLPt( (pCell->Frame().*aRectFnSet->fnGetPos)(),
+                                pBox, aRectFnSet.bVert ) );
 
                             pBox = pBox->GetUpper()->GetTabBoxes()[ nInsPos+1 ];
                             aNew.SetWidth( nRight );
@@ -1088,7 +1088,7 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
                             pLastBox = pBox;
                             rBoxes.insert( pBox );
                             aPosArr.insert( CmpLPt( Point( rUnion.Left(),
-                                                pCell->Frame().Top()), pBox, bVert ));
+                                                pCell->Frame().Top()), pBox, aRectFnSet.bVert ));
 
                             if( pUndo )
                                 pUndo->AddNewBox( pBox->GetSttIdx() );
@@ -1266,7 +1266,7 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
 
         nWidth = 0;
         long nY = !aPosArr.empty() ?
-                    ( bVert ?
+                    ( aRectFnSet.bVert ?
                       aPosArr[ 0 ].X() :
                       aPosArr[ 0 ].Y() ) :
                   0;
@@ -1276,7 +1276,7 @@ void GetMergeSel( const SwPaM& rPam, SwSelBoxes& rBoxes,
             const CmpLPt& rPt = aPosArr[ n ];
             if( bCalcWidth )
             {
-                if( nY == ( bVert ? rPt.X() : rPt.Y() ) ) // same Y level?
+                if( nY == ( aRectFnSet.bVert ? rPt.X() : rPt.Y() ) ) // same Y level?
                     nWidth += rPt.pSelBox->GetFrameFormat()->GetFrameSize().GetWidth();
                 else
                     bCalcWidth = false;     // one line ready
@@ -1593,7 +1593,7 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
     const SwTabFrame *pOrg = rpStart->FindTabFrame();
     const SwTabFrame *pTab = pOrg;
 
-    SWRECTFN( pTab )
+    SwRectFnSet aRectFnSet(pTab);
 
     bool bRTL = pTab->IsRightToLeft();
     const long nTmpWish = pOrg->GetFormat()->GetFrameSize().GetWidth();
@@ -1611,13 +1611,13 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
 
     if ( pTab->GetTable()->IsNewModel() )
     {
-        nSX  = (rpStart->Frame().*fnRect->fnGetLeft )();
-        nSX2 = (rpStart->Frame().*fnRect->fnGetRight)();
+        nSX  = (rpStart->Frame().*aRectFnSet->fnGetLeft )();
+        nSX2 = (rpStart->Frame().*aRectFnSet->fnGetRight)();
     }
     else
     {
-        const SwTwips nPrtWidth = (pTab->Prt().*fnRect->fnGetWidth)();
-        nSX = ::lcl_CalcWish( rpStart, nWish, nPrtWidth ) + (pTab->*fnRect->fnGetPrtLeft)();
+        const SwTwips nPrtWidth = (pTab->Prt().*aRectFnSet->fnGetWidth)();
+        nSX = ::lcl_CalcWish( rpStart, nWish, nPrtWidth ) + (pTab->*aRectFnSet->fnGetPrtLeft)();
         nSX2 = nSX + (rpStart->GetFormat()->GetFrameSize().GetWidth() * nPrtWidth / nWish);
     }
 
@@ -1625,10 +1625,10 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
 
     while ( pTmp &&
             (!pTmp->IsCellFrame() ||
-             ( ( ! bRTL && (pTmp->Frame().*fnRect->fnGetLeft)() < nSX &&
-                           (pTmp->Frame().*fnRect->fnGetRight)()< nSX2 ) ||
-               (   bRTL && (pTmp->Frame().*fnRect->fnGetLeft)() > nSX &&
-                           (pTmp->Frame().*fnRect->fnGetRight)()> nSX2 ) ) ) )
+             ( ( ! bRTL && (pTmp->Frame().*aRectFnSet->fnGetLeft)() < nSX &&
+                           (pTmp->Frame().*aRectFnSet->fnGetRight)()< nSX2 ) ||
+               (   bRTL && (pTmp->Frame().*aRectFnSet->fnGetLeft)() > nSX &&
+                           (pTmp->Frame().*aRectFnSet->fnGetRight)()> nSX2 ) ) ) )
         pTmp = pTmp->GetNextLayoutLeaf();
 
     if ( pTmp )
@@ -1660,12 +1660,12 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
 
     if ( pTab->GetTable()->IsNewModel() )
     {
-        nEX = (rpEnd->Frame().*fnRect->fnGetLeft )();
+        nEX = (rpEnd->Frame().*aRectFnSet->fnGetLeft )();
     }
     else
     {
-        const SwTwips nPrtWidth = (pTab->Prt().*fnRect->fnGetWidth)();
-        nEX = ::lcl_CalcWish( rpEnd, nWish, nPrtWidth ) + (pTab->*fnRect->fnGetPrtLeft)();
+        const SwTwips nPrtWidth = (pTab->Prt().*aRectFnSet->fnGetWidth)();
+        nEX = ::lcl_CalcWish( rpEnd, nWish, nPrtWidth ) + (pTab->*aRectFnSet->fnGetPrtLeft)();
     }
 
     const SwContentFrame* pLastContent = pTab->FindLastContent();
@@ -1677,8 +1677,8 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
     while( !rpEnd->IsCellFrame() )
         rpEnd = rpEnd->GetUpper();
 
-    while ( (   bRTL && (rpEnd->Frame().*fnRect->fnGetLeft)() < nEX ) ||
-            ( ! bRTL && (rpEnd->Frame().*fnRect->fnGetLeft)() > nEX ) )
+    while ( (   bRTL && (rpEnd->Frame().*aRectFnSet->fnGetLeft)() < nEX ) ||
+            ( ! bRTL && (rpEnd->Frame().*aRectFnSet->fnGetLeft)() > nEX ) )
     {
         const SwLayoutFrame* pTmpLeaf = rpEnd->GetPrevLayoutLeaf();
         if( !pTmpLeaf || !pTab->IsAnLower( pTmpLeaf ) )
@@ -1695,10 +1695,10 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
     {
         const SwLayoutFrame *pTmpLeaf = rpStart;
         pTmpLeaf = pTmpLeaf->GetNextLayoutLeaf();
-        while ( pTmpLeaf && (pTmpLeaf->Frame().*fnRect->fnGetLeft)() > nEX ) // first skip line
+        while ( pTmpLeaf && (pTmpLeaf->Frame().*aRectFnSet->fnGetLeft)() > nEX ) // first skip line
             pTmpLeaf = pTmpLeaf->GetNextLayoutLeaf();
-        while ( pTmpLeaf && (pTmpLeaf->Frame().*fnRect->fnGetLeft)() < nSX &&
-                            (pTmpLeaf->Frame().*fnRect->fnGetRight)()< nSX2 )
+        while ( pTmpLeaf && (pTmpLeaf->Frame().*aRectFnSet->fnGetLeft)() < nSX &&
+                            (pTmpLeaf->Frame().*aRectFnSet->fnGetRight)()< nSX2 )
             pTmpLeaf = pTmpLeaf->GetNextLayoutLeaf();
         const SwTabFrame *pTmpTab = rpStart->FindTabFrame();
         if ( !pTmpTab->IsAnLower( pTmpLeaf ) )
@@ -1706,8 +1706,8 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
             pTmpTab = pTmpTab->GetFollow();
             rpStart = pTmpTab->FirstCell();
             while ( rpStart &&
-                    (rpStart->Frame().*fnRect->fnGetLeft)() < nSX &&
-                    (rpStart->Frame().*fnRect->fnGetRight)()< nSX2 )
+                    (rpStart->Frame().*aRectFnSet->fnGetLeft)() < nSX &&
+                    (rpStart->Frame().*aRectFnSet->fnGetRight)()< nSX2 )
                 rpStart = rpStart->GetNextLayoutLeaf();
         }
         else
@@ -1717,9 +1717,9 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
     {
         const SwLayoutFrame *pTmpLeaf = rpEnd;
         pTmpLeaf = pTmpLeaf->GetPrevLayoutLeaf();
-        while ( pTmpLeaf && (pTmpLeaf->Frame().*fnRect->fnGetLeft)() < nEX )//erstmal die Zeile ueberspr.
+        while ( pTmpLeaf && (pTmpLeaf->Frame().*aRectFnSet->fnGetLeft)() < nEX )//erstmal die Zeile ueberspr.
             pTmpLeaf = pTmpLeaf->GetPrevLayoutLeaf();
-        while ( pTmpLeaf && (pTmpLeaf->Frame().*fnRect->fnGetLeft)() > nEX )
+        while ( pTmpLeaf && (pTmpLeaf->Frame().*aRectFnSet->fnGetLeft)() > nEX )
             pTmpLeaf = pTmpLeaf->GetPrevLayoutLeaf();
         const SwTabFrame *pTmpTab = rpEnd->FindTabFrame();
         if ( !pTmpLeaf || !pTmpTab->IsAnLower( pTmpLeaf ) )
@@ -1729,7 +1729,7 @@ static void lcl_FindStartEndCol( const SwLayoutFrame *&rpStart,
             rpEnd = pTmpTab->FindLastContent()->GetUpper();
             while( !rpEnd->IsCellFrame() )
                 rpEnd = rpEnd->GetUpper();
-            while ( (rpEnd->Frame().*fnRect->fnGetLeft)() > nEX )
+            while ( (rpEnd->Frame().*aRectFnSet->fnGetLeft)() > nEX )
                 rpEnd = rpEnd->GetPrevLayoutLeaf();
         }
         else
@@ -1767,16 +1767,16 @@ void MakeSelUnions( SwSelUnions& rUnions, const SwLayoutFrame *pStart,
     }
     else
     {
-        SWRECTFN( pTable )
-        long nSttTop = (pStart->Frame().*fnRect->fnGetTop)();
-        long nEndTop = (pEnd->Frame().*fnRect->fnGetTop)();
+        SwRectFnSet aRectFnSet(pTable);
+        long nSttTop = (pStart->Frame().*aRectFnSet->fnGetTop)();
+        long nEndTop = (pEnd->Frame().*aRectFnSet->fnGetTop)();
         if( nSttTop == nEndTop )
         {
-            if( (pStart->Frame().*fnRect->fnGetLeft)() >
-                (pEnd->Frame().*fnRect->fnGetLeft)() )
+            if( (pStart->Frame().*aRectFnSet->fnGetLeft)() >
+                (pEnd->Frame().*aRectFnSet->fnGetLeft)() )
                 bExchange = true;
         }
-        else if( bVert == ( nSttTop < nEndTop ) )
+        else if( aRectFnSet.bVert == ( nSttTop < nEndTop ) )
             bExchange = true;
     }
     if ( bExchange )
@@ -1806,9 +1806,9 @@ void MakeSelUnions( SwSelUnions& rUnions, const SwLayoutFrame *pStart,
     const long nWish = std::max( 1L, pTable->GetFormat()->GetFrameSize().GetWidth() );
     while ( pTable )
     {
-        SWRECTFN( pTable )
-        const long nOfst = (pTable->*fnRect->fnGetPrtLeft)();
-        const long nPrtWidth = (pTable->Prt().*fnRect->fnGetWidth)();
+        SwRectFnSet aRectFnSet(pTable);
+        const long nOfst = (pTable->*aRectFnSet->fnGetPrtLeft)();
+        const long nPrtWidth = (pTable->Prt().*aRectFnSet->fnGetWidth)();
         long nSt1 = ::lcl_CalcWish( pStart, nWish, nPrtWidth ) + nOfst;
         long nEd1 = ::lcl_CalcWish( pEnd,   nWish, nPrtWidth ) + nOfst;
 
@@ -1820,13 +1820,13 @@ void MakeSelUnions( SwSelUnions& rUnions, const SwLayoutFrame *pStart,
         long nSt2;
         long nEd2;
         if( pTable->IsAnLower( pStart ) )
-            nSt2 = (pStart->Frame().*fnRect->fnGetTop)();
+            nSt2 = (pStart->Frame().*aRectFnSet->fnGetTop)();
         else
-            nSt2 = (pTable->Frame().*fnRect->fnGetTop)();
+            nSt2 = (pTable->Frame().*aRectFnSet->fnGetTop)();
         if( pTable->IsAnLower( pEnd ) )
-            nEd2 = (pEnd->Frame().*fnRect->fnGetBottom)();
+            nEd2 = (pEnd->Frame().*aRectFnSet->fnGetBottom)();
         else
-            nEd2 = (pTable->Frame().*fnRect->fnGetBottom)();
+            nEd2 = (pTable->Frame().*aRectFnSet->fnGetBottom)();
         Point aSt, aEd;
         if( nSt1 > nEd1 )
         {
@@ -1840,7 +1840,7 @@ void MakeSelUnions( SwSelUnions& rUnions, const SwLayoutFrame *pStart,
             nSt2 = nEd2;
             nEd2 = nTmp;
         }
-        if( bVert )
+        if( aRectFnSet.bVert )
         {
             aSt = Point( nSt2, nSt1 );
             aEd = Point( nEd2, nEd1 );
@@ -1918,7 +1918,7 @@ void MakeSelUnions( SwSelUnions& rUnions, const SwLayoutFrame *pStart,
                 aUnion.Width( 0 );
         }
 
-        if( (aUnion.*fnRect->fnGetWidth)() )
+        if( (aUnion.*aRectFnSet->fnGetWidth)() )
         {
             rUnions.push_back(SwSelUnion(aUnion, const_cast<SwTabFrame*>(pTable)));
         }
@@ -1962,7 +1962,7 @@ bool CheckSplitCells( const SwCursor& rCursor, sal_uInt16 nDiv,
     const SwLayoutFrame *pEnd = pCntNd->getLayoutFrame( pCntNd->GetDoc()->getIDocumentLayoutAccess().GetCurrentLayout(),
                                 &aMkPos )->GetUpper();
 
-    SWRECTFN( pStart->GetUpper() )
+    SwRectFnSet aRectFnSet(pStart->GetUpper());
 
     // First, compute tables and rectangles
     SwSelUnions aUnions;
@@ -1990,7 +1990,7 @@ bool CheckSplitCells( const SwCursor& rCursor, sal_uInt16 nDiv,
                     OSL_ENSURE( pCell->IsCellFrame(), "Frame without cell" );
                     if( ::IsFrameInTableSel( rSelUnion.GetUnion(), pCell ) )
                     {
-                        if( (pCell->Frame().*fnRect->fnGetWidth)() < nMinValue )
+                        if( (pCell->Frame().*aRectFnSet->fnGetWidth)() < nMinValue )
                             return false;
                     }
 
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx
index fe43d48..95ec45a 100644
--- a/sw/source/core/inc/frame.hxx
+++ b/sw/source/core/inc/frame.hxx
@@ -1144,30 +1144,41 @@ struct SwRectFnCollection
 typedef SwRectFnCollection* SwRectFn;
 
 extern SwRectFn fnRectHori, fnRectVert, fnRectB2T, fnRectVL2R, fnRectVertL2R;
-#define SWRECTFN( pFrame )    bool bVert = pFrame->IsVertical(); \
-                            bool bRev = pFrame->IsReverse(); \
-                            bool bVertL2R = pFrame->IsVertLR(); \
-                            SwRectFn fnRect = bVert ? \
-                                ( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
-                                ( bRev ? fnRectB2T : fnRectHori );
-#define SWRECTFNX( pFrame )   bool bVertX = pFrame->IsVertical(); \
-                            bool bRevX = pFrame->IsReverse(); \
-                            bool bVertL2RX = pFrame->IsVertLR(); \
-                            SwRectFn fnRectX = bVertX ? \
-                                ( bRevX ? fnRectVL2R : ( bVertL2RX ? fnRectVertL2R : fnRectVert ) ): \
-                                ( bRevX ? fnRectB2T : fnRectHori );
-#define SWREFRESHFN( pFrame ) { if( bVert != pFrame->IsVertical() || \
-                                  bRev  != pFrame->IsReverse() ) \
-                                bVert = pFrame->IsVertical(); \
-                                bRev = pFrame->IsReverse(); \
-                                bVertL2R = pFrame->IsVertLR(); \
-                                fnRect = bVert ? \
-                                    ( bRev ? fnRectVL2R : ( bVertL2R ? fnRectVertL2R : fnRectVert ) ): \
-                                    ( bRev ? fnRectB2T : fnRectHori ); }
-
-#define POS_DIFF( aFrame1, aFrame2 ) \
-            ( (aFrame1.*fnRect->fnGetTop)() != (aFrame2.*fnRect->fnGetTop)() || \
-            (aFrame1.*fnRect->fnGetLeft)() != (aFrame2.*fnRect->fnGetLeft)() )
+struct SwRectFnSet {
+    bool bVert;
+    bool bRev;
+    bool bVertL2R;
+    SwRectFn fnRect;
+
+    explicit SwRectFnSet(const SwFrame *pFrame)
+        : bVert(pFrame->IsVertical())
+        , bRev(pFrame->IsReverse())
+        , bVertL2R(pFrame->IsVertLR())
+    {
+        fnRect = bVert ?
+            (bRev ? fnRectVL2R : (bVertL2R ? fnRectVertL2R : fnRectVert)) :
+            (bRev ? fnRectB2T : fnRectHori);
+    }
+
+    // Convenience operator to simplify pointer-to-member syntax
+    SwRectFn operator ->() const { return fnRect; }
+
+    void Refresh(const SwFrame *pFrame)
+    {
+        bVert = pFrame->IsVertical();
+        bRev = pFrame->IsReverse();
+        bVertL2R = pFrame->IsVertLR();
+        fnRect = bVert ?
+            (bRev ? fnRectVL2R : (bVertL2R ? fnRectVertL2R : fnRectVert)) :
+            (bRev ? fnRectB2T : fnRectHori);
+    }
+
+    bool PosDiff(const SwRect &rRect1, const SwRect &rRect2)
+    {
+        return ((rRect1.*fnRect->fnGetTop)() != (rRect2.*fnRect->fnGetTop)()
+            || (rRect1.*fnRect->fnGetLeft)() != (rRect2.*fnRect->fnGetLeft)());
+    }
+};
 
 #endif
 
diff --git a/sw/source/core/layout/anchoreddrawobject.cxx b/sw/source/core/layout/anchoreddrawobject.cxx
index ba0dd96..9559b30 100644
--- a/sw/source/core/layout/anchoreddrawobject.cxx
+++ b/sw/source/core/layout/anchoreddrawobject.cxx
@@ -485,8 +485,8 @@ void SwAnchoredDrawObject::MakeObjPosAnchoredAtLayout()
     }
     SetCurrRelPos( aObjPositioning.GetRelPos() );
     const SwFrame* pAnchorFrame = GetAnchorFrame();
-    SWRECTFN( pAnchorFrame );
-    const Point aAnchPos( (pAnchorFrame->Frame().*fnRect->fnGetPos)() );
+    SwRectFnSet aRectFnSet(pAnchorFrame);
+    const Point aAnchPos( (pAnchorFrame->Frame().*aRectFnSet->fnGetPos)() );
     SetObjLeft( aAnchPos.X() + GetCurrRelPos().X() );
     SetObjTop( aAnchPos.Y() + GetCurrRelPos().Y() );
 }
diff --git a/sw/source/core/layout/anchoredobject.cxx b/sw/source/core/layout/anchoredobject.cxx
index 36d24d3..20c4a3c 100644
--- a/sw/source/core/layout/anchoredobject.cxx
+++ b/sw/source/core/layout/anchoredobject.cxx
@@ -262,7 +262,7 @@ void SwAnchoredObject::CheckCharRect( const SwFormatAnchor& _rAnch,
     {
         // check positioning and alignment for invalidation of position
         {
-            SWRECTFN( (&_rAnchorCharFrame) );
+            SwRectFnSet aRectFnSet(&_rAnchorCharFrame);
             // determine positioning and alignment
             SwFormatVertOrient aVert( GetFrameFormat().GetVertOrient() );
             SwFormatHoriOrient aHori( GetFrameFormat().GetHoriOrient() );
@@ -273,19 +273,19 @@ void SwAnchoredObject::CheckCharRect( const SwFormatAnchor& _rAnch,
             // of anchor character has changed.
             const sal_Int16 eVertRelOrient = aVert.GetRelationOrient();
             if ( ( aHori.GetRelationOrient() == text::RelOrientation::CHAR &&
-                   (aCharRect.*fnRect->fnGetLeft)() !=
-                        (maLastCharRect.*fnRect->fnGetLeft)() ) ||
+                   (aCharRect.*aRectFnSet->fnGetLeft)() !=
+                        (maLastCharRect.*aRectFnSet->fnGetLeft)() ) ||
                  ( eVertRelOrient == text::RelOrientation::CHAR &&
-                   ( (aCharRect.*fnRect->fnGetTop)() !=
-                        (maLastCharRect.*fnRect->fnGetTop)() ||
-                     (aCharRect.*fnRect->fnGetHeight)() !=
-                        (maLastCharRect.*fnRect->fnGetHeight)() ) ) ||
+                   ( (aCharRect.*aRectFnSet->fnGetTop)() !=
+                        (maLastCharRect.*aRectFnSet->fnGetTop)() ||
+                     (aCharRect.*aRectFnSet->fnGetHeight)() !=
+                        (maLastCharRect.*aRectFnSet->fnGetHeight)() ) ) ||
                  ( ( ( eVertRelOrient == text::RelOrientation::FRAME ) ||
                      ( eVertRelOrient == text::RelOrientation::PRINT_AREA ) ||
                      ( eVertRelOrient == text::RelOrientation::PAGE_FRAME ) ||
                      ( eVertRelOrient == text::RelOrientation::PAGE_PRINT_AREA ) ) &&
-                   ( (aCharRect.*fnRect->fnGetTop)() !=
-                        (maLastCharRect.*fnRect->fnGetTop)() ) ) )
+                   ( (aCharRect.*aRectFnSet->fnGetTop)() !=
+                        (maLastCharRect.*aRectFnSet->fnGetTop)() ) ) )
             {
                 // #i26945#, #i35911# - unlock position of
                 // anchored object, if it isn't registered at the page,
diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx
index ef51393..c7ebf84 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -91,10 +91,10 @@ bool SwContentFrame::ShouldBwdMoved( SwLayoutFrame *pNewUpper, bool, bool & )
                     return false;
             }
         }
-        SWRECTFN( this )
-        SWRECTFNX( pNewUpper )
+        SwRectFnSet aRectFnSet(this);
+        SwRectFnSet fnRectX(pNewUpper);
         if( std::abs( (pNewUpper->Prt().*fnRectX->fnGetWidth)() -
-                 (GetUpper()->Prt().*fnRect->fnGetWidth)() ) > 1 ) {
+                 (GetUpper()->Prt().*aRectFnSet->fnGetWidth)() ) > 1 ) {
             // In this case, only a WouldFit_ with test move is possible
             nMoveAnyway = 2;
         }
@@ -492,7 +492,7 @@ void SwFrame::MakePos()
 
         pPrv = lcl_Prev( this, false );
         const SwFrameType nMyType = GetType();
-        SWRECTFN( ( IsCellFrame() && GetUpper() ? GetUpper() : this  ) )
+        SwRectFnSet aRectFnSet((IsCellFrame() && GetUpper() ? GetUpper() : this));
         if ( !bUseUpper && pPrv )
         {
             maFrame.Pos( pPrv->Frame().Pos() );
@@ -500,23 +500,23 @@ void SwFrame::MakePos()
             {
                 bool bR2L = IsRightToLeft();
                 if( bR2L )
-                    (maFrame.*fnRect->fnSetPosX)( (maFrame.*fnRect->fnGetLeft)() -
-                                               (maFrame.*fnRect->fnGetWidth)() );
+                    (maFrame.*aRectFnSet->fnSetPosX)( (maFrame.*aRectFnSet->fnGetLeft)() -
+                                               (maFrame.*aRectFnSet->fnGetWidth)() );
                 else
-                    (maFrame.*fnRect->fnSetPosX)( (maFrame.*fnRect->fnGetLeft)() +
-                                          (pPrv->Frame().*fnRect->fnGetWidth)() );
+                    (maFrame.*aRectFnSet->fnSetPosX)( (maFrame.*aRectFnSet->fnGetLeft)() +
+                                          (pPrv->Frame().*aRectFnSet->fnGetWidth)() );
 
                 // cells may now leave their uppers
-                if( bVert && SwFrameType::Cell & nMyType && !mbReverse )
+                if( aRectFnSet.bVert && SwFrameType::Cell & nMyType && !mbReverse )
                     maFrame.Pos().setX(maFrame.Pos().getX() - maFrame.Width() + pPrv->Frame().Width());
             }
-            else if( bVert && FRM_NOTE_VERT & nMyType )
+            else if( aRectFnSet.bVert && FRM_NOTE_VERT & nMyType )
             {
                 if( mbReverse )
                     maFrame.Pos().setX(maFrame.Pos().getX() + pPrv->Frame().Width());
                 else
                 {
-                    if ( bVertL2R )
+                    if ( aRectFnSet.bVertL2R )
                            maFrame.Pos().setX(maFrame.Pos().getX() + pPrv->Frame().Width());
                     else
                            maFrame.Pos().setX(maFrame.Pos().getX() - maFrame.Width());
@@ -554,17 +554,17 @@ void SwFrame::MakePos()
                 {
                     bool bR2L = IsRightToLeft();
                     if( bR2L )
-                        (maFrame.*fnRect->fnSetPosX)( (maFrame.*fnRect->fnGetLeft)() -
-                                                 (maFrame.*fnRect->fnGetWidth)() );
+                        (maFrame.*aRectFnSet->fnSetPosX)( (maFrame.*aRectFnSet->fnGetLeft)() -
+                                                 (maFrame.*aRectFnSet->fnGetWidth)() );
                     else
-                        (maFrame.*fnRect->fnSetPosX)( (maFrame.*fnRect->fnGetLeft)() +
-                                          (pPrv->Frame().*fnRect->fnGetWidth)() );
+                        (maFrame.*aRectFnSet->fnSetPosX)( (maFrame.*aRectFnSet->fnGetLeft)() +
+                                          (pPrv->Frame().*aRectFnSet->fnGetWidth)() );
 
                     // cells may now leave their uppers
-                    if( bVert && SwFrameType::Cell & nMyType && !mbReverse )
+                    if( aRectFnSet.bVert && SwFrameType::Cell & nMyType && !mbReverse )
                         maFrame.Pos().setX(maFrame.Pos().getX() - maFrame.Width() + pPrv->Frame().Width());
                 }
-                else if( bVert && FRM_NOTE_VERT & nMyType )
+                else if( aRectFnSet.bVert && FRM_NOTE_VERT & nMyType )
                 {
                     if( mbReverse )
                         maFrame.Pos().setX(maFrame.Pos().getX() + pPrv->Frame().Width());
@@ -584,14 +584,14 @@ void SwFrame::MakePos()
 
                 if( FRM_NEIGHBOUR & nMyType && IsRightToLeft() )
                 {
-                    if( bVert )
+                    if( aRectFnSet.bVert )
                         maFrame.Pos().setY(maFrame.Pos().getY() + GetUpper()->Prt().Height()
                                           - maFrame.Height());
                     else
                         maFrame.Pos().setX(maFrame.Pos().getX() + GetUpper()->Prt().Width()
                                           - maFrame.Width());
                 }
-                else if( bVert && !bVertL2R && FRM_NOTE_VERT & nMyType && !mbReverse )
+                else if( aRectFnSet.bVert && !aRectFnSet.bVertL2R && FRM_NOTE_VERT & nMyType && !mbReverse )
                     maFrame.Pos().setX(maFrame.Pos().getX() - maFrame.Width() + GetUpper()->Prt().Width());
             }
         }
@@ -601,7 +601,7 @@ void SwFrame::MakePos()
             maFrame.Pos().setY(0);
         }
 
-        if( IsBodyFrame() && bVert && !bVertL2R && !mbReverse && GetUpper() )
+        if( IsBodyFrame() && aRectFnSet.bVert && !aRectFnSet.bVertL2R && !mbReverse && GetUpper() )
             maFrame.Pos().setX(maFrame.Pos().getX() + GetUpper()->Prt().Width() - maFrame.Width());
         mbValidPos = true;
     }
@@ -949,7 +949,7 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
     {
         mbValidPrtArea = true;
 
-        SWRECTFN( this )
+        SwRectFnSet aRectFnSet(this);
         const bool bTextFrame = IsTextFrame();
         SwTwips nUpper = 0;
         if ( bTextFrame && static_cast<SwTextFrame*>(this)->IsHiddenNow() )
@@ -957,13 +957,13 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
             if ( static_cast<SwTextFrame*>(this)->HasFollow() )
                 static_cast<SwTextFrame*>(this)->JoinFrame();
 
-            if( (Prt().*fnRect->fnGetHeight)() )
+            if( (Prt().*aRectFnSet->fnGetHeight)() )
                 static_cast<SwTextFrame*>(this)->HideHidden();
             Prt().Pos().setX(0);
             Prt().Pos().setY(0);
-            (Prt().*fnRect->fnSetWidth)( (Frame().*fnRect->fnGetWidth)() );
-            (Prt().*fnRect->fnSetHeight)( 0 );
-            nUpper = -( (Frame().*fnRect->fnGetHeight)() );
+            (Prt().*aRectFnSet->fnSetWidth)( (Frame().*aRectFnSet->fnGetWidth)() );
+            (Prt().*aRectFnSet->fnSetHeight)( 0 );
+            nUpper = -( (Frame().*aRectFnSet->fnGetHeight)() );
         }
         else
         {
@@ -973,11 +973,11 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
             // the borders are simply subtracted.
             const long nLeft = rAttrs.CalcLeft( this );
             const long nRight = rAttrs.CalcRight( this );
-            (this->*fnRect->fnSetXMargins)( nLeft, nRight );
+            (this->*aRectFnSet->fnSetXMargins)( nLeft, nRight );
 
             SwViewShell *pSh = getRootFrame()->GetCurrShell();
             SwTwips nWidthArea;
-            if( pSh && 0!=(nWidthArea=(pSh->VisArea().*fnRect->fnGetWidth)()) &&
+            if( pSh && 0!=(nWidthArea=(pSh->VisArea().*aRectFnSet->fnGetWidth)()) &&
                 GetUpper()->IsPageBodyFrame() && // but not for BodyFrames in Columns
                 pSh->GetViewOptions()->getBrowseMode() )
             {
@@ -1009,23 +1009,23 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
 
                 const Size aBorder = pSh->GetOut()->PixelToLogic( pSh->GetBrowseBorder() );
                 long nWidth = nWidthArea - 2 * ( IsVertical() ? aBorder.Height() : aBorder.Width() );
-                nWidth -= (Prt().*fnRect->fnGetLeft)();
+                nWidth -= (Prt().*aRectFnSet->fnGetLeft)();
                 nWidth -= rAttrs.CalcRightLine();
                 nWidth = std::max( nMinWidth, nWidth );
-                (Prt().*fnRect->fnSetWidth)( std::min( nWidth,
-                                            (Prt().*fnRect->fnGetWidth)() ) );
+                (Prt().*aRectFnSet->fnSetWidth)( std::min( nWidth,
+                                            (Prt().*aRectFnSet->fnGetWidth)() ) );
             }
 
-            if ( (Prt().*fnRect->fnGetWidth)() <= MINLAY )
+            if ( (Prt().*aRectFnSet->fnGetWidth)() <= MINLAY )
             {
                 // The PrtArea should already be at least MINLAY wide, matching the
                 // minimal values of the UI
-                (Prt().*fnRect->fnSetWidth)( std::min( long(MINLAY),
-                                             (Frame().*fnRect->fnGetWidth)() ) );
-                SwTwips nTmp = (Frame().*fnRect->fnGetWidth)() -
-                               (Prt().*fnRect->fnGetWidth)();
-                if( (Prt().*fnRect->fnGetLeft)() > nTmp )
-                    (Prt().*fnRect->fnSetLeft)( nTmp );
+                (Prt().*aRectFnSet->fnSetWidth)( std::min( long(MINLAY),
+                                             (Frame().*aRectFnSet->fnGetWidth)() ) );
+                SwTwips nTmp = (Frame().*aRectFnSet->fnGetWidth)() -
+                               (Prt().*aRectFnSet->fnGetWidth)();
+                if( (Prt().*aRectFnSet->fnGetLeft)() > nTmp )
+                    (Prt().*aRectFnSet->fnSetLeft)( nTmp );
             }
 
             // The following rules apply for VarSize:
@@ -1048,10 +1048,10 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
                 nLower=0;
             }
 
-            (Prt().*fnRect->fnSetPosY)( (!bVert || mbReverse) ? nUpper : nLower);
+            (Prt().*aRectFnSet->fnSetPosY)( (!aRectFnSet.bVert || mbReverse) ? nUpper : nLower);
             nUpper += nLower;
-            nUpper -= (Frame().*fnRect->fnGetHeight)() -
-                      (Prt().*fnRect->fnGetHeight)();
+            nUpper -= (Frame().*aRectFnSet->fnGetHeight)() -
+                      (Prt().*aRectFnSet->fnGetHeight)();
         }
         // If there's a difference between old and new size, call Grow() or
         // Shrink() respectively.
@@ -1246,7 +1246,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         }
     }
 
-    SWRECTFN( this )
+    SwRectFnSet aRectFnSet(this);
 
     while ( !mbValidPos || !mbValidSize || !mbValidPrtArea )
     {
@@ -1259,7 +1259,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
             SwFrame *pPre = GetIndPrev();
             if ( CheckMoveFwd( bMakePage, bKeep, bMovedBwd ) )
             {
-                SWREFRESHFN( this )
+                aRectFnSet.Refresh(this);
                 bMovedFwd = true;
                 if ( bMovedBwd )
                 {
@@ -1276,8 +1276,8 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
             }
         }
 
-        aOldFramePos = (Frame().*fnRect->fnGetPos)();
-        aOldPrtPos = (Prt().*fnRect->fnGetPos)();
+        aOldFramePos = (Frame().*aRectFnSet->fnGetPos)();
+        aOldPrtPos = (Prt().*aRectFnSet->fnGetPos)();
 
         if ( !mbValidPos )
             MakePos();
@@ -1296,15 +1296,15 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
             // Note: A text frame can be in such a situation, if the format is
             //       triggered by method call <SwCursorShell::SetCursor()> after
             //       loading the document.
-            const SwTwips nNewFrameWidth = (GetUpper()->Prt().*fnRect->fnGetWidth)();
+            const SwTwips nNewFrameWidth = (GetUpper()->Prt().*aRectFnSet->fnGetWidth)();
             if ( mbValidPrtArea && nNewFrameWidth > 0 &&
-                 (Frame().*fnRect->fnGetWidth)() == 0 &&
-                 (Prt().*fnRect->fnGetWidth)() == 0 )
+                 (Frame().*aRectFnSet->fnGetWidth)() == 0 &&
+                 (Prt().*aRectFnSet->fnGetWidth)() == 0 )
             {
                 mbValidPrtArea = false;
             }
 
-            (Frame().*fnRect->fnSetWidth)( nNewFrameWidth );
+            (Frame().*aRectFnSet->fnSetWidth)( nNewFrameWidth );
 
             // When a lower of a vertically aligned fly frame changes its size we need to recalculate content pos.
             if( GetUpper() && GetUpper()->IsFlyFrame() &&
@@ -1316,11 +1316,11 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         }
         if ( !mbValidPrtArea )
         {
-            const long nOldW = (Prt().*fnRect->fnGetWidth)();
+            const long nOldW = (Prt().*aRectFnSet->fnGetWidth)();
             // #i34730# - keep current frame height
-            const SwTwips nOldH = (Frame().*fnRect->fnGetHeight)();
+            const SwTwips nOldH = (Frame().*aRectFnSet->fnGetHeight)();
             MakePrtArea( rAttrs );
-            if ( nOldW != (Prt().*fnRect->fnGetWidth)() )
+            if ( nOldW != (Prt().*aRectFnSet->fnGetWidth)() )
                 Prepare( PREP_FIXSIZE_CHG );
             // #i34730# - check, if frame height has changed.
             // If yes, send a PREP_ADJUST_FRM and invalidate the size flag to
@@ -1329,16 +1329,16 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
             // fit and if not, performs necessary actions.
             // #i40150# - no check, if frame is undersized.
             if ( mbValidSize && !IsUndersized() &&
-                 nOldH != (Frame().*fnRect->fnGetHeight)() )
+                 nOldH != (Frame().*aRectFnSet->fnGetHeight)() )
             {
                 // #115759# - no PREP_ADJUST_FRM and size
                 // invalidation, if height decreases only by the additional
                 // lower space as last content of a table cell and an existing
                 // follow containing one line exists.
-                const SwTwips nHDiff = nOldH - (Frame().*fnRect->fnGetHeight)();
+                const SwTwips nHDiff = nOldH - (Frame().*aRectFnSet->fnGetHeight)();
                 const bool bNoPrepAdjustFrame =
                     nHDiff > 0 && IsInTab() && GetFollow() &&
-                    ( 1 == static_cast<SwTextFrame*>(GetFollow())->GetLineCount( COMPLETE_STRING ) || (static_cast<SwTextFrame*>(GetFollow())->Frame().*fnRect->fnGetWidth)() < 0 ) &&
+                    ( 1 == static_cast<SwTextFrame*>(GetFollow())->GetLineCount( COMPLETE_STRING ) || (static_cast<SwTextFrame*>(GetFollow())->Frame().*aRectFnSet->fnGetWidth)() < 0 ) &&
                     GetFollow()->CalcAddLowerSpaceAsLastInTableCell() == nHDiff;
                 if ( !bNoPrepAdjustFrame )
                 {
@@ -1355,15 +1355,15 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         if ( !bMustFit )
         {
             bool bWidow = true;
-            const SwTwips nDeadLine = (GetUpper()->*fnRect->fnGetPrtBottom)();
+            const SwTwips nDeadLine = (GetUpper()->*aRectFnSet->fnGetPrtBottom)();
             if ( bMoveable && !bFormatted && ( GetFollow() ||
-                 ( (Frame().*fnRect->fnOverStep)( nDeadLine ) ) ) )
+                 ( (Frame().*aRectFnSet->fnOverStep)( nDeadLine ) ) ) )
             {
                 Prepare( PREP_WIDOWS_ORPHANS, nullptr, false );
                 mbValidSize = bWidow = false;
             }
-            if( (Frame().*fnRect->fnGetPos)() != aOldFramePos ||
-                (Prt().*fnRect->fnGetPos)() != aOldPrtPos )
+            if( (Frame().*aRectFnSet->fnGetPos)() != aOldFramePos ||
+                (Prt().*aRectFnSet->fnGetPos)() != aOldPrtPos )
             {
                 // In this Prepare, an InvalidateSize_() might happen.
                 // mbValidSize becomes false and Format() gets called.
@@ -1408,7 +1408,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
              ( !bFootnote || !GetUpper()->FindFootnoteFrame()->GetPrev() )
              && MoveBwd( bDummy ) )
         {
-            SWREFRESHFN( this )
+            aRectFnSet.Refresh(this);
             bMovedBwd = true;
             bFormatted = false;
             if ( bKeep && bMoveable )
@@ -1417,22 +1417,22 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
                 {
                     bMovedFwd = true;
                     bMoveable = IsMoveable();
-                    SWREFRESHFN( this )
+                    aRectFnSet.Refresh(this);
                 }
-                Point aOldPos = (Frame().*fnRect->fnGetPos)();
+                Point aOldPos = (Frame().*aRectFnSet->fnGetPos)();
                 MakePos();
-                if( aOldPos != (Frame().*fnRect->fnGetPos)() )
+                if( aOldPos != (Frame().*aRectFnSet->fnGetPos)() )
                 {
                     Prepare( PREP_POS_CHGD, static_cast<const void*>(&bFormatted), false );
                     if ( !mbValidSize )
                     {
-                        (Frame().*fnRect->fnSetWidth)( (GetUpper()->
-                                                Prt().*fnRect->fnGetWidth)() );
+                        (Frame().*aRectFnSet->fnSetWidth)( (GetUpper()->
+                                                Prt().*aRectFnSet->fnGetWidth)() );
                         if ( !mbValidPrtArea )
                         {
-                            const long nOldW = (Prt().*fnRect->fnGetWidth)();
+                            const long nOldW = (Prt().*aRectFnSet->fnGetWidth)();
                             MakePrtArea( rAttrs );
-                            if( nOldW != (Prt().*fnRect->fnGetWidth)() )
+                            if( nOldW != (Prt().*aRectFnSet->fnGetWidth)() )
                                 Prepare( PREP_FIXSIZE_CHG, nullptr, false );
                         }
                         if( GetFollow() )
@@ -1492,8 +1492,8 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
             {
                 mbValidPos = false;
                 MakePos();
-                aOldFramePos = (Frame().*fnRect->fnGetPos)();
-                aOldPrtPos = (Prt().*fnRect->fnGetPos)();
+                aOldFramePos = (Frame().*aRectFnSet->fnGetPos)();
+                aOldPrtPos = (Prt().*aRectFnSet->fnGetPos)();
             }
         }
 
@@ -1518,8 +1518,8 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         // Attention: because height == 0, it's better to use Top()+Height() instead of
         // Bottom(). This might happen with undersized TextFrames on the lower edge of a
         // multi-column section
-        const long nPrtBottom = (GetUpper()->*fnRect->fnGetPrtBottom)();
-        long nBottomDist = (Frame().*fnRect->fnBottomDist)(nPrtBottom);
+        const long nPrtBottom = (GetUpper()->*aRectFnSet->fnGetPrtBottom)();
+        long nBottomDist = (Frame().*aRectFnSet->fnBottomDist)(nPrtBottom);
 
         // Hide whitespace may require not to insert a new page.
         SwPageFrame* pPageFrame = FindPageFrame();
@@ -1558,7 +1558,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
                 {
                     const bool bMoveFwdInvalid = nullptr != GetIndNext();
                     const bool bNxtNew =
-                        ( 0 == (pNxt->Prt().*fnRect->fnGetHeight)() ) &&
+                        ( 0 == (pNxt->Prt().*aRectFnSet->fnGetHeight)() ) &&
                         (!pNxt->IsTextFrame() ||!static_cast<SwTextFrame*>(pNxt)->IsHiddenNow());
 
                     pNxt->Calc(getRootFrame()->GetCurrShell()->GetOut());
@@ -1586,8 +1586,8 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         {
             if( !bMoveable && IsInTab() )
             {
-                long nDiff = -(Frame().*fnRect->fnBottomDist)(
-                                        (GetUpper()->*fnRect->fnGetPrtBottom)() );
+                long nDiff = -(Frame().*aRectFnSet->fnBottomDist)(
+                                        (GetUpper()->*aRectFnSet->fnGetPrtBottom)() );
                 long nReal = GetUpper()->Grow( nDiff );
                 if( nReal )
                     continue;
@@ -1619,13 +1619,13 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
             nullptr != GetNextCellLeaf( MAKEPAGE_NONE ) )
             bDontMoveMe = false;
 
-        if ( bDontMoveMe && (Frame().*fnRect->fnGetHeight)() >
-                            (GetUpper()->Prt().*fnRect->fnGetHeight)() )
+        if ( bDontMoveMe && (Frame().*aRectFnSet->fnGetHeight)() >
+                            (GetUpper()->Prt().*aRectFnSet->fnGetHeight)() )
         {
             if ( !bFitPromise )
             {
-                SwTwips nTmp = (GetUpper()->Prt().*fnRect->fnGetHeight)() -
-                               (Prt().*fnRect->fnGetTop)();
+                SwTwips nTmp = (GetUpper()->Prt().*aRectFnSet->fnGetHeight)() -
+                               (Prt().*aRectFnSet->fnGetTop)();
                 bool bSplit = !IsFwdMoveAllowed();
                 if ( nTmp > 0 && WouldFit( nTmp, bSplit, false ) )
                 {
@@ -1675,11 +1675,11 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         }
 
         const bool bCheckForGrownBody = pOldUp->IsBodyFrame();
-        const long nOldBodyHeight = (pOldUp->Frame().*fnRect->fnGetHeight)();
+        const long nOldBodyHeight = (pOldUp->Frame().*aRectFnSet->fnGetHeight)();
 
         if ( !bMovedFwd && !MoveFwd( bMakePage, false ) )
             bMakePage = false;
-        SWREFRESHFN( this )
+        aRectFnSet.Refresh(this);
 
         // If MoveFwd moves the paragraph to the next page, a following
         // paragraph, which contains footnotes can cause the old upper
@@ -1688,7 +1688,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
         // If pOldUp was a footnote frame, it has been deleted inside MoveFwd.
         // Therefore we only check for growing body frames.
         if ( bCheckForGrownBody && ! bMovedBwd && pOldUp != GetUpper() &&
-             (pOldUp->Frame().*fnRect->fnGetHeight)() > nOldBodyHeight )
+             (pOldUp->Frame().*aRectFnSet->fnGetHeight)() > nOldBodyHeight )
         {
             bMovedFwd = false;
         }
diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx
index 0ab2319..4c4a655 100644
--- a/sw/source/core/layout/flowfrm.cxx
+++ b/sw/source/core/layout/flowfrm.cxx
@@ -495,7 +495,7 @@ bool SwFlowFrame::PasteTree( SwFrame *pStart, SwLayoutFrame *pParent, SwFrame *p
     }
     SwFrame *pFloat = pStart;
     SwFrame *pLst = nullptr;
-    SWRECTFN( pParent )
+    SwRectFnSet aRectFnSet(pParent);
     SwTwips nGrowVal = 0;
     do
     {   pFloat->mpUpper = pParent;
@@ -512,7 +512,7 @@ bool SwFlowFrame::PasteTree( SwFrame *pStart, SwLayoutFrame *pParent, SwFrame *p
         else
             bRet = true;
 
-        nGrowVal += (pFloat->Frame().*fnRect->fnGetHeight)();
+        nGrowVal += (pFloat->Frame().*aRectFnSet->fnGetHeight)();
         if ( pFloat->GetNext() )
             pFloat = pFloat->GetNext();
         else
@@ -1540,26 +1540,26 @@ SwTwips SwFlowFrame::GetUpperSpaceAmountConsideredForPageGrid_(
                 const long nGridLineHeight =
                         pGrid->GetBaseHeight() + pGrid->GetRubyHeight();
 
-                SWRECTFN( (&m_rThis) )
-                const SwTwips nBodyPrtTop = (pBodyFrame->*fnRect->fnGetPrtTop)();
+                SwRectFnSet aRectFnSet(&m_rThis);
+                const SwTwips nBodyPrtTop = (pBodyFrame->*aRectFnSet->fnGetPrtTop)();
                 const SwTwips nProposedPrtTop =
-                        (*fnRect->fnYInc)( (m_rThis.Frame().*fnRect->fnGetTop)(),
+                        (*aRectFnSet->fnYInc)( (m_rThis.Frame().*aRectFnSet->fnGetTop)(),
                                            _nUpperSpaceWithoutGrid );
 
                 const SwTwips nSpaceAbovePrtTop =
-                        (*fnRect->fnYDiff)( nProposedPrtTop, nBodyPrtTop );
+                        (*aRectFnSet->fnYDiff)( nProposedPrtTop, nBodyPrtTop );
                 const SwTwips nSpaceOfCompleteLinesAbove =
                         nGridLineHeight * ( nSpaceAbovePrtTop / nGridLineHeight );
                 SwTwips nNewPrtTop =
-                        (*fnRect->fnYInc)( nBodyPrtTop, nSpaceOfCompleteLinesAbove );
-                if ( (*fnRect->fnYDiff)( nProposedPrtTop, nNewPrtTop ) > 0 )
+                        (*aRectFnSet->fnYInc)( nBodyPrtTop, nSpaceOfCompleteLinesAbove );
+                if ( (*aRectFnSet->fnYDiff)( nProposedPrtTop, nNewPrtTop ) > 0 )
                 {
-                    nNewPrtTop = (*fnRect->fnYInc)( nNewPrtTop, nGridLineHeight );
+                    nNewPrtTop = (*aRectFnSet->fnYInc)( nNewPrtTop, nGridLineHeight );
                 }
 
                 const SwTwips nNewUpperSpace =
-                        (*fnRect->fnYDiff)( nNewPrtTop,
-                                            (m_rThis.Frame().*fnRect->fnGetTop)() );
+                        (*aRectFnSet->fnYDiff)( nNewPrtTop,
+                                            (m_rThis.Frame().*aRectFnSet->fnGetTop)() );
 
                 nUpperSpaceAmountConsideredForPageGrid =
                         nNewUpperSpace - _nUpperSpaceWithoutGrid;
@@ -1899,9 +1899,9 @@ bool SwFlowFrame::MoveFwd( bool bMakePage, bool bPageBreak, bool bMoveAlways )
             bSamePage = pNewPage == pOldPage;
             // Set deadline, so the footnotes don't think up
             // silly things...
-            SWRECTFN( pOldBoss )
+            SwRectFnSet aRectFnSet(pOldBoss);
             SwSaveFootnoteHeight aHeight( pOldBoss,
-                (pOldBoss->Frame().*fnRect->fnGetBottom)() );
+                (pOldBoss->Frame().*aRectFnSet->fnGetBottom)() );
             SwContentFrame* pStart = m_rThis.IsContentFrame() ?
                 static_cast<SwContentFrame*>(&m_rThis) : static_cast<SwLayoutFrame&>(m_rThis).ContainsContent();
             OSL_ENSURE( pStart || ( m_rThis.IsTabFrame() && !static_cast<SwTabFrame&>(m_rThis).Lower() ),
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index 310bf43..8f25646 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -484,11 +484,11 @@ void SwFlyFrame::ChainFrames( SwFlyFrame *pMaster, SwFlyFrame *pFollow )
     {
         // To get a text flow we need to invalidate
         SwFrame *pInva = pMaster->FindLastLower();
-        SWRECTFN( pMaster )
-        const long nBottom = (pMaster->*fnRect->fnGetPrtBottom)();
+        SwRectFnSet aRectFnSet(pMaster);
+        const long nBottom = (pMaster->*aRectFnSet->fnGetPrtBottom)();
         while ( pInva )
         {
-            if( (pInva->Frame().*fnRect->fnBottomDist)( nBottom ) <= 0 )
+            if( (pInva->Frame().*aRectFnSet->fnBottomDist)( nBottom ) <= 0 )
             {
                 pInva->InvalidateSize();
                 pInva->Prepare();
@@ -1258,12 +1258,12 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA
         OSL_ENSURE( pAttrs->GetSize().Height() != 0 || rFrameSz.GetHeightPercent(), "FrameAttr height is 0." );
         OSL_ENSURE( pAttrs->GetSize().Width()  != 0 || rFrameSz.GetWidthPercent(), "FrameAttr width is 0." );
 
-        SWRECTFN( this )
+        SwRectFnSet aRectFnSet(this);
         if( !HasFixSize() )
         {
             long nMinHeight = 0;
             if( IsMinHeight() )
-                nMinHeight = bVert ? aRelSize.Width() : aRelSize.Height();
+                nMinHeight = aRectFnSet.bVert ? aRelSize.Width() : aRelSize.Height();
 
             SwTwips nRemaining = CalcContentHeight(pAttrs, nMinHeight, nUL);
             if( IsMinHeight() && (nRemaining + nUL) < nMinHeight )
@@ -1278,9 +1278,9 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA
             if ( nRemaining < MINFLY )
                 nRemaining = MINFLY;
 
-            (Prt().*fnRect->fnSetHeight)( nRemaining );
-            nRemaining -= (Frame().*fnRect->fnGetHeight)();
-            (Frame().*fnRect->fnAddBottom)( nRemaining + nUL );
+            (Prt().*aRectFnSet->fnSetHeight)( nRemaining );
+            nRemaining -= (Frame().*aRectFnSet->fnGetHeight)();
+            (Frame().*aRectFnSet->fnAddBottom)( nRemaining + nUL );
             // #i68520#
             if ( nRemaining + nUL != 0 )
             {
@@ -1295,7 +1295,7 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA
                 if (SdrObjCustomShape* pCustomShape = dynamic_cast<SdrObjCustomShape*>( pShape) )
                 {
                     // The shape is a customshape: then inform it about the calculated fly size.
-                    Size aSize((Frame().*fnRect->fnGetWidth)(), (Frame().*fnRect->fnGetHeight)());
+                    Size aSize((Frame().*aRectFnSet->fnGetWidth)(), (Frame().*aRectFnSet->fnGetHeight)());
                     pCustomShape->SuggestTextFrameSize(aSize);
                     // Do the calculations normally done after touching editeng text of the shape.
                     pCustomShape->NbcSetOutlinerParaObjectForText(nullptr, nullptr);
@@ -1306,13 +1306,13 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA
         {
             mbValidSize = true;  // Fixed Frames do not Format itself
             // Flys set their size using the attr
-            SwTwips nNewSize = bVert ? aRelSize.Width() : aRelSize.Height();
+            SwTwips nNewSize = aRectFnSet.bVert ? aRelSize.Width() : aRelSize.Height();
             nNewSize -= nUL;
             if( nNewSize < MINFLY )
                 nNewSize = MINFLY;
-            (Prt().*fnRect->fnSetHeight)( nNewSize );
-            nNewSize += nUL - (Frame().*fnRect->fnGetHeight)();
-            (Frame().*fnRect->fnAddBottom)( nNewSize );
+            (Prt().*aRectFnSet->fnSetHeight)( nNewSize );
+            nNewSize += nUL - (Frame().*aRectFnSet->fnGetHeight)();
+            (Frame().*aRectFnSet->fnAddBottom)( nNewSize );
             // #i68520#
             if ( nNewSize != 0 )
             {
@@ -1323,7 +1323,7 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA
         if ( !m_bFormatHeightOnly )
         {
             OSL_ENSURE( aRelSize == CalcRel( rFrameSz ), "SwFlyFrame::Format CalcRel problem" );
-            SwTwips nNewSize = bVert ? aRelSize.Height() : aRelSize.Width();
+            SwTwips nNewSize = aRectFnSet.bVert ? aRelSize.Height() : aRelSize.Width();
 
             if ( rFrameSz.GetWidthSizeType() != ATT_FIX_SIZE )
             {
@@ -1342,9 +1342,9 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA
 
             if( nNewSize < MINFLY )
                 nNewSize = MINFLY;
-            (Prt().*fnRect->fnSetWidth)( nNewSize );
-            nNewSize += nLR - (Frame().*fnRect->fnGetWidth)();
-            (Frame().*fnRect->fnAddRight)( nNewSize );
+            (Prt().*aRectFnSet->fnSetWidth)( nNewSize );
+            nNewSize += nLR - (Frame().*aRectFnSet->fnGetWidth)();
+            (Frame().*aRectFnSet->fnAddRight)( nNewSize );
             // #i68520#
             if ( nNewSize != 0 )
             {
@@ -1695,9 +1695,9 @@ void SwFlyFrame::MakeObjPos()
         // update relative position
         SetCurrRelPos( aObjPositioning.GetRelPos() );
 
-        SWRECTFN( GetAnchorFrame() );
+        SwRectFnSet aRectFnSet(GetAnchorFrame());
         maFrame.Pos( aObjPositioning.GetRelPos() );
-        maFrame.Pos() += (GetAnchorFrame()->Frame().*fnRect->fnGetPos)();
+        maFrame.Pos() += (GetAnchorFrame()->Frame().*aRectFnSet->fnGetPos)();
         // #i69335#
         InvalidateObjRectWithSpaces();
     }
@@ -1710,10 +1710,10 @@ void SwFlyFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
         mbValidPrtArea = true;
 
         // OD 31.07.2003 #110978# - consider vertical layout
-        SWRECTFN( this )
-        (this->*fnRect->fnSetXMargins)( rAttrs.CalcLeftLine(),
+        SwRectFnSet aRectFnSet(this);
+        (this->*aRectFnSet->fnSetXMargins)( rAttrs.CalcLeftLine(),
                                         rAttrs.CalcRightLine() );
-        (this->*fnRect->fnSetYMargins)( rAttrs.CalcTopLine(),
+        (this->*aRectFnSet->fnSetYMargins)( rAttrs.CalcTopLine(),
                                         rAttrs.CalcBottomLine() );
     }
 }
@@ -1727,10 +1727,10 @@ void SwFlyFrame::MakeContentPos( const SwBorderAttrs &rAttrs )
         const SwTwips nUL = rAttrs.CalcTopLine()  + rAttrs.CalcBottomLine();
         Size aRelSize( CalcRel( GetFormat()->GetFrameSize() ) );
 
-        SWRECTFN( this )
+        SwRectFnSet aRectFnSet(this);
         long nMinHeight = 0;
         if( IsMinHeight() )
-            nMinHeight = bVert ? aRelSize.Width() : aRelSize.Height();
+            nMinHeight = aRectFnSet.bVert ? aRelSize.Width() : aRelSize.Height();
 
         Point aNewContentPos;
         aNewContentPos = Prt().Pos();
@@ -1742,24 +1742,24 @@ void SwFlyFrame::MakeContentPos( const SwBorderAttrs &rAttrs )
             SwTwips nDiff = 0;
 
             if( nContentHeight != 0)
-                nDiff = (Prt().*fnRect->fnGetHeight)() - nContentHeight;
+                nDiff = (Prt().*aRectFnSet->fnGetHeight)() - nContentHeight;
 
             if( nDiff > 0 )
             {
                 if( nAdjust == SDRTEXTVERTADJUST_CENTER )
                 {
-                    if( bVertL2R )
+                    if( aRectFnSet.bVertL2R )
                         aNewContentPos.setX(aNewContentPos.getX() + nDiff/2);
-                    else if( bVert )
+                    else if( aRectFnSet.bVert )
                         aNewContentPos.setX(aNewContentPos.getX() - nDiff/2);
                     else
                         aNewContentPos.setY(aNewContentPos.getY() + nDiff/2);
                 }
                 else if( nAdjust == SDRTEXTVERTADJUST_BOTTOM )
                 {
-                    if( bVertL2R )
+                    if( aRectFnSet.bVertL2R )
                         aNewContentPos.setX(aNewContentPos.getX() + nDiff);
-                    else if( bVert )
+                    else if( aRectFnSet.bVert )
                         aNewContentPos.setX(aNewContentPos.getX() - nDiff);
                     else
                         aNewContentPos.setY(aNewContentPos.getY() + nDiff);
@@ -1785,10 +1785,10 @@ void SwFlyFrame::InvalidateContentPos()
 
 SwTwips SwFlyFrame::Grow_( SwTwips nDist, bool bTst )
 {
-    SWRECTFN( this )
+    SwRectFnSet aRectFnSet(this);
     if ( Lower() && !IsColLocked() && !HasFixSize() )
     {
-        SwTwips nSize = (Frame().*fnRect->fnGetHeight)();
+        SwTwips nSize = (Frame().*aRectFnSet->fnGetHeight)();
         if( nSize > 0 && nDist > ( LONG_MAX - nSize ) )
             nDist = LONG_MAX - nSize;
 
@@ -1851,7 +1851,7 @@ SwTwips SwFlyFrame::Grow_( SwTwips nDist, bool bTst )
             const SwRect aNew( GetObjRectWithSpaces() );
             if ( aOld != aNew )
                 ::Notify( this, FindPageFrame(), aOld );
-            return (aNew.*fnRect->fnGetHeight)()-(aOld.*fnRect->fnGetHeight)();
+            return (aNew.*aRectFnSet->fnGetHeight)()-(aOld.*aRectFnSet->fnGetHeight)();
         }
         return nDist;
     }
@@ -1862,8 +1862,8 @@ SwTwips SwFlyFrame::Shrink_( SwTwips nDist, bool bTst )
 {
     if( Lower() && !IsColLocked() && !HasFixSize() )
     {
-        SWRECTFN( this )
-        SwTwips nHeight = (Frame().*fnRect->fnGetHeight)();
+        SwRectFnSet aRectFnSet(this);
+        SwTwips nHeight = (Frame().*aRectFnSet->fnGetHeight)();
         if ( nDist > nHeight )
             nDist = nHeight;
 
@@ -1871,7 +1871,7 @@ SwTwips SwFlyFrame::Shrink_( SwTwips nDist, bool bTst )
         if ( IsMinHeight() )
         {
             const SwFormatFrameSize& rFormatSize = GetFormat()->GetFrameSize();
-            SwTwips nFormatHeight = bVert ? rFormatSize.GetWidth() : rFormatSize.GetHeight();
+            SwTwips nFormatHeight = aRectFnSet.bVert ? rFormatSize.GetWidth() : rFormatSize.GetHeight();
 
             nVal = std::min( nDist, nHeight - nFormatHeight );
         }
@@ -1885,14 +1885,14 @@ SwTwips SwFlyFrame::Shrink_( SwTwips nDist, bool bTst )
             if ( !bTst )
             {
                 SwRect aOld( GetObjRectWithSpaces() );
-                (Frame().*fnRect->fnSetHeight)( nHeight - nVal );
+                (Frame().*aRectFnSet->fnSetHeight)( nHeight - nVal );
                 // #i68520#
                 if ( nHeight - nVal != 0 )
                 {
                     InvalidateObjRectWithSpaces();
                 }
-                nHeight = (Prt().*fnRect->fnGetHeight)();
-                (Prt().*fnRect->fnSetHeight)( nHeight - nVal );
+                nHeight = (Prt().*aRectFnSet->fnGetHeight)();
+                (Prt().*aRectFnSet->fnSetHeight)( nHeight - nVal );
                 InvalidatePos_();
                 InvalidateSize();
                 ::Notify( this, FindPageFrame(), aOld );
@@ -1950,8 +1950,8 @@ SwTwips SwFlyFrame::Shrink_( SwTwips nDist, bool bTst )
                 if ( GetAnchorFrame()->IsInFly() )
                     AnchorFrame()->FindFlyFrame()->Shrink( nDist, bTst );
             }
-            return (aOld.*fnRect->fnGetHeight)() -
-                   (aNew.*fnRect->fnGetHeight)();
+            return (aOld.*aRectFnSet->fnGetHeight)() -
+                   (aNew.*aRectFnSet->fnGetHeight)();
         }
         return nVal;
     }
@@ -2655,25 +2655,25 @@ void SwFlyFrame::Calc(vcl::RenderContext* pRenderContext) const
 
 SwTwips SwFlyFrame::CalcContentHeight(const SwBorderAttrs *pAttrs, const SwTwips nMinHeight, const SwTwips nUL)
 {
-    SWRECTFN( this )
+    SwRectFnSet aRectFnSet(this);
     SwTwips nHeight = 0;
     if ( Lower() )
     {
         if ( Lower()->IsColumnFrame() )
         {
             FormatWidthCols( *pAttrs, nUL, nMinHeight );
-            nHeight = (Lower()->Frame().*fnRect->fnGetHeight)();
+            nHeight = (Lower()->Frame().*aRectFnSet->fnGetHeight)();
         }
         else
         {
             SwFrame *pFrame = Lower();
             while ( pFrame )
             {
-                nHeight += (pFrame->Frame().*fnRect->fnGetHeight)();
+                nHeight += (pFrame->Frame().*aRectFnSet->fnGetHeight)();
                 if( pFrame->IsTextFrame() && static_cast<SwTextFrame*>(pFrame)->IsUndersized() )
                 // This TextFrame would like to be a bit larger
                     nHeight += static_cast<SwTextFrame*>(pFrame)->GetParHeight()
-                            - (pFrame->Prt().*fnRect->fnGetHeight)();
+                            - (pFrame->Prt().*aRectFnSet->fnGetHeight)();
                 else if( pFrame->IsSctFrame() && static_cast<SwSectionFrame*>(pFrame)->IsUndersized() )
                     nHeight += static_cast<SwSectionFrame*>(pFrame)->Undersize();
                 pFrame = pFrame->GetNext();
@@ -2682,9 +2682,9 @@ SwTwips SwFlyFrame::CalcContentHeight(const SwBorderAttrs *pAttrs, const SwTwips
         if ( GetDrawObjs() )
         {
             const size_t nCnt = GetDrawObjs()->size();
-            SwTwips nTop = (Frame().*fnRect->fnGetTop)();
-            SwTwips nBorder = (Frame().*fnRect->fnGetHeight)() -
-            (Prt().*fnRect->fnGetHeight)();
+            SwTwips nTop = (Frame().*aRectFnSet->fnGetTop)();
+            SwTwips nBorder = (Frame().*aRectFnSet->fnGetHeight)() -
+            (Prt().*aRectFnSet->fnGetHeight)();
             for ( size_t i = 0; i < nCnt; ++i )
             {
                 SwAnchoredObject* pAnchoredObj = (*GetDrawObjs())[i];
@@ -2697,7 +2697,7 @@ SwTwips SwFlyFrame::CalcContentHeight(const SwBorderAttrs *pAttrs, const SwTwips
                         pFly->Frame().Top() != FAR_AWAY &&
                         pFly->GetFormat()->GetFollowTextFlow().GetValue() )
                     {
-                        SwTwips nDist = -(pFly->Frame().*fnRect->
+                        SwTwips nDist = -(pFly->Frame().*aRectFnSet->
                             fnBottomDist)( nTop );
                         if( nDist > nBorder + nHeight )
                             nHeight = nDist - nBorder;
diff --git a/sw/source/core/layout/flycnt.cxx b/sw/source/core/layout/flycnt.cxx
index 5cb716e..9e70c76 100644
--- a/sw/source/core/layout/flycnt.cxx
+++ b/sw/source/core/layout/flycnt.cxx
@@ -384,11 +384,11 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* pRenderContext)
             // the anchor frame, thus it has to move forward.
             bool bConsiderWrapInfluenceDueToMovedFwdAnchor( false );
             do {
-                SWRECTFN( this )
-                Point aOldPos( (Frame().*fnRect->fnGetPos)() );
+                SwRectFnSet aRectFnSet(this);
+                Point aOldPos( (Frame().*aRectFnSet->fnGetPos)() );
                 SwFlyFreeFrame::MakeAll(pRenderContext);
                 const bool bPosChgDueToOwnFormat =
-                                        aOldPos != (Frame().*fnRect->fnGetPos)();
+                                        aOldPos != (Frame().*aRectFnSet->fnGetPos)();
                 // #i3317#
                 if ( !ConsiderObjWrapInfluenceOnObjPos() &&
                      OverlapsPrevColumn() )
@@ -446,7 +446,7 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* pRenderContext)
                     }
                 }
 
-                if ( aOldPos != (Frame().*fnRect->fnGetPos)() ||
+                if ( aOldPos != (Frame().*aRectFnSet->fnGetPos)() ||
                      ( !GetValidPosFlag() &&
                        ( pFooter || bPosChgDueToOwnFormat ) ) )
                 {
@@ -506,9 +506,9 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* pRenderContext)
                 }
                 if ( pCellFrame )
                 {
-                    SWRECTFN( pCellFrame )
-                    if ( (pCellFrame->Frame().*fnRect->fnGetTop)() == 0 &&
-                         (pCellFrame->Frame().*fnRect->fnGetHeight)() == 0 )
+                    SwRectFnSet aRectFnSet(pCellFrame);
+                    if ( (pCellFrame->Frame().*aRectFnSet->fnGetTop)() == 0 &&
+                         (pCellFrame->Frame().*aRectFnSet->fnGetHeight)() == 0 )
                     {
                         bConsiderWrapInfluenceDueToMovedFwdAnchor = false;
                     }
diff --git a/sw/source/core/layout/flyincnt.cxx b/sw/source/core/layout/flyincnt.cxx
index 99a3956..44dfb9b 100644
--- a/sw/source/core/layout/flyincnt.cxx
+++ b/sw/source/core/layout/flyincnt.cxx
@@ -72,8 +72,8 @@ void SwFlyInContentFrame::SetRefPoint( const Point& rPoint,
         pNotify = new SwFlyNotify( this );
     aRef = rPoint;
     SetCurrRelPos( rRelAttr );
-    SWRECTFN( GetAnchorFrame() )
-    (Frame().*fnRect->fnSetPos)( rPoint + rRelPos );
+    SwRectFnSet aRectFnSet(GetAnchorFrame());
+    (Frame().*aRectFnSet->fnSetPos)( rPoint + rRelPos );
     // #i68520#
     InvalidateObjRectWithSpaces();
     if( pNotify )
diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx
index 2fc0875..85fc5b9 100644
--- a/sw/source/core/layout/flylay.cxx
+++ b/sw/source/core/layout/flylay.cxx
@@ -146,7 +146,7 @@ void SwFlyFreeFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
 
     while ( !mbValidPos || !mbValidSize || !mbValidPrtArea || m_bFormatHeightOnly || !m_bValidContentPos )
     {
-        SWRECTFN( this )
+        SwRectFnSet aRectFnSet(this);
         const SwFormatFrameSize *pSz;
         {   // Additional scope, so aAccess will be destroyed before the check!
 
@@ -176,7 +176,7 @@ void SwFlyFreeFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
 
         if ( !mbValidPos )
         {
-            const Point aOldPos( (Frame().*fnRect->fnGetPos)() );
+            const Point aOldPos( (Frame().*aRectFnSet->fnGetPos)() );
             // #i26791# - use new method <MakeObjPos()>

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list