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

Stephan Bergmann sbergman at redhat.com
Thu May 28 12:22:21 PDT 2015


 sw/source/core/inc/txtfrm.hxx    |   47 ++++++++++-----
 sw/source/core/text/frmform.cxx  |  119 +++++++++++++++++----------------------
 sw/source/core/text/frmpaint.cxx |   87 ++++++++++++++--------------
 sw/source/core/text/txtfly.cxx   |   20 +-----
 sw/source/core/text/txtfrm.cxx   |   18 +----
 sw/source/core/text/txtftn.cxx   |   41 +++++--------
 sw/source/core/text/widorp.cxx   |   20 +-----
 7 files changed, 160 insertions(+), 192 deletions(-)

New commits:
commit 53a066b7d1a639c6d31655bfc7c6257896fb57ef
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu May 28 21:21:34 2015 +0200

    Replace SWAP_IF_[NOT_]SWAPPED/UNDO_SWAP with RAII classes
    
    Change-Id: I3c2c1dd8221b6b9c884f368a65696318c698bb43

diff --git a/sw/source/core/inc/txtfrm.hxx b/sw/source/core/inc/txtfrm.hxx
index 2d1418c..034b2be 100644
--- a/sw/source/core/inc/txtfrm.hxx
+++ b/sw/source/core/inc/txtfrm.hxx
@@ -779,25 +779,42 @@ inline void SwTextFrm::ResetBlinkPor() const
     const_cast<SwTextFrm*>(this)->bBlinkPor = false;
 }
 
-#define SWAP_IF_SWAPPED( pFrm )\
-    bool bUndoSwap = false;   \
-    if ( pFrm->IsVertical() && pFrm->IsSwapped() )\
-    {                                 \
-        bUndoSwap = true;         \
-        const_cast<SwTextFrm*>(pFrm)->SwapWidthAndHeight();         \
+class TemporarySwap {
+protected:
+    explicit TemporarySwap(SwTextFrm * frame, bool swap):
+        frame_(frame), undo_(false)
+    {
+        if (frame_->IsVertical() && swap) {
+            undo_ = true;
+            frame_->SwapWidthAndHeight();
+        }
     }
 
-#define SWAP_IF_NOT_SWAPPED( pFrm )\
-    bool bUndoSwap = false;     \
-    if ( pFrm->IsVertical() && ! pFrm->IsSwapped() )\
-    {                                   \
-        bUndoSwap = true;           \
-        const_cast<SwTextFrm*>(pFrm)->SwapWidthAndHeight();         \
+    ~TemporarySwap() {
+        if (undo_) {
+            frame_->SwapWidthAndHeight();
+        }
     }
 
-#define UNDO_SWAP( pFrm )\
-    if ( bUndoSwap )\
-        const_cast<SwTextFrm*>(pFrm)->SwapWidthAndHeight();
+private:
+    TemporarySwap(TemporarySwap &) = delete;
+    void operator =(TemporarySwap &) = delete;
+
+    SwTextFrm * frame_;
+    bool undo_;
+};
+
+class SWAP_IF_SWAPPED: private TemporarySwap {
+public:
+    explicit SWAP_IF_SWAPPED(SwTextFrm * frame):
+        TemporarySwap(frame, frame->IsSwapped()) {}
+};
+
+class SWAP_IF_NOT_SWAPPED: private TemporarySwap {
+public:
+    explicit SWAP_IF_NOT_SWAPPED(SwTextFrm * frame):
+        TemporarySwap(frame, !frame->IsSwapped()) {}
+};
 
 /**
  * Helper class which can be used instead of the macros if a function
diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx
index cb70ff2..01b0ee6 100644
--- a/sw/source/core/text/frmform.cxx
+++ b/sw/source/core/text/frmform.cxx
@@ -79,7 +79,7 @@ void ValidateText( SwFrm *pFrm )     // Friend of frame
 void SwTextFrm::ValidateFrm()
 {
     // Validate surroundings to avoid oscillation
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED( this );
 
     if ( !IsInFly() && !IsInTab() )
     {   // Only validate 'this' when inside a fly, the rest should actually only be
@@ -106,8 +106,6 @@ void SwTextFrm::ValidateFrm()
     const bool bMustFit = pPara->IsPrepMustFit();
     ResetPreps();
     pPara->SetPrepMustFit( bMustFit );
-
-    UNDO_SWAP( this )
 }
 
 // After a RemoveFootnote the BodyFrm and all Frms contained within it, need to be
@@ -134,19 +132,17 @@ void _ValidateBodyFrm( SwFrm *pFrm )
 
 void SwTextFrm::ValidateBodyFrm()
 {
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED( this );
 
      // See comment in ValidateFrm()
     if ( !IsInFly() && !IsInTab() &&
          !( IsInSct() && FindSctFrm()->Lower()->IsColumnFrm() ) )
         _ValidateBodyFrm( GetUpper() );
-
-    UNDO_SWAP( this )
 }
 
 bool SwTextFrm::_GetDropRect( SwRect &rRect ) const
 {
-    SWAP_IF_NOT_SWAPPED( this )
+    SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(this));
 
     OSL_ENSURE( HasPara(), "SwTextFrm::_GetDropRect: try again next year." );
     SwTextSizeInfo aInf( const_cast<SwTextFrm*>(this) );
@@ -163,12 +159,9 @@ bool SwTextFrm::_GetDropRect( SwRect &rRect ) const
 
         if ( IsVertical() )
             SwitchHorizontalToVertical( rRect );
-        UNDO_SWAP( this )
         return true;
     }
 
-    UNDO_SWAP( this )
-
     return false;
 }
 
@@ -186,7 +179,7 @@ const SwBodyFrm *SwTextFrm::FindBodyFrm() const
 
 bool SwTextFrm::CalcFollow( const sal_Int32 nTextOfst )
 {
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED( this );
 
     OSL_ENSURE( HasFollow(), "CalcFollow: missing Follow." );
 
@@ -338,13 +331,10 @@ bool SwTextFrm::CalcFollow( const sal_Int32 nTextOfst )
                               nMyPos - Frm().Right() :
                               Frm().Top() - nMyPos ) )
         {
-            UNDO_SWAP( this )
             return true;
         }
     }
 
-    UNDO_SWAP( this )
-
     return false;
 }
 
@@ -359,7 +349,7 @@ void SwTextFrm::AdjustFrm( const SwTwips nChgHght, bool bHasToFit )
 
     // AdjustFrm is called with a swapped frame during
     // formatting but the frame is not swapped during FormatEmpty
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED( this );
     SWRECTFN ( this )
 
     // The Frame's size variable is incremented by Grow or decremented by Shrink.
@@ -385,7 +375,6 @@ void SwTextFrm::AdjustFrm( const SwTwips nChgHght, bool bHasToFit )
                             Prt().SSize().Width() += nChgHght;
                         else
                             Prt().SSize().Height() += nChgHght;
-                        UNDO_SWAP( this )
                         return;
                     }
                 }
@@ -495,8 +484,6 @@ void SwTextFrm::AdjustFrm( const SwTwips nChgHght, bool bHasToFit )
     }
     else
         Shrink( -nChgHght );
-
-    UNDO_SWAP( this )
 }
 
 com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > SwTextFrm::GetTabStopInfo( SwTwips CurrentPos )
@@ -674,7 +661,7 @@ SwContentFrm *SwTextFrm::JoinFrm()
 
 SwContentFrm *SwTextFrm::SplitFrm( const sal_Int32 nTextPos )
 {
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED( this );
 
     // The Paste sends a Modify() to me
     // I lock myself, so that my data does not disappear
@@ -747,7 +734,6 @@ SwContentFrm *SwTextFrm::SplitFrm( const sal_Int32 nTextPos )
 
     pNew->ManipOfst( nTextPos );
 
-    UNDO_SWAP( this )
     return pNew;
 }
 
@@ -866,59 +852,60 @@ bool SwTextFrm::CalcPreps()
                 }
             }
 
-            SWAP_IF_NOT_SWAPPED( this )
+            {
+                SWAP_IF_NOT_SWAPPED( this );
 
-            SwTextFormatInfo aInf( this );
-            SwTextFormatter aLine( this, &aInf );
+                SwTextFormatInfo aInf( this );
+                SwTextFormatter aLine( this, &aInf );
 
-            WidowsAndOrphans aFrmBreak( this );
-            // Whatever the attributes say: we split the paragraph in
-            // MustFit in any case
-            if( bPrepMustFit )
-            {
-                aFrmBreak.SetKeep( false );
-                aFrmBreak.ClrOrphLines();
-            }
-            // Before calling FormatAdjust, we need to make sure
-            // that the lines protruding at the bottom get indeed
-            // truncated
-            bool bBreak = aFrmBreak.IsBreakNowWidAndOrp( aLine );
-            bRet = true;
-            while( !bBreak && aLine.Next() )
-            {
-                bBreak = aFrmBreak.IsBreakNowWidAndOrp( aLine );
-            }
-            if( bBreak )
-            {
-                // We run into troubles: when TruncLines get called, the
-                // conditions in IsInside change immediately such that
-                // IsBreakNow can return different results.
-                // For this reason, we make it clear to rFrmBreak, that the
-                // end is reached at the location of rLine.
-                // Let's see if it works ...
-                aLine.TruncLines();
-                aFrmBreak.SetRstHeight( aLine );
-                FormatAdjust( aLine, aFrmBreak, aInf.GetText().getLength(), aInf.IsStop() );
-            }
-            else
-            {
-                if( !GetFollow() )
+                WidowsAndOrphans aFrmBreak( this );
+                // Whatever the attributes say: we split the paragraph in
+                // MustFit in any case
+                if( bPrepMustFit )
                 {
-                    FormatAdjust( aLine, aFrmBreak,
-                                  aInf.GetText().getLength(), aInf.IsStop() );
+                    aFrmBreak.SetKeep( false );
+                    aFrmBreak.ClrOrphLines();
                 }
-                else if ( !aFrmBreak.IsKeepAlways() )
+                // Before calling FormatAdjust, we need to make sure
+                // that the lines protruding at the bottom get indeed
+                // truncated
+                bool bBreak = aFrmBreak.IsBreakNowWidAndOrp( aLine );
+                bRet = true;
+                while( !bBreak && aLine.Next() )
                 {
-                    // We delete a line before the Master, because the Follow
-                    // could hand over a line
-                    const SwCharRange aFollowRg( GetFollow()->GetOfst(), 1 );
-                    pPara->GetReformat() += aFollowRg;
-                    // We should continue!
+                    bBreak = aFrmBreak.IsBreakNowWidAndOrp( aLine );
+                }
+                if( bBreak )
+                {
+                    // We run into troubles: when TruncLines get called, the
+                    // conditions in IsInside change immediately such that
+                    // IsBreakNow can return different results.
+                    // For this reason, we make it clear to rFrmBreak, that the
+                    // end is reached at the location of rLine.
+                    // Let's see if it works ...
+                    aLine.TruncLines();
+                    aFrmBreak.SetRstHeight( aLine );
+                    FormatAdjust( aLine, aFrmBreak, aInf.GetText().getLength(), aInf.IsStop() );
+                }
+                else
+                {
+                    if( !GetFollow() )
+                    {
+                        FormatAdjust( aLine, aFrmBreak,
+                                      aInf.GetText().getLength(), aInf.IsStop() );
+                    }
+                    else if ( !aFrmBreak.IsKeepAlways() )
+                    {
+                        // We delete a line before the Master, because the Follow
+                        // could hand over a line
+                        const SwCharRange aFollowRg( GetFollow()->GetOfst(), 1 );
+                        pPara->GetReformat() += aFollowRg;
+                        // We should continue!
                     bRet = false;
+                    }
                 }
             }
 
-            UNDO_SWAP( this )
             // A final check, if FormatAdjust() didn't help we need to
             // truncate
             if( bPrepMustFit )
@@ -961,7 +948,7 @@ void SwTextFrm::FormatAdjust( SwTextFormatter &rLine,
                              const sal_Int32 nStrLen,
                              const bool bDummy )
 {
-    SWAP_IF_NOT_SWAPPED( this )
+    SWAP_IF_NOT_SWAPPED( this );
 
     SwParaPortion *pPara = rLine.GetInfo().GetParaPortion();
 
@@ -1119,8 +1106,6 @@ void SwTextFrm::FormatAdjust( SwTextFormatter &rLine,
         _AdjustFollow( rLine, nEnd, nStrLen, nNew );
 
     pPara->SetPrepMustFit( false );
-
-    UNDO_SWAP( this )
 }
 
 // bPrev is set whether Reformat.Start() was called because of Prev().
diff --git a/sw/source/core/text/frmpaint.cxx b/sw/source/core/text/frmpaint.cxx
index a5b65ac..f4c1d2e 100644
--- a/sw/source/core/text/frmpaint.cxx
+++ b/sw/source/core/text/frmpaint.cxx
@@ -300,7 +300,7 @@ void SwTextFrm::PaintExtraData( const SwRect &rRect ) const
             return;
         SwViewShell *pSh = getRootFrm()->GetCurrShell();
 
-        SWAP_IF_NOT_SWAPPED( this )
+        SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(this));
         SwRect rOldRect( rRect );
 
         if ( IsVertical() )
@@ -337,7 +337,6 @@ void SwTextFrm::PaintExtraData( const SwRect &rRect ) const
                 if( !aLine.Next() )
                 {
                     (SwRect&)rRect = rOldRect;
-                    UNDO_SWAP( this )
                     return;
                 }
             }
@@ -399,7 +398,6 @@ void SwTextFrm::PaintExtraData( const SwRect &rRect ) const
         }
 
         (SwRect&)rRect = rOldRect;
-        UNDO_SWAP( this )
     }
 }
 
@@ -648,60 +646,61 @@ void SwTextFrm::Paint(SwRect const& rRect, SwPrintData const*const) const
         OSL_ENSURE( ! IsSwapped(), "A frame is swapped before Paint" );
         SwRect aOldRect( rRect );
 
-        SWAP_IF_NOT_SWAPPED( this )
+        {
+            SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(this));
 
-        if ( IsVertical() )
-            SwitchVerticalToHorizontal( (SwRect&)rRect );
+            if ( IsVertical() )
+                SwitchVerticalToHorizontal( (SwRect&)rRect );
 
-        if ( IsRightToLeft() )
-            SwitchRTLtoLTR( (SwRect&)rRect );
+            if ( IsRightToLeft() )
+                SwitchRTLtoLTR( (SwRect&)rRect );
 
-        SwTextPaintInfo aInf( const_cast<SwTextFrm*>(this), rRect );
-        aInf.SetWrongList( const_cast<SwTextNode*>(GetTextNode())->GetWrong() );
-        aInf.SetGrammarCheckList( const_cast<SwTextNode*>(GetTextNode())->GetGrammarCheck() );
-        aInf.SetSmartTags( const_cast<SwTextNode*>(GetTextNode())->GetSmartTags() );
-        aInf.GetTextFly().SetTopRule();
+            SwTextPaintInfo aInf( const_cast<SwTextFrm*>(this), rRect );
+            aInf.SetWrongList( const_cast<SwTextNode*>(GetTextNode())->GetWrong() );
+            aInf.SetGrammarCheckList( const_cast<SwTextNode*>(GetTextNode())->GetGrammarCheck() );
+            aInf.SetSmartTags( const_cast<SwTextNode*>(GetTextNode())->GetSmartTags() );
+            aInf.GetTextFly().SetTopRule();
 
-        SwTextPainter  aLine( const_cast<SwTextFrm*>(this), &aInf );
-        // Optimization: if no free flying Frm overlaps into our line, the
-        // SwTextFly just switches off
-        aInf.GetTextFly().Relax();
+            SwTextPainter  aLine( const_cast<SwTextFrm*>(this), &aInf );
+            // Optimization: if no free flying Frm overlaps into our line, the
+            // SwTextFly just switches off
+            aInf.GetTextFly().Relax();
 
-        OutputDevice* pOut = aInf.GetOut();
-        const bool bOnWin = pSh->GetWin() != 0;
+            OutputDevice* pOut = aInf.GetOut();
+            const bool bOnWin = pSh->GetWin() != 0;
 
-        SwSaveClip aClip( bOnWin || IsUndersized() ? pOut : 0 );
+            SwSaveClip aClip( bOnWin || IsUndersized() ? pOut : 0 );
 
-        // Output loop: For each Line ... (which is still visible) ...
-        //   adapt rRect (Top + 1, Bottom - 1)
-        // Because the Iterator attaches the Lines without a gap to each other
-        aLine.TwipsToLine( rRect.Top() + 1 );
-        long nBottom = rRect.Bottom();
+            // Output loop: For each Line ... (which is still visible) ...
+            //   adapt rRect (Top + 1, Bottom - 1)
+            // Because the Iterator attaches the Lines without a gap to each other
+            aLine.TwipsToLine( rRect.Top() + 1 );
+            long nBottom = rRect.Bottom();
 
-        bool bNoPrtLine = 0 == GetMinPrtLine();
-        if( !bNoPrtLine )
-        {
-            while ( aLine.Y() < GetMinPrtLine() && aLine.Next() )
-                ;
-            bNoPrtLine = aLine.Y() >= GetMinPrtLine();
-        }
-        if( bNoPrtLine )
-        {
-            do
+            bool bNoPrtLine = 0 == GetMinPrtLine();
+            if( !bNoPrtLine )
+            {
+                while ( aLine.Y() < GetMinPrtLine() && aLine.Next() )
+                    ;
+                bNoPrtLine = aLine.Y() >= GetMinPrtLine();
+            }
+            if( bNoPrtLine )
             {
-                aLine.DrawTextLine( rRect, aClip, IsUndersized() );
+                do
+                {
+                    aLine.DrawTextLine( rRect, aClip, IsUndersized() );
 
-            } while( aLine.Next() && aLine.Y() <= nBottom );
-        }
+                } while( aLine.Next() && aLine.Y() <= nBottom );
+            }
 
-        // Once is enough:
-        if( aLine.IsPaintDrop() )
-            aLine.PaintDropPortion();
+            // Once is enough:
+            if( aLine.IsPaintDrop() )
+                aLine.PaintDropPortion();
 
-        if( rRepaint.HasArea() )
-            rRepaint.Clear();
+            if( rRepaint.HasArea() )
+                rRepaint.Clear();
+        }
 
-        UNDO_SWAP( this )
         (SwRect&)rRect = aOldRect;
 
         OSL_ENSURE( ! IsSwapped(), "A frame is swapped after Paint" );
diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx
index ed33e4c..04a0910 100644
--- a/sw/source/core/text/txtfly.cxx
+++ b/sw/source/core/text/txtfly.cxx
@@ -410,15 +410,13 @@ SwRect SwTextFly::_GetFrm( const SwRect &rRect, bool bTop ) const
 
 bool SwTextFly::IsAnyFrm() const
 {
-    SWAP_IF_SWAPPED( pCurrFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pCurrFrm));
 
     OSL_ENSURE( bOn, "IsAnyFrm: Why?" );
     SwRect aRect( pCurrFrm->Frm().Pos() + pCurrFrm->Prt().Pos(),
         pCurrFrm->Prt().SSize() );
 
-    const bool bRet = ForEach( aRect, NULL, false );
-    UNDO_SWAP( pCurrFrm )
-    return bRet;
+    return ForEach( aRect, NULL, false );
 }
 
 bool SwTextFly::IsAnyObj( const SwRect &rRect ) const
@@ -863,7 +861,7 @@ SwAnchoredObjList* SwTextFly::InitAnchoredObjList()
     // #i68520#
     OSL_ENSURE( !mpAnchoredObjList, "InitFlyList: FlyList already initialized" );
 
-    SWAP_IF_SWAPPED( pCurrFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pCurrFrm));
 
     const SwSortedObjs *pSorted = pPage->GetSortedObjs();
     const size_t nCount = pSorted ? pSorted->size() : 0;
@@ -985,8 +983,6 @@ SwAnchoredObjList* SwTextFly::InitAnchoredObjList()
         mpAnchoredObjList = new SwAnchoredObjList();
     }
 
-    UNDO_SWAP( pCurrFrm )
-
     // #i68520#
     return mpAnchoredObjList;
 }
@@ -1027,7 +1023,7 @@ SwTwips SwTextFly::CalcMinBottom() const
 
 bool SwTextFly::ForEach( const SwRect &rRect, SwRect* pRect, bool bAvoid ) const
 {
-    SWAP_IF_SWAPPED( pCurrFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pCurrFrm));
 
     bool bRet = false;
     // #i68520#
@@ -1105,8 +1101,6 @@ bool SwTextFly::ForEach( const SwRect &rRect, SwRect* pRect, bool bAvoid ) const
         }
     }
 
-    UNDO_SWAP( pCurrFrm )
-
     return bRet;
 }
 
@@ -1412,13 +1406,11 @@ SwSurround SwTextFly::_GetSurroundForTextWrap( const SwAnchoredObject* pAnchored
 bool SwTextFly::IsAnyFrm( const SwRect &rLine ) const
 {
 
-    SWAP_IF_SWAPPED( pCurrFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pCurrFrm));
 
     OSL_ENSURE( bOn, "IsAnyFrm: Why?" );
 
-    const bool bRet = ForEach( rLine, NULL, false );
-    UNDO_SWAP( pCurrFrm )
-    return bRet;
+    return ForEach( rLine, NULL, false );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index 4ce9409..ee5f5fb 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -271,24 +271,20 @@ SwFrmSwapper::~SwFrmSwapper()
 
 void SwTextFrm::SwitchLTRtoRTL( SwRect& rRect ) const
 {
-    SWAP_IF_NOT_SWAPPED( this )
+    SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(this));
 
     long nWidth = rRect.Width();
     rRect.Left( 2 * ( Frm().Left() + Prt().Left() ) +
                 Prt().Width() - rRect.Right() - 1 );
 
     rRect.Width( nWidth );
-
-    UNDO_SWAP( this )
 }
 
 void SwTextFrm::SwitchLTRtoRTL( Point& rPoint ) const
 {
-    SWAP_IF_NOT_SWAPPED( this )
+    SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(this));
 
     rPoint.X() = 2 * ( Frm().Left() + Prt().Left() ) + Prt().Width() - rPoint.X() - 1;
-
-    UNDO_SWAP( this )
 }
 
 SwLayoutModeModifier::SwLayoutModeModifier( const OutputDevice& rOutp ) :
@@ -1382,7 +1378,7 @@ void SwTextFrm::PrepWidows( const sal_uInt16 nNeed, bool bNotify )
     sal_uInt16 nHave = nNeed;
 
     // We yield a few lines and shrink in CalcPreps()
-    SWAP_IF_NOT_SWAPPED( this )
+    SWAP_IF_NOT_SWAPPED( this );
 
     SwTextSizeInfo aInf( this );
     SwTextMargin aLine( this, &aInf );
@@ -1420,8 +1416,6 @@ void SwTextFrm::PrepWidows( const sal_uInt16 nNeed, bool bNotify )
         _InvalidateSize();
         InvalidatePage();
     }
-
-    UNDO_SWAP( this )
 }
 
 static bool lcl_ErgoVadis( SwTextFrm* pFrm, sal_Int32 &rPos, const PrepareHint ePrep )
@@ -2004,8 +1998,6 @@ bool SwTextFrm::WouldFit( SwTwips &rMaxHeight, bool &bSplit, bool bTst )
         } while ( aLine.Next() );
     }
 
-    UNDO_SWAP( this )
-
     return bRet;
 }
 
@@ -2052,7 +2044,7 @@ sal_uInt16 SwTextFrm::GetParHeight() const
  */
 SwTextFrm* SwTextFrm::GetFormatted( bool bForceQuickFormat )
 {
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED( this );
 
     // The IdleCollector could've removed my cached information
     // Calc() calls our format
@@ -2071,8 +2063,6 @@ SwTextFrm* SwTextFrm::GetFormatted( bool bForceQuickFormat )
             Format();
     }
 
-    UNDO_SWAP( this )
-
     return this;
 }
 
diff --git a/sw/source/core/text/txtftn.cxx b/sw/source/core/text/txtftn.cxx
index 07ba9d6..06b2ded 100644
--- a/sw/source/core/text/txtftn.cxx
+++ b/sw/source/core/text/txtftn.cxx
@@ -268,18 +268,19 @@ SwTwips SwTextFrm::GetFootnoteLine( const SwTextFootnote *pFootnote ) const
                IsVertical() ? Frm().Left() : Frm().Bottom();
     }
 
-    SWAP_IF_NOT_SWAPPED( this )
-
-    SwTextInfo aInf( pThis );
-    SwTextIter aLine( pThis, &aInf );
-    const sal_Int32 nPos = pFootnote->GetStart();
-    aLine.CharToLine( nPos );
+    SwTwips nRet;
+    {
+        SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(this));
 
-    SwTwips nRet = aLine.Y() + SwTwips(aLine.GetLineHeight());
-    if( IsVertical() )
-        nRet = SwitchHorizontalToVertical( nRet );
+        SwTextInfo aInf( pThis );
+        SwTextIter aLine( pThis, &aInf );
+        const sal_Int32 nPos = pFootnote->GetStart();
+        aLine.CharToLine( nPos );
 
-    UNDO_SWAP( this )
+        nRet = aLine.Y() + SwTwips(aLine.GetLineHeight());
+        if( IsVertical() )
+            nRet = SwitchHorizontalToVertical( nRet );
+    }
 
     nRet = lcl_GetFootnoteLower( pThis, nRet );
 
@@ -302,7 +303,7 @@ SwTwips SwTextFrm::_GetFootnoteFrmHeight() const
                                         GetFootnote().IsEndNote() ) )
         return 0;
 
-    SWAP_IF_SWAPPED( this )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(this));
 
     SwTwips nHeight = pRef->IsInFootnoteConnect() ?
                             1 : pRef->GetFootnoteLine( pFootnoteFrm->GetAttr() );
@@ -359,8 +360,6 @@ SwTwips SwTextFrm::_GetFootnoteFrmHeight() const
         }
     }
 
-    UNDO_SWAP( this )
-
     return nHeight;
 }
 
@@ -805,7 +804,7 @@ SwFootnotePortion *SwTextFormatter::NewFootnotePortion( SwTextFormatInfo &rInf,
     if( rInf.IsTest() )
         return new SwFootnotePortion( rFootnote.GetViewNumStr( *pDoc ), pFootnote );
 
-    SWAP_IF_SWAPPED( pFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pFrm));
 
     sal_uInt16 nReal;
     {
@@ -866,7 +865,6 @@ SwFootnotePortion *SwTextFormatter::NewFootnotePortion( SwTextFormatInfo &rInf,
                 if( !pFootnoteCont )
                 {
                     rInf.SetStop( true );
-                    UNDO_SWAP( pFrm )
                     return 0;
                 }
                 else
@@ -883,7 +881,6 @@ SwFootnotePortion *SwTextFormatter::NewFootnotePortion( SwTextFormatInfo &rInf,
                             if( pTmpFrm && *pTmpFrm < pFootnote )
                             {
                                 rInf.SetStop( true );
-                                UNDO_SWAP( pFrm )
                                 return 0;
                             }
                         }
@@ -910,7 +907,6 @@ SwFootnotePortion *SwTextFormatter::NewFootnotePortion( SwTextFormatInfo &rInf,
                                 // We're in the last Line and the Footnote has moved
                                 // to another Page. We also want to be on that Page!
                                 rInf.SetStop( true );
-                                UNDO_SWAP( pFrm )
                                 return 0;
                             }
                         }
@@ -924,8 +920,6 @@ SwFootnotePortion *SwTextFormatter::NewFootnotePortion( SwTextFormatInfo &rInf,
                                            pFootnote, nReal );
     rInf.SetFootnoteInside( true );
 
-    UNDO_SWAP( pFrm )
-
     return pRet;
  }
 
@@ -1109,11 +1103,12 @@ sal_Int32 SwTextFormatter::FormatQuoVadis( const sal_Int32 nOffset )
 
     Right( Right() - nQuoWidth );
 
-    SWAP_IF_NOT_SWAPPED( pFrm )
-
-    const sal_Int32 nRet = FormatLine( nStart );
+    sal_Int32 nRet;
+    {
+        SWAP_IF_NOT_SWAPPED(const_cast<SwTextFrm *>(pFrm));
 
-    UNDO_SWAP( pFrm )
+        nRet = FormatLine( nStart );
+    }
 
     Right( rInf.Left() + nOldRealWidth - 1 );
 
diff --git a/sw/source/core/text/widorp.cxx b/sw/source/core/text/widorp.cxx
index f526c28..032f760 100644
--- a/sw/source/core/text/widorp.cxx
+++ b/sw/source/core/text/widorp.cxx
@@ -57,7 +57,7 @@ inline bool IsNastyFollow( const SwTextFrm *pFrm )
 SwTextFrmBreak::SwTextFrmBreak( SwTextFrm *pNewFrm, const SwTwips nRst )
     : nRstHeight(nRst), pFrm(pNewFrm)
 {
-    SWAP_IF_SWAPPED( pFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pFrm));
     SWRECTFN( pFrm )
     nOrigin = (pFrm->*fnRect->fnGetPrtTop)();
     bKeep = !pFrm->IsMoveable() || IsNastyFollow( pFrm );
@@ -78,8 +78,6 @@ SwTextFrmBreak::SwTextFrmBreak( SwTextFrm *pNewFrm, const SwTwips nRst )
         if( nRstHeight < 0 )
             nRstHeight = 0;
     }
-
-    UNDO_SWAP( pFrm )
 }
 
 /**
@@ -106,7 +104,7 @@ bool SwTextFrmBreak::IsInside( SwTextMargin &rLine ) const
 {
     bool bFit = false;
 
-    SWAP_IF_SWAPPED( pFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pFrm));
     SWRECTFN( pFrm )
     // nOrigin is an absolut value, rLine referes to the swapped situation.
 
@@ -158,14 +156,12 @@ bool SwTextFrmBreak::IsInside( SwTextMargin &rLine ) const
         }
     }
 
-    UNDO_SWAP( pFrm );
-
     return bFit;
 }
 
 bool SwTextFrmBreak::IsBreakNow( SwTextMargin &rLine )
 {
-    SWAP_IF_SWAPPED( pFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pFrm));
 
     // bKeep is stronger than IsBreakNow()
     // Is there enough space ?
@@ -198,8 +194,6 @@ bool SwTextFrmBreak::IsBreakNow( SwTextMargin &rLine )
         }
     }
 
-    UNDO_SWAP( pFrm )
-
     return bBreak;
 }
 
@@ -226,7 +220,7 @@ WidowsAndOrphans::WidowsAndOrphans( SwTextFrm *pNewFrm, const SwTwips nRst,
     bool bChkKeep   )
     : SwTextFrmBreak( pNewFrm, nRst ), nWidLines( 0 ), nOrphLines( 0 )
 {
-    SWAP_IF_SWAPPED( pFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pFrm));
 
     if( bKeep )
     {
@@ -294,8 +288,6 @@ WidowsAndOrphans::WidowsAndOrphans( SwTextFrm *pNewFrm, const SwTwips nRst,
             nWidLines = 0;
         }
     }
-
-    UNDO_SWAP( pFrm )
 }
 
 /**
@@ -310,7 +302,7 @@ bool WidowsAndOrphans::FindBreak( SwTextFrm *pFrame, SwTextMargin &rLine,
     // Thus, assertion on situation, that these are different to figure out why.
     OSL_ENSURE( pFrm == pFrame, "<WidowsAndOrphans::FindBreak> - pFrm != pFrame" );
 
-    SWAP_IF_SWAPPED( pFrm )
+    SWAP_IF_SWAPPED(const_cast<SwTextFrm *>(pFrm));
 
     bool bRet = true;
     sal_uInt16 nOldOrphans = nOrphLines;
@@ -345,8 +337,6 @@ bool WidowsAndOrphans::FindBreak( SwTextFrm *pFrame, SwTextMargin &rLine,
     }
     nOrphLines = nOldOrphans;
 
-    UNDO_SWAP( pFrm )
-
     return bRet;
 }
 


More information about the Libreoffice-commits mailing list