diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2017-10-26 14:55:41 +0200 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@cib.de> | 2017-10-30 12:13:17 +0100 |
commit | 3444a3086c8fe8966953434a7fbe76802df8a149 (patch) | |
tree | d57600acfdd778f1487f3079094b25d2998ecb37 /sw/source | |
parent | 75d4e779e408bd532ddeda2b18923806c920b4a7 (diff) |
Adapted to get methods and WriteAccess helpers
Change-Id: Ife3c1b2391ad7beae8c7f31f796b1454709ddd26
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/core/doc/notxtfrm.cxx | 3 | ||||
-rw-r--r-- | sw/source/core/frmedt/feshview.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/inc/frame.hxx | 36 | ||||
-rw-r--r-- | sw/source/core/layout/calcmove.cxx | 142 | ||||
-rw-r--r-- | sw/source/core/layout/fly.cxx | 123 | ||||
-rw-r--r-- | sw/source/core/layout/flyincnt.cxx | 11 | ||||
-rw-r--r-- | sw/source/core/layout/flylay.cxx | 44 | ||||
-rw-r--r-- | sw/source/core/layout/frmtool.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/layout/ftnfrm.cxx | 54 | ||||
-rw-r--r-- | sw/source/core/layout/hffrm.cxx | 18 | ||||
-rw-r--r-- | sw/source/core/layout/laycache.cxx | 25 | ||||
-rw-r--r-- | sw/source/core/layout/pagechg.cxx | 88 | ||||
-rw-r--r-- | sw/source/core/layout/sectfrm.cxx | 116 | ||||
-rw-r--r-- | sw/source/core/layout/ssfrm.cxx | 52 | ||||
-rw-r--r-- | sw/source/core/layout/tabfrm.cxx | 136 | ||||
-rw-r--r-- | sw/source/core/layout/wsfrm.cxx | 175 | ||||
-rw-r--r-- | sw/source/core/text/frmform.cxx | 49 | ||||
-rw-r--r-- | sw/source/core/text/txtfrm.cxx | 161 |
18 files changed, 624 insertions, 619 deletions
diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx index c126267190cb..18fa63ca2b99 100644 --- a/sw/source/core/doc/notxtfrm.cxx +++ b/sw/source/core/doc/notxtfrm.cxx @@ -480,9 +480,8 @@ void SwNoTextFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) if ( !mbValidSize ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Width( GetUpper()->getSwPrint().Width() ); - setSwFrame(aFrm); } MakePrtArea( rAttrs ); diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx index a278cad455b8..7918f5388c63 100644 --- a/sw/source/core/frmedt/feshview.cxx +++ b/sw/source/core/frmedt/feshview.cxx @@ -836,9 +836,8 @@ static void lcl_NotifyNeighbours( const SdrMarkList *pLst ) { bCheckNeighbours = true; pFly->InvalidatePos(); - SwRect aFrm(pFly->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pFly); aFrm.Pos().Y() += 1; - pFly->setSwFrame(aFrm); } pPage = pFly->FindPageFrame(); @@ -884,9 +883,8 @@ static void lcl_NotifyNeighbours( const SdrMarkList *pLst ) pAct->getSwFrame().Bottom() >= aRect.Top() ) { pAct->InvalidatePos(); - SwRect aFrm(pAct->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pAct); aFrm.Pos().Y() += 1; - pAct->setSwFrame(aFrm); } } } diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx index e8f3579a6866..cfe5589a10b1 100644 --- a/sw/source/core/inc/frame.hxx +++ b/sw/source/core/inc/frame.hxx @@ -133,9 +133,39 @@ public: const SwRect& getSwFrame() const { return maFrameRect; } const SwRect& getSwPrint() const { return maPrintRect; } - // set methods - only way allowed to change these, see above - void setSwFrame(const SwRect& rNew) { maFrameRect = rNew; } - void setSwPrint(const SwRect& rNew) { maPrintRect = rNew; } + // helper class(es) for FrameRect/PrintRect manipulation. These + // have to be used to apply changes. They hold a copy of the SwRect + // for manipulation, it gets written back at destruction. Thus this + // mechanism depends on scope usage, take care. It prevents errors using + // different instances of SwFrame in get/set methods which is more safe + class FrameWriteAccess : public SwRect + { + private: + SwFrameRect& mrTarget; + + FrameWriteAccess(const FrameWriteAccess&) = delete; + FrameWriteAccess& operator=(const FrameWriteAccess&) = delete; + + public: + FrameWriteAccess(SwFrameRect& rTarget) : SwRect(rTarget.getSwFrame()), mrTarget(rTarget) {} + ~FrameWriteAccess() { mrTarget.maFrameRect = *this; } + void setSwRect(const SwRect& rNew) { *(reinterpret_cast< SwRect* >(this)) = rNew; } + }; + + // same for print + class PrintWriteAccess : public SwRect + { + private: + SwFrameRect& mrTarget; + + PrintWriteAccess(const PrintWriteAccess&) = delete; + PrintWriteAccess& operator=(const PrintWriteAccess&) = delete; + + public: + PrintWriteAccess(SwFrameRect& rTarget) : SwRect(rTarget.getSwPrint()), mrTarget(rTarget) {} + ~PrintWriteAccess() { mrTarget.maPrintRect = *this; } + void setSwRect(const SwRect& rNew) { *(reinterpret_cast< SwRect* >(this)) = rNew; } + }; }; /** diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx index bbd0bd7cf9e3..09b6a56793ac 100644 --- a/sw/source/core/layout/calcmove.cxx +++ b/sw/source/core/layout/calcmove.cxx @@ -500,7 +500,7 @@ void SwFrame::MakePos() SwRectFnSet aRectFnSet((IsCellFrame() && GetUpper() ? GetUpper() : this)); if ( !bUseUpper && pPrv ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos( pPrv->getSwFrame().Pos() ); if( FRM_NEIGHBOUR & nMyType ) @@ -544,8 +544,6 @@ void SwFrame::MakePos() { aFrm.Pos().setY(aFrm.Pos().getY() + pPrv->getSwFrame().Height()); } - - setSwFrame(aFrm); } else if ( GetUpper() ) { @@ -571,7 +569,7 @@ void SwFrame::MakePos() pPrv = lcl_Prev( this, false ); if ( !bUseUpper && pPrv ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos( pPrv->getSwFrame().Pos() ); if( FRM_NEIGHBOUR & nMyType ) @@ -608,12 +606,10 @@ void SwFrame::MakePos() { aFrm.Pos().setY(aFrm.Pos().getY() + pPrv->getSwFrame().Height()); } - - setSwFrame(aFrm); } else { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos( GetUpper()->getSwFrame().Pos() ); if( GetUpper()->IsFlyFrame() ) @@ -640,24 +636,21 @@ void SwFrame::MakePos() { aFrm.Pos().setX(aFrm.Pos().getX() - aFrm.Width() + GetUpper()->getSwPrint().Width()); } - - setSwFrame(aFrm); } } else { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().setX(0); aFrm.Pos().setY(0); - setSwFrame(aFrm); } if( IsBodyFrame() && aRectFnSet.IsVert() && !aRectFnSet.IsVertL2R() && !mbReverse && GetUpper() ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().setX(aFrm.Pos().getX() + GetUpper()->getSwPrint().Width() - aFrm.Width()); - setSwFrame(aFrm); } + mbValidPos = true; } } @@ -780,17 +773,15 @@ void SwPageFrame::MakeAll(vcl::RenderContext* pRenderContext) { if ( IsEmptyPage() ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Width( 0 ); aFrm.Width( 0 ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Height( 0 ); aPrt.Height( 0 ); aPrt.Left( 0 ); aPrt.Top( 0 ); - setSwPrint(aPrt); mbValidSize = mbValidPrtArea = true; } @@ -819,39 +810,41 @@ void SwPageFrame::MakeAll(vcl::RenderContext* pRenderContext) nWidth += + 2 * aBorder.Width(); nWidth = std::max( nWidth, 2L * aBorder.Width() + 4*MM50 ); - SwRect aFrm(getSwFrame()); - aFrm.Width( nWidth ); - - SwLayoutFrame *pBody = FindBodyCont(); - if ( pBody && pBody->Lower() && pBody->Lower()->IsColumnFrame() ) { - // Columns have a fixed height - aFrm.Height( pAttrs->GetSize().Height() ); - } - else - { - // In pages without columns, the content defines the size. - long nBot = GetContentHeight(nTop, nBottom); + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Width( nWidth ); - // #i35143# - If second page frame - // exists, the first page doesn't have to fulfill the - // visible area. - if ( !GetPrev() && !GetNext() ) + SwLayoutFrame *pBody = FindBodyCont(); + if ( pBody && pBody->Lower() && pBody->Lower()->IsColumnFrame() ) + { + // Columns have a fixed height + aFrm.Height( pAttrs->GetSize().Height() ); + } + else { - nBot = std::max( nBot, pSh->VisArea().Height() ); + // In pages without columns, the content defines the size. + long nBot = GetContentHeight(nTop, nBottom); + + // #i35143# - If second page frame + // exists, the first page doesn't have to fulfill the + // visible area. + if ( !GetPrev() && !GetNext() ) + { + nBot = std::max( nBot, pSh->VisArea().Height() ); + } + // #i35143# - Assure, that the page + // doesn't exceed the defined browse height. + aFrm.Height( std::min( nBot, BROWSE_HEIGHT ) ); } - // #i35143# - Assure, that the page - // doesn't exceed the defined browse height. - aFrm.Height( std::min( nBot, BROWSE_HEIGHT ) ); } - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); - aPrt.Left ( pAttrs->CalcLeftLine() + aBorder.Width() ); - aPrt.Top ( nTop ); - aPrt.Width( getSwFrame().Width() - ( aPrt.Left() + pAttrs->CalcRightLine() + aBorder.Width() ) ); - aPrt.Height( getSwFrame().Height() - (nTop + nBottom) ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Left ( pAttrs->CalcLeftLine() + aBorder.Width() ); + aPrt.Top ( nTop ); + aPrt.Width( getSwFrame().Width() - ( aPrt.Left() + pAttrs->CalcRightLine() + aBorder.Width() ) ); + aPrt.Height( getSwFrame().Height() - (nTop + nBottom) ); + } mbValidSize = mbValidPrtArea = true; continue; @@ -874,12 +867,9 @@ void SwPageFrame::MakeAll(vcl::RenderContext* pRenderContext) if (height > 0) { ChgSize(Size(getSwFrame().Width(), height)); - - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Top(0); aPrt.Height(height); - setSwPrint(aPrt); - mbValidSize = mbValidPrtArea = true; continue; } @@ -893,9 +883,8 @@ void SwPageFrame::MakeAll(vcl::RenderContext* pRenderContext) // the attribute. //FIXME: This resets the size when (mbValidSize && !mbValidPrtArea). { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.SSize( pAttrs->GetSize() ); - setSwFrame(aFrm); } Format( pRenderContext, pAttrs ); } @@ -958,7 +947,7 @@ void SwLayoutFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) } const long nDiff = nPrtWidth - (getSwFrame().*fnRect->fnGetWidth)(); - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); if( IsNeighbourFrame() && IsRightToLeft() ) { @@ -968,8 +957,6 @@ void SwLayoutFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) { (aFrm.*fnRect->fnAddRight)( nDiff ); } - - setSwFrame(aFrm); } else { @@ -1045,12 +1032,13 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs ) static_cast<SwTextFrame*>(this)->HideHidden(); } - SwRect aPrt(getSwPrint()); - aPrt.Pos().setX(0); - aPrt.Pos().setY(0); - aRectFnSet.SetWidth( aPrt, aRectFnSet.GetWidth(getSwFrame()) ); - aRectFnSet.SetHeight( aPrt, 0 ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Pos().setX(0); + aPrt.Pos().setY(0); + aRectFnSet.SetWidth( aPrt, aRectFnSet.GetWidth(getSwFrame()) ); + aRectFnSet.SetHeight( aPrt, 0 ); + } nUpper = -( aRectFnSet.GetHeight(getSwFrame()) ); } @@ -1102,16 +1090,15 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs ) nWidth -= rAttrs.CalcRightLine(); nWidth = std::max( nMinWidth, nWidth ); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetWidth( aPrt, std::min( nWidth, aRectFnSet.GetWidth(aPrt) ) ); - setSwPrint(aPrt); } if ( aRectFnSet.GetWidth(getSwPrint()) <= MINLAY ) { // The PrtArea should already be at least MINLAY wide, matching the // minimal values of the UI - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetWidth( aPrt, std::min( long(MINLAY), aRectFnSet.GetWidth(getSwFrame()) ) ); SwTwips nTmp = aRectFnSet.GetWidth(getSwFrame()) - aRectFnSet.GetWidth(aPrt); @@ -1119,8 +1106,6 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs ) { aRectFnSet.SetLeft( aPrt, nTmp ); } - - setSwPrint(aPrt); } // The following rules apply for VarSize: @@ -1143,9 +1128,10 @@ bool SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs ) nLower=0; } - SwRect aPrt(getSwPrint()); - aRectFnSet.SetPosY( aPrt, (!aRectFnSet.IsVert() || mbReverse) ? nUpper : nLower); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetPosY( aPrt, (!aRectFnSet.IsVert() || mbReverse) ? nUpper : nLower); + } nUpper += nLower; nUpper -= aRectFnSet.GetHeight(getSwFrame()) - aRectFnSet.GetHeight(getSwPrint()); @@ -1389,9 +1375,10 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) mbValidPrtArea = false; } - SwRect aFrm(getSwFrame()); - aRectFnSet.SetWidth( aFrm, nNewFrameWidth ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetWidth( aFrm, nNewFrameWidth ); + } // When a lower of a vertically aligned fly frame changes its size we need to recalculate content pos. if( GetUpper() && GetUpper()->IsFlyFrame() && @@ -1518,9 +1505,10 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) Prepare( PREP_POS_CHGD, static_cast<const void*>(&bFormatted), false ); if ( !mbValidSize ) { - SwRect aFrm(getSwFrame()); - aRectFnSet.SetWidth( aFrm, aRectFnSet.GetWidth(GetUpper()->getSwPrint()) ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetWidth( aFrm, aRectFnSet.GetWidth(GetUpper()->getSwPrint()) ); + } if ( !mbValidPrtArea ) { @@ -1879,7 +1867,7 @@ void MakeNxt( SwFrame *pFrame, SwFrame *pNxt ) const SwBorderAttrs &rAttrs = *aAccess.Get(); if ( !pNxt->GetValidSizeFlag() ) { - SwRect aFrm(pNxt->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pNxt); if( pNxt->IsVertical() ) { @@ -1889,8 +1877,6 @@ void MakeNxt( SwFrame *pFrame, SwFrame *pNxt ) { aFrm.Width( pNxt->GetUpper()->getSwPrint().Width() ); } - - pNxt->setSwFrame(aFrm); } static_cast<SwContentFrame*>(pNxt)->MakePrtArea( rAttrs ); pNxt->Format( pNxt->getRootFrame()->GetCurrShell()->GetOut(), &rAttrs ); @@ -1902,7 +1888,7 @@ void MakeNxt( SwFrame *pFrame, SwFrame *pNxt ) const SwBorderAttrs &rAttrs = *aAccess.Get(); if ( !pNxt->GetValidSizeFlag() ) { - SwRect aFrm(pNxt->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pNxt); if( pNxt->IsVertical() ) { @@ -1912,8 +1898,6 @@ void MakeNxt( SwFrame *pFrame, SwFrame *pNxt ) { aFrm.Width( pNxt->GetUpper()->getSwPrint().Width() ); } - - pNxt->setSwFrame(aFrm); } pNxt->Format( pNxt->getRootFrame()->GetCurrShell()->GetOut(), &rAttrs ); } diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx index 3f319f69aeae..8e425948d0c6 100644 --- a/sw/source/core/layout/fly.cxx +++ b/sw/source/core/layout/fly.cxx @@ -129,10 +129,11 @@ SwFlyFrame::SwFlyFrame( SwFlyFrameFormat *pFormat, SwFrame* pSib, SwFrame *pAnch mbRightToLeft = false; } - SwRect aFrm(getSwFrame()); - aFrm.Width( rFrameSize.GetWidth() ); - aFrm.Height( rFrameSize.GetHeightSizeType() == ATT_VAR_SIZE ? MINFLY : rFrameSize.GetHeight() ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Width( rFrameSize.GetWidth() ); + aFrm.Height( rFrameSize.GetHeightSizeType() == ATT_VAR_SIZE ? MINFLY : rFrameSize.GetHeight() ); + } // Fixed or variable Height? if ( rFrameSize.GetHeightSizeType() == ATT_MIN_SIZE ) @@ -153,9 +154,9 @@ SwFlyFrame::SwFlyFrame( SwFlyFrameFormat *pFormat, SwFrame* pSib, SwFrame *pAnch InsertCnt(); // Put it somewhere outside so that out document is not formatted unnecessarily often + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().setX(FAR_AWAY); aFrm.Pos().setY(FAR_AWAY); - setSwFrame(aFrm); } void SwFlyFrame::Chain( SwFrame* _pAnch ) @@ -227,10 +228,11 @@ void SwFlyFrame::InsertColumns() { // Start off PrtArea to be as large as Frame, so that we can put in the columns // properly. It'll adjust later on. - SwRect aPrt(getSwPrint()); - aPrt.Width( getSwFrame().Width() ); - aPrt.Height( getSwFrame().Height() ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Width( getSwFrame().Width() ); + aPrt.Height( getSwFrame().Height() ); + } const SwFormatCol aOld; // ChgColumns() also needs an old value passed ChgColumns( aOld, rCol ); @@ -557,18 +559,21 @@ bool SwFlyFrame::FrameSizeChg( const SwFormatFrameSize &rFrameSize ) const SwRect aOld( GetObjRectWithSpaces() ); const Size aOldSz( getSwPrint().SSize() ); const SwTwips nDiffWidth = getSwFrame().Width() - rFrameSize.GetWidth(); - SwRect aFrm(getSwFrame()); - aFrm.Height( aFrm.Height() - nDiffHeight ); - aFrm.Width ( aFrm.Width() - nDiffWidth ); - setSwFrame(aFrm); + + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Height( aFrm.Height() - nDiffHeight ); + aFrm.Width ( aFrm.Width() - nDiffWidth ); + } // #i68520# InvalidateObjRectWithSpaces(); - SwRect aPrt(getSwPrint()); - aPrt.Height( aPrt.Height() - nDiffHeight ); - aPrt.Width ( aPrt.Width() - nDiffWidth ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Height( aPrt.Height() - nDiffHeight ); + aPrt.Width ( aPrt.Width() - nDiffWidth ); + } ChgLowersProp( aOldSz ); ::Notify( this, FindPageFrame(), aOld ); @@ -1166,10 +1171,11 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA if ( getSwFrame().Top() == FAR_AWAY && getSwFrame().Left() == FAR_AWAY ) { // Remove safety switch (see SwFrame::CTor) - SwRect aFrm(getSwFrame()); - aFrm.Pos().setX(0); - aFrm.Pos().setY(0); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Pos().setX(0); + aFrm.Pos().setY(0); + } // #i68520# InvalidateObjRectWithSpaces(); @@ -1209,15 +1215,17 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA if ( nRemaining < MINFLY ) nRemaining = MINFLY; - SwRect aPrt(getSwPrint()); - aRectFnSet.SetHeight( aPrt, nRemaining ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetHeight( aPrt, nRemaining ); + } nRemaining -= aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nRemaining + nUL ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nRemaining + nUL ); + } // #i68520# if ( nRemaining + nUL != 0 ) @@ -1249,15 +1257,17 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA if( nNewSize < MINFLY ) nNewSize = MINFLY; - SwRect aPrt(getSwPrint()); - aRectFnSet.SetHeight( aPrt, nNewSize ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetHeight( aPrt, nNewSize ); + } nNewSize += nUL - aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nNewSize ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nNewSize ); + } // #i68520# if ( nNewSize != 0 ) @@ -1289,15 +1299,17 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA if( nNewSize < MINFLY ) nNewSize = MINFLY; - SwRect aPrt(getSwPrint()); - aRectFnSet.SetWidth( aPrt, nNewSize ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetWidth( aPrt, nNewSize ); + } nNewSize += nLR - aRectFnSet.GetWidth(getSwFrame()); - SwRect aFrm(getSwFrame()); - aRectFnSet.AddRight( aFrm, nNewSize ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddRight( aFrm, nNewSize ); + } // #i68520# if ( nNewSize != 0 ) @@ -1643,11 +1655,12 @@ void SwFlyFrame::MakeObjPos() // update relative position SetCurrRelPos( aObjPositioning.GetRelPos() ); - SwRectFnSet aRectFnSet(GetAnchorFrame()); - SwRect aFrm(getSwFrame()); - aFrm.Pos( aObjPositioning.GetRelPos() ); - aFrm.Pos() += aRectFnSet.GetPos(GetAnchorFrame()->getSwFrame()); - setSwFrame(aFrm); + { + SwRectFnSet aRectFnSet(GetAnchorFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Pos( aObjPositioning.GetRelPos() ); + aFrm.Pos() += aRectFnSet.GetPos(GetAnchorFrame()->getSwFrame()); + } // #i69335# InvalidateObjRectWithSpaces(); @@ -1841,9 +1854,10 @@ SwTwips SwFlyFrame::Shrink_( SwTwips nDist, bool bTst ) { SwRect aOld( GetObjRectWithSpaces() ); - SwRect aFrm(getSwFrame()); - aRectFnSet.SetHeight( aFrm, nHeight - nVal ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetHeight( aFrm, nHeight - nVal ); + } // #i68520# if ( nHeight - nVal != 0 ) @@ -1853,9 +1867,10 @@ SwTwips SwFlyFrame::Shrink_( SwTwips nDist, bool bTst ) nHeight = aRectFnSet.GetHeight(getSwPrint()); - SwRect aPrt(getSwPrint()); - aRectFnSet.SetHeight( aPrt, nHeight - nVal ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetHeight( aPrt, nHeight - nVal ); + } InvalidatePos_(); InvalidateSize(); @@ -2555,20 +2570,16 @@ const SwRect SwFlyFrame::GetObjBoundRect() const bool SwFlyFrame::SetObjTop_( const SwTwips _nTop ) { const bool bChanged( getSwFrame().Pos().getY() != _nTop ); - SwRect aFrm(getSwFrame()); - + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().setY(_nTop); - setSwFrame(aFrm); return bChanged; } bool SwFlyFrame::SetObjLeft_( const SwTwips _nLeft ) { const bool bChanged( getSwFrame().Pos().getX() != _nLeft ); - SwRect aFrm(getSwFrame()); - + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().setX(_nLeft); - setSwFrame(aFrm); return bChanged; } diff --git a/sw/source/core/layout/flyincnt.cxx b/sw/source/core/layout/flyincnt.cxx index ec28f3bdbdca..6544bad582ab 100644 --- a/sw/source/core/layout/flyincnt.cxx +++ b/sw/source/core/layout/flyincnt.cxx @@ -74,9 +74,10 @@ void SwFlyInContentFrame::SetRefPoint( const Point& rPoint, SetCurrRelPos( rRelAttr ); SwRectFnSet aRectFnSet(GetAnchorFrame()); - SwRect aFrm(getSwFrame()); - aRectFnSet.SetPos( aFrm, rPoint + rRelPos ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetPos( aFrm, rPoint + rRelPos ); + } // #i68520# InvalidateObjRectWithSpaces(); @@ -262,10 +263,8 @@ void SwFlyInContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) if ( getSwFrame().Left() == (pFrame->getSwFrame().Left()+pFrame->getSwPrint().Left()) && getSwFrame().Width() > pFrame->getSwPrint().Width() ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Width( pFrame->getSwPrint().Width() ); - setSwFrame(aFrm); - mbValidPrtArea = false; m_bWidthClipped = true; } diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx index a93ce3d1350e..9226ee283336 100644 --- a/sw/source/core/layout/flylay.cxx +++ b/sw/source/core/layout/flylay.cxx @@ -297,9 +297,11 @@ void SwFlyFreeFrame::CheckClip( const SwFormatFrameSize &rSz ) if ( !pHeader || !pHeader->IsHeaderFrame() ) { const long nOld = getSwFrame().Top(); - SwRect aFrm(getSwFrame()); - aFrm.Pos().Y() = std::max( aClip.Top(), nClipBot - aFrm.Height() ); - setSwFrame(aFrm); + + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Pos().Y() = std::max( aClip.Top(), nClipBot - aFrm.Height() ); + } if ( getSwFrame().Top() != nOld ) { @@ -312,9 +314,11 @@ void SwFlyFreeFrame::CheckClip( const SwFormatFrameSize &rSz ) if ( bRig ) { const long nOld = getSwFrame().Left(); - SwRect aFrm(getSwFrame()); - aFrm.Pos().X() = std::max( aClip.Left(), nClipRig - aFrm.Width() ); - setSwFrame(aFrm); + + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Pos().X() = std::max( aClip.Left(), nClipRig - aFrm.Width() ); + } if ( getSwFrame().Left() != nOld ) { @@ -323,9 +327,8 @@ void SwFlyFreeFrame::CheckClip( const SwFormatFrameSize &rSz ) // are avoiding another one. if( rH.GetHoriOrient() == text::HoriOrientation::LEFT ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().X() = nOld; - setSwFrame(aFrm); } else { @@ -436,19 +439,23 @@ void SwFlyFreeFrame::CheckClip( const SwFormatFrameSize &rSz ) const long nPrtWidthDiff = getSwFrame().Width() - getSwPrint().Width(); maUnclippedFrame = getSwFrame(); - SwRect aFrm(getSwFrame()); - aFrm.Height( aFrameRect.Height() ); - aFrm.Width ( std::max( long(MINLAY), aFrameRect.Width() ) ); - setSwFrame(aFrm); - - SwRect aPrt(getSwPrint()); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Height( aFrameRect.Height() ); + aFrm.Width ( std::max( long(MINLAY), aFrameRect.Width() ) ); + } if ( Lower() && Lower()->IsColumnFrame() ) { ColLock(); //lock grow/shrink - const Size aTmpOldSize( aPrt.SSize() ); - aPrt.Height( getSwFrame().Height() - nPrtHeightDiff ); - aPrt.Width ( getSwFrame().Width() - nPrtWidthDiff ); + const Size aTmpOldSize( getSwPrint().SSize() ); + + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Height( getSwFrame().Height() - nPrtHeightDiff ); + aPrt.Width ( getSwFrame().Width() - nPrtWidthDiff ); + } + ChgLowersProp( aTmpOldSize ); SwFrame *pLow = Lower(); do @@ -465,11 +472,10 @@ void SwFlyFreeFrame::CheckClip( const SwFormatFrameSize &rSz ) } else { + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Height( getSwFrame().Height() - nPrtHeightDiff ); aPrt.Width ( getSwFrame().Width() - nPrtWidthDiff ); } - - setSwPrint(aPrt); } } diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx index 95cee18ec659..471f46a851b8 100644 --- a/sw/source/core/layout/frmtool.cxx +++ b/sw/source/core/layout/frmtool.cxx @@ -1120,7 +1120,7 @@ static void lcl_SetPos( SwFrame& _rNewFrame, const SwLayoutFrame& _rLayFrame ) { SwRectFnSet aRectFnSet(&_rLayFrame); - SwRect aFrm(_rNewFrame.getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(_rNewFrame); aRectFnSet.SetPos( aFrm, aRectFnSet.GetPos(_rLayFrame.getSwFrame()) ); // move position by one SwTwip in text flow direction in order to get @@ -1133,8 +1133,6 @@ static void lcl_SetPos( SwFrame& _rNewFrame, { aFrm.Pos().Y() += 1; } - - _rNewFrame.setSwFrame(aFrm); } void InsertCnt_( SwLayoutFrame *pLay, SwDoc *pDoc, diff --git a/sw/source/core/layout/ftnfrm.cxx b/sw/source/core/layout/ftnfrm.cxx index 20d68c0fa1f4..a1b8dcef7768 100644 --- a/sw/source/core/layout/ftnfrm.cxx +++ b/sw/source/core/layout/ftnfrm.cxx @@ -191,7 +191,7 @@ void SwFootnoteContFrame::Format( vcl::RenderContext* /*pRenderContext*/, const if ( !mbValidPrtArea ) { mbValidPrtArea = true; - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetTop( aPrt, nBorder ); aRectFnSet.SetWidth( aPrt, aRectFnSet.GetWidth(getSwFrame()) ); @@ -201,8 +201,6 @@ void SwFootnoteContFrame::Format( vcl::RenderContext* /*pRenderContext*/, const { mbValidSize = false; } - - setSwPrint(aPrt); } if ( !mbValidSize ) @@ -243,10 +241,9 @@ void SwFootnoteContFrame::Format( vcl::RenderContext* /*pRenderContext*/, const nDiff = aRectFnSet.GetHeight(getSwFrame()); } - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.AddBottom( aFrm, -nDiff ); aRectFnSet.AddHeight( aFrm, -nDiff ); - setSwFrame(aFrm); } } nDiff = aRectFnSet.GetHeight(getSwFrame()) - nRemaining; @@ -262,10 +259,8 @@ void SwFootnoteContFrame::Format( vcl::RenderContext* /*pRenderContext*/, const if( nPrtHeight < 0 ) { const SwTwips nTmpDiff = std::max( aRectFnSet.GetTop(getSwPrint()), -nPrtHeight ); - - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SubTop( aPrt, nTmpDiff ); - setSwPrint(aPrt); } } } @@ -340,15 +335,13 @@ SwTwips SwFootnoteContFrame::GrowFrame( SwTwips nDist, bool bTst, bool ) if ( !bTst ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, aRectFnSet.GetHeight(aFrm) + nDist ); if( IsVertical() && !IsVertLR() && !IsReverse() ) { aFrm.Pos().X() -= nDist; } - - setSwFrame(aFrm); } long nGrow = nDist - nAvail, nReal = 0; @@ -389,15 +382,13 @@ SwTwips SwFootnoteContFrame::GrowFrame( SwTwips nDist, bool bTst, bool ) nDist -= nReal; // We can only respect the boundless wish so much - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.SSize().Height() -= nDist; if( IsVertical() && !IsVertLR() && !IsReverse() ) { aFrm.Pos().X() += nDist; } - - setSwFrame(aFrm); } // growing happens upwards, so successors to not need to be invalidated @@ -1926,13 +1917,11 @@ void SwFootnoteBossFrame::MoveFootnotes_( SwFootnoteFrames &rFootnoteArr, bool b { pTmp->Prepare( PREP_MOVEFTN ); - SwRect aFrm(pTmp->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pTmp); aRectFnSet.SetHeight(aFrm, 0); - pTmp->setSwFrame(aFrm); - SwRect aPrt(pTmp->getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*pTmp); aRectFnSet.SetHeight(aPrt, 0); - pTmp->setSwPrint(aPrt); pTmp = pTmp->FindNext(); } @@ -1942,24 +1931,24 @@ void SwFootnoteBossFrame::MoveFootnotes_( SwFootnoteFrames &rFootnoteArr, bool b pCnt->Prepare( PREP_MOVEFTN ); } - SwRect aFrm(pCnt->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pCnt); aRectFnSet.SetHeight(aFrm, 0); - pCnt->setSwFrame(aFrm); - SwRect aPrt(pCnt->getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*pCnt); aRectFnSet.SetHeight(aPrt, 0); - pCnt->setSwPrint(aPrt); pCnt = pCnt->GetNext(); } - SwRect aFrm(pFootnote->getSwFrame()); - aRectFnSet.SetHeight(aFrm, 0); - pFootnote->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pFootnote); + aRectFnSet.SetHeight(aFrm, 0); + } - SwRect aPrt(pFootnote->getSwPrint()); - aRectFnSet.SetHeight(aPrt, 0); - pFootnote->setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*pFootnote); + aRectFnSet.SetHeight(aPrt, 0); + } pFootnote->Calc(getRootFrame()->GetCurrShell()->GetOut()); pFootnote->GetUpper()->Calc(getRootFrame()->GetCurrShell()->GetOut()); @@ -2749,10 +2738,11 @@ bool SwContentFrame::MoveFootnoteCntFwd( bool bMakePage, SwFootnoteBossFrame *pO pNewUp->InsertBefore( pTmpFootnote, pTmpFootnote->Lower() ); static_cast<SwSectionFrame*>(pNewUp)->Init(); - SwRect aFrm(pNewUp->getSwFrame()); - aFrm.Pos() = pTmpFootnote->getSwFrame().Pos(); - aFrm.Pos().Y() += 1; // for notifications - pNewUp->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pNewUp); + aFrm.Pos() = pTmpFootnote->getSwFrame().Pos(); + aFrm.Pos().Y() += 1; // for notifications + } // If the section frame has a successor then the latter needs // to be moved behind the new Follow of the section frame. diff --git a/sw/source/core/layout/hffrm.cxx b/sw/source/core/layout/hffrm.cxx index 1f99057c639a..6a066db2db36 100644 --- a/sw/source/core/layout/hffrm.cxx +++ b/sw/source/core/layout/hffrm.cxx @@ -111,8 +111,6 @@ SwHeadFootFrame::SwHeadFootFrame( SwFrameFormat * pFormat, SwFrame* pSib, SwFram void SwHeadFootFrame::FormatPrt(SwTwips & nUL, const SwBorderAttrs * pAttrs) { - SwRect aPrt(getSwPrint()); - if (GetEatSpacing()) { /* The minimal height of the print area is the minimal height of the @@ -173,6 +171,7 @@ void SwHeadFootFrame::FormatPrt(SwTwips & nUL, const SwBorderAttrs * pAttrs) /* set print area */ // OD 23.01.2003 #106895# - add first parameter to <SwBorderAttrs::CalcRight(..)> SwTwips nLR = pAttrs->CalcLeft( this ) + pAttrs->CalcRight( this ); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Left(pAttrs->CalcLeft(this)); @@ -203,6 +202,7 @@ void SwHeadFootFrame::FormatPrt(SwTwips & nUL, const SwBorderAttrs * pAttrs) else { // Set position + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Left( pAttrs->CalcLeft( this ) ); aPrt.Top ( pAttrs->CalcTop() ); @@ -212,10 +212,8 @@ void SwHeadFootFrame::FormatPrt(SwTwips & nUL, const SwBorderAttrs * pAttrs) SwTwips nLR = pAttrs->CalcLeft( this ) + pAttrs->CalcRight( this ); aPrt.Width ( getSwFrame().Width() - nLR ); aPrt.Height( getSwFrame().Height()- nUL ); - } - setSwPrint(aPrt); mbValidPrtArea = true; } @@ -380,13 +378,11 @@ void SwHeadFootFrame::FormatSize(SwTwips nUL, const SwBorderAttrs * pAttrs) if ( nBot > nDeadLine ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Bottom( nDeadLine ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.SSize().Height() = getSwFrame().Height() - nBorder; - setSwPrint(aPrt); } } mbValidSize = mbValidPrtArea = true; @@ -491,10 +487,9 @@ SwTwips SwHeadFootFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) { if (! IsHeaderFrame()) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Top(aPrt.Top() - nEat); aPrt.Height(aPrt.Height() - nEat); - setSwPrint(aPrt); } InvalidateAll(); @@ -609,10 +604,9 @@ SwTwips SwHeadFootFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) { if (! IsHeaderFrame() ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Top(aPrt.Top() + nShrink); aPrt.Height(aPrt.Height() - nShrink); - setSwPrint(aPrt); } InvalidateAll(); diff --git a/sw/source/core/layout/laycache.cxx b/sw/source/core/layout/laycache.cxx index 60ce7c3576b9..32e2643deb3b 100644 --- a/sw/source/core/layout/laycache.cxx +++ b/sw/source/core/layout/laycache.cxx @@ -806,10 +806,11 @@ bool SwLayHelper::CheckInsert( sal_uLong nNodeIndex ) { mrpFrame->InsertBehind( mrpLay, mrpPrv ); - SwRect aFrm(mrpFrame->getSwFrame()); - aFrm.Pos() = mrpLay->getSwFrame().Pos(); - aFrm.Pos().Y() += 1; - mrpFrame->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*mrpFrame); + aFrm.Pos() = mrpLay->getSwFrame().Pos(); + aFrm.Pos().Y() += 1; + } mrpPrv = mrpFrame; if( mrpFrame->IsTabFrame() ) @@ -881,9 +882,8 @@ bool SwLayHelper::CheckInsert( sal_uLong nNodeIndex ) CheckFlyCache_( pLastPage ); if( mrpPrv && mrpPrv->IsTextFrame() && !mrpPrv->GetValidSizeFlag() ) { - SwRect aFrm(mrpPrv->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*mrpPrv); aFrm.Height( mrpPrv->GetUpper()->getSwPrint().Height() ); - mrpPrv->setSwFrame(aFrm); } bRet = true; @@ -916,10 +916,11 @@ bool SwLayHelper::CheckInsert( sal_uLong nNodeIndex ) pSct->Init(); } - SwRect aFrm(pSct->getSwFrame()); - aFrm.Pos() = mrpLay->getSwFrame().Pos(); - aFrm.Pos().Y() += 1; //because of the notifications - pSct->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pSct); + aFrm.Pos() = mrpLay->getSwFrame().Pos(); + aFrm.Pos().Y() += 1; //because of the notifications + } mrpLay = pSct; if ( mrpLay->Lower() && mrpLay->Lower()->IsLayoutFrame() ) @@ -1018,7 +1019,7 @@ void SwLayHelper::CheckFlyCache_( SwPageFrame* pPage ) if ( pFly->getSwFrame().Left() == FAR_AWAY ) { // we get the stored information - SwRect aFrm(pFly->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pFly); aFrm.Pos().X() = pFlyCache->Left() + pPage->getSwFrame().Left(); aFrm.Pos().Y() = pFlyCache->Top() + pPage->getSwFrame().Top(); @@ -1027,8 +1028,6 @@ void SwLayHelper::CheckFlyCache_( SwPageFrame* pPage ) aFrm.Width( pFlyCache->Width() ); aFrm.Height( pFlyCache->Height() ); } - - pFly->setSwFrame(aFrm); } ++aFlyCacheSetIt; diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx index f22203b2abed..b63190b1d38e 100644 --- a/sw/source/core/layout/pagechg.cxx +++ b/sw/source/core/layout/pagechg.cxx @@ -96,7 +96,7 @@ void SwBodyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorder nHeight = 0; } - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Height( nHeight ); if( IsVertical() && !IsVertLR() && !IsReverse() && nWidth != aFrm.Width() ) @@ -105,7 +105,6 @@ void SwBodyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorder } aFrm.Width( nWidth ); - setSwFrame(aFrm); } bool bNoGrid = true; @@ -128,7 +127,8 @@ void SwBodyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorder nSize -= nBorder; nBorder /= 2; } - SwRect aPrt(getSwPrint()); + + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetPosX( aPrt, nBorder ); aRectFnSet.SetWidth( aPrt, nSize ); @@ -151,18 +151,16 @@ void SwBodyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorder aRectFnSet.SetPosY( aPrt, bAdjust ? nBorder : 0 ); aRectFnSet.SetHeight( aPrt, nSize ); - setSwPrint(aPrt); } } if( bNoGrid ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Pos().setX(0); aPrt.Pos().setY(0); aPrt.Height( getSwFrame().Height() ); aPrt.Width( getSwFrame().Width() ); - setSwPrint(aPrt); } mbValidSize = mbValidPrtArea = true; @@ -194,26 +192,27 @@ SwPageFrame::SwPageFrame( SwFrameFormat *pFormat, SwFrame* pSib, SwPageDesc *pPg SwViewShell *pSh = getRootFrame()->GetCurrShell(); const bool bBrowseMode = pSh && pSh->GetViewOptions()->getBrowseMode(); vcl::RenderContext* pRenderContext = pSh ? pSh->GetOut() : nullptr; - SwRect aFrm(getSwFrame()); - if ( bBrowseMode ) { - aFrm.Height( 0 ); - long nWidth = pSh->VisArea().Width(); + SwFrameRect::FrameWriteAccess aFrm(*this); - if ( !nWidth ) + if ( bBrowseMode ) { - nWidth = 5000; // changes anyway - } + aFrm.Height( 0 ); + long nWidth = pSh->VisArea().Width(); - aFrm.Width ( nWidth ); - } - else - { - aFrm.SSize( pFormat->GetFrameSize().GetSize() ); - } + if ( !nWidth ) + { + nWidth = 5000; // changes anyway + } - setSwFrame(aFrm); + aFrm.Width ( nWidth ); + } + else + { + aFrm.SSize( pFormat->GetFrameSize().GetSize() ); + } + } // create and insert body area if it is not a blank page SwDoc *pDoc = pFormat->GetDoc(); @@ -625,10 +624,11 @@ void SwPageFrame::UpdateAttr_( const SfxPoolItem *pOld, const SfxPoolItem *pNew, static_cast<const SwFormatChg*>(pNew)->pChangedFormat->GetFrameSize() : static_cast<const SwFormatFrameSize&>(*pNew); - SwRect aFrm(getSwFrame()); - aFrm.Height( std::max( rSz.GetHeight(), long(MINLAY) ) ); - aFrm.Width ( std::max( rSz.GetWidth(), long(MINLAY) ) ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Height( std::max( rSz.GetHeight(), long(MINLAY) ) ); + aFrm.Width ( std::max( rSz.GetWidth(), long(MINLAY) ) ); + } if ( GetUpper() ) { @@ -1356,9 +1356,8 @@ SwTwips SwRootFrame::GrowFrame( SwTwips nDist, bool bTst, bool ) { if ( !bTst ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.SSize().Height() += nDist; - setSwFrame(aFrm); } return nDist; @@ -1371,9 +1370,8 @@ SwTwips SwRootFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool ) if ( !bTst ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.SSize().Height() -= nDist; - setSwFrame(aFrm); } return nDist; @@ -1589,9 +1587,10 @@ void SwRootFrame::AssertPageFlys( SwPageFrame *pPage ) Size SwRootFrame::ChgSize( const Size& aNewSize ) { - SwRect aFrm(getSwFrame()); - aFrm.SSize() = aNewSize; - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.SSize() = aNewSize; + } InvalidatePrt_(); mbFixSize = false; @@ -1604,21 +1603,18 @@ void SwRootFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/) { mbValidPos = true; - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().setX(DOCUMENTBORDER); aFrm.Pos().setY(DOCUMENTBORDER); - setSwFrame(aFrm); } if ( !mbValidPrtArea ) { mbValidPrtArea = true; - - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Pos().setX(0); aPrt.Pos().setY(0); aPrt.SSize( getSwFrame().SSize() ); - setSwPrint(aPrt); } if ( !mbValidSize ) @@ -1931,19 +1927,19 @@ static void lcl_MoveAllLowers( SwFrame* pFrame, const Point& rOffset ) const SwRect aFrame( pFrame->getSwFrame() ); // first move the current frame - SwRect aFrm(pFrame->getSwFrame()); - - if (aFrm.Pos().X() != FAR_AWAY) { - aFrm.Pos().X() += rOffset.X(); - } + SwFrameRect::FrameWriteAccess aFrm(*pFrame); - if (aFrm.Pos().Y() != FAR_AWAY) - { - aFrm.Pos().Y() += rOffset.Y(); - } + if (aFrm.Pos().X() != FAR_AWAY) + { + aFrm.Pos().X() += rOffset.X(); + } - pFrame->setSwFrame(aFrm); + if (aFrm.Pos().Y() != FAR_AWAY) + { + aFrm.Pos().Y() += rOffset.Y(); + } + } // Don't forget accessibility: if( pFrame->IsAccessibleFrame() ) diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx index 94e8dae37885..79627835e543 100644 --- a/sw/source/core/layout/sectfrm.cxx +++ b/sw/source/core/layout/sectfrm.cxx @@ -102,18 +102,21 @@ void SwSectionFrame::Init() SwRectFnSet aRectFnSet(this); long nWidth = aRectFnSet.GetWidth(GetUpper()->getSwPrint()); - SwRect aFrm(getSwFrame()); - aRectFnSet.SetWidth( aFrm, nWidth ); - aRectFnSet.SetHeight( aFrm, 0 ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetWidth( aFrm, nWidth ); + aRectFnSet.SetHeight( aFrm, 0 ); + } // #109700# LRSpace for sections const SvxLRSpaceItem& rLRSpace = GetFormat()->GetLRSpace(); - SwRect aPrt(getSwPrint()); - aRectFnSet.SetLeft( aPrt, rLRSpace.GetLeft() ); - aRectFnSet.SetWidth( aPrt, nWidth - rLRSpace.GetLeft() - rLRSpace.GetRight() ); - aRectFnSet.SetHeight( aPrt, 0 ); - setSwPrint(aPrt); + + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetLeft( aPrt, rLRSpace.GetLeft() ); + aRectFnSet.SetWidth( aPrt, nWidth - rLRSpace.GetLeft() - rLRSpace.GetRight() ); + aRectFnSet.SetHeight( aPrt, 0 ); + } const SwFormatCol &rCol = GetFormat()->GetCol(); if( ( rCol.GetNumCols() > 1 || IsAnyNoteAtEnd() ) && !IsInFootnote() ) @@ -201,9 +204,10 @@ void SwSectionFrame::DelEmpty( bool bRemove ) SetFollow(nullptr); if( pUp ) { - SwRect aFrm(getSwFrame()); - aFrm.Height( 0 ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Height( 0 ); + } // If we are destroyed immediately anyway, we don't need // to put us into the list @@ -215,7 +219,10 @@ void SwSectionFrame::DelEmpty( bool bRemove ) getRootFrame()->RemoveFromList( this ); } else if( getRootFrame() ) + { getRootFrame()->InsertEmptySct( this ); + } + m_pSection = nullptr; // like this a reanimation is virtually impossible though } } @@ -293,13 +300,11 @@ void SwSectionFrame::Cut_( bool bRemove ) { if( !bRemove ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, 0 ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetHeight( aPrt, 0 ); - setSwPrint(aPrt); } pUp->Shrink( nFrameHeight ); @@ -1070,9 +1075,10 @@ void SwSectionFrame::CheckClipping( bool bGrow, bool bMaximize ) const Size aOldSz( getSwPrint().SSize() ); long nTop = aRectFnSet.GetTopMargin(*this); - SwRect aFrm(getSwFrame()); - aRectFnSet.SetBottom( aFrm, nDeadLine ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetBottom( aFrm, nDeadLine ); + } nDiff = aRectFnSet.GetHeight(getSwFrame()); if( nTop > nDiff ) @@ -1127,9 +1133,10 @@ void SwSectionFrame::SimpleFormat() // order to get calculated lowers, not only if there space left in its upper. if( aRectFnSet.BottomDist( getSwFrame(), nDeadLine ) >= 0 ) { - SwRect aFrm(getSwFrame()); - aRectFnSet.SetBottom( aFrm, nDeadLine ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetBottom( aFrm, nDeadLine ); + } long nHeight = aRectFnSet.GetHeight(getSwFrame()); long nTop = CalcUpperSpace(); @@ -1213,9 +1220,10 @@ class ExtraFormatToPositionObjs Size aOldSectPrtSize( mpSectFrame->getSwPrint().SSize() ); SwTwips nDiff = aRectFnSet.BottomDist( mpSectFrame->getSwFrame(), aRectFnSet.GetPrtBottom(*mpSectFrame->GetUpper()) ); - SwRect aFrm(mpSectFrame->getSwFrame()); - aRectFnSet.AddBottom( aFrm, nDiff ); - mpSectFrame->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*mpSectFrame); + aRectFnSet.AddBottom( aFrm, nDiff ); + } aRectFnSet.SetYMargins( *mpSectFrame, nTopMargin, 0 ); // #i59789# @@ -1341,16 +1349,19 @@ void SwSectionFrame::Format( vcl::RenderContext* pRenderContext, const SwBorderA if( GetUpper() ) { - long nWidth = aRectFnSet.GetWidth(GetUpper()->getSwPrint()); - SwRect aFrm(getSwFrame()); - aRectFnSet.SetWidth( aFrm, nWidth ); - setSwFrame(aFrm); + const long nWidth = aRectFnSet.GetWidth(GetUpper()->getSwPrint()); + + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetWidth( aFrm, nWidth ); + } // #109700# LRSpace for sections - const SvxLRSpaceItem& rLRSpace = GetFormat()->GetLRSpace(); - SwRect aPrt(getSwPrint()); - aRectFnSet.SetWidth( aPrt, nWidth - rLRSpace.GetLeft() - rLRSpace.GetRight() ); - setSwPrint(aPrt); + { + const SvxLRSpaceItem& rLRSpace = GetFormat()->GetLRSpace(); + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetWidth( aPrt, nWidth - rLRSpace.GetLeft() - rLRSpace.GetRight() ); + } // OD 15.10.2002 #103517# - allow grow in online layout // Thus, set <..IsBrowseMode()> as parameter <bGrow> on calling @@ -1437,9 +1448,10 @@ void SwSectionFrame::Format( vcl::RenderContext* pRenderContext, const SwBorderA long nTmp = nRemaining - aRectFnSet.GetHeight(getSwFrame()); long nTop = aRectFnSet.GetTopMargin(*this); - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nTmp ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nTmp ); + } aRectFnSet.SetYMargins( *this, nTop, 0 ); InvalidateNextPos(); @@ -2053,14 +2065,16 @@ SwTwips SwSectionFrame::Grow_( SwTwips nDist, bool bTst ) GetUpper()->InvalidateSize(); } - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nGrow ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nGrow ); + } - long nPrtHeight = aRectFnSet.GetHeight(getSwPrint()) + nGrow; - SwRect aPrt(getSwPrint()); - aRectFnSet.SetHeight( aPrt, nPrtHeight ); - setSwPrint(aPrt); + { + const long nPrtHeight = aRectFnSet.GetHeight(getSwPrint()) + nGrow; + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetHeight( aPrt, nPrtHeight ); + } if( Lower() && Lower()->IsColumnFrame() && Lower()->GetNext() ) { @@ -2142,14 +2156,16 @@ SwTwips SwSectionFrame::Shrink_( SwTwips nDist, bool bTst ) InvalidatePage(); } - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, -nDist ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, -nDist ); + } - long nPrtHeight = aRectFnSet.GetHeight(getSwPrint()) - nDist; - SwRect aPrt(getSwPrint()); - aRectFnSet.SetHeight( aPrt, nPrtHeight ); - setSwPrint(aPrt); + { + const long nPrtHeight = aRectFnSet.GetHeight(getSwPrint()) - nDist; + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.SetHeight( aPrt, nPrtHeight ); + } // We do not allow a section frame to shrink the its upper // footer frame. This is because in the calculation of a diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx index fcd7aa9a88c5..edcc34354ff8 100644 --- a/sw/source/core/layout/ssfrm.cxx +++ b/sw/source/core/layout/ssfrm.cxx @@ -55,13 +55,11 @@ bool SwFrame::SetMinLeft( long nDeadline ) SwTwips nDiff = nDeadline - getSwFrame().Left(); if( nDiff > 0 ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Left( nDeadline ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Width( aPrt.Width() - nDiff ); - setSwPrint(aPrt); return true; } @@ -73,13 +71,11 @@ bool SwFrame::SetMaxBottom( long nDeadline ) SwTwips nDiff = getSwFrame().Top() + getSwFrame().Height() - nDeadline; if( nDiff > 0 ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Height( aFrm.Height() - nDiff ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Height( aPrt.Height() - nDiff ); - setSwPrint(aPrt); return true; } @@ -91,13 +87,11 @@ bool SwFrame::SetMinTop( long nDeadline ) SwTwips nDiff = nDeadline - getSwFrame().Top(); if( nDiff > 0 ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Top( nDeadline ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Height( aPrt.Height() - nDiff ); - setSwPrint(aPrt); return true; } @@ -109,13 +103,11 @@ bool SwFrame::SetMaxRight( long nDeadline ) SwTwips nDiff = getSwFrame().Left() + getSwFrame().Width() - nDeadline; if( nDiff > 0 ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Width( aFrm.Width() - nDiff ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Width( aPrt.Width() - nDiff ); - setSwPrint(aPrt); return true; } @@ -124,7 +116,7 @@ bool SwFrame::SetMaxRight( long nDeadline ) void SwFrame::MakeBelowPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotify ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); if( pPrv ) { @@ -141,13 +133,11 @@ void SwFrame::MakeBelowPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotif { aFrm.Pos().Y() += 1; } - - setSwFrame(aFrm); } void SwFrame::MakeUpperPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotify ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); if( pPrv ) { @@ -165,13 +155,11 @@ void SwFrame::MakeUpperPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotif { aFrm.Pos().Y() -= 1; } - - setSwFrame(aFrm); } void SwFrame::MakeLeftPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotify ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); if( pPrv ) { @@ -189,13 +177,11 @@ void SwFrame::MakeLeftPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotify { aFrm.Pos().X() -= 1; } - - setSwFrame(aFrm); } void SwFrame::MakeRightPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotify ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); if( pPrv ) { @@ -212,40 +198,34 @@ void SwFrame::MakeRightPos( const SwFrame* pUp, const SwFrame* pPrv, bool bNotif { aFrm.Pos().X() += 1; } - - setSwFrame(aFrm); } void SwFrame::SetTopBottomMargins( long nTop, long nBot ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Top( nTop ); aPrt.Height( getSwFrame().Height() - nTop - nBot ); - setSwPrint(aPrt); } void SwFrame::SetBottomTopMargins( long nBot, long nTop ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Top( nTop ); aPrt.Height( getSwFrame().Height() - nTop - nBot ); - setSwPrint(aPrt); } void SwFrame::SetLeftRightMargins( long nLeft, long nRight) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Left( nLeft ); aPrt.Width( getSwFrame().Width() - nLeft - nRight ); - setSwPrint(aPrt); } void SwFrame::SetRightLeftMargins( long nRight, long nLeft) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Left( nLeft ); aPrt.Width( getSwFrame().Width() - nLeft - nRight ); - setSwPrint(aPrt); } /// checks the layout direction and invalidates the lower frames recursively, if necessary. diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx index e2c096ba561c..cdf0ef0b9d01 100644 --- a/sw/source/core/layout/tabfrm.cxx +++ b/sw/source/core/layout/tabfrm.cxx @@ -353,14 +353,12 @@ static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) if (bAllRowsCollapsed) { // All rows of this table have 0 height -> set height of the table itself as well. - SwRect aFrm(pTmp->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pTmp); aRectFnSet.SetHeight(aFrm, 0); - pTmp->setSwFrame(aFrm); - SwRect aPrt(pTmp->getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*pTmp); aRectFnSet.SetTop(aPrt, 0); aRectFnSet.SetHeight(aPrt, 0); - pTmp->setSwPrint(aPrt); } else bAllLowersCollapsed = false; @@ -368,7 +366,7 @@ static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) else { pTmp->Shrink(aRectFnSet.GetHeight(pTmp->getSwFrame())); - SwRect aPrt(pTmp->getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*pTmp); aRectFnSet.SetTop(aPrt, 0); aRectFnSet.SetHeight(aPrt, 0); @@ -376,8 +374,6 @@ static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) { bAllLowersCollapsed = false; } - - pTmp->setSwPrint(aPrt); } pTmp = pTmp->GetPrev(); @@ -392,14 +388,12 @@ static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) if (bAllLowersCollapsed) { // All lower frame of this cell have 0 height -> set height of the cell itself as well. - SwRect aFrm(pCurrMasterCell->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pCurrMasterCell); aRectFnSet.SetHeight(aFrm, 0); - pCurrMasterCell->setSwFrame(aFrm); - SwRect aPrt(pCurrMasterCell->getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*pCurrMasterCell); aRectFnSet.SetTop(aPrt, 0); aRectFnSet.SetHeight(aPrt, 0); - pCurrMasterCell->setSwPrint(aPrt); } else bAllCellsCollapsed = false; @@ -410,14 +404,12 @@ static void lcl_ShrinkCellsAndAllContent( SwRowFrame& rRow ) if (bAllCellsCollapsed) { // All cells have 0 height -> set height of row as well. - SwRect aFrm(rRow.getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(rRow); aRectFnSet.SetHeight(aFrm, 0); - rRow.setSwFrame(aFrm); - SwRect aPrt(rRow.getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(rRow); aRectFnSet.SetTop(aPrt, 0); aRectFnSet.SetHeight(aPrt, 0); - rRow.setSwPrint(aPrt); } } @@ -805,9 +797,8 @@ static void lcl_AdjustRowSpanCells( SwRowFrame* pRow ) if ( nDiff ) { - SwRect aFrm(pCellFrame->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pCellFrame); aRectFnSet.AddBottom(aFrm, nDiff); - pCellFrame->setSwFrame(aFrm); } } @@ -1164,14 +1155,16 @@ bool SwTabFrame::Split( const SwTwips nCutPos, bool bTryToSplit, bool bTableRowK pFoll = new SwTabFrame( *this ); // We give the follow table an initial width. - SwRect aFrm(pFoll->getSwFrame()); - aRectFnSet.AddWidth(aFrm, aRectFnSet.GetWidth(getSwFrame())); - aRectFnSet.SetLeft(aFrm, aRectFnSet.GetLeft(getSwFrame())); - pFoll->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pFoll); + aRectFnSet.AddWidth(aFrm, aRectFnSet.GetWidth(getSwFrame())); + aRectFnSet.SetLeft(aFrm, aRectFnSet.GetLeft(getSwFrame())); + } - SwRect aPrt(pFoll->getSwPrint()); - aRectFnSet.AddWidth(aPrt, aRectFnSet.GetWidth(getSwPrint())); - pFoll->setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*pFoll); + aRectFnSet.AddWidth(aPrt, aRectFnSet.GetWidth(getSwPrint())); + } // Insert the new follow table pFoll->InsertBehind( GetUpper(), this ); @@ -2762,9 +2755,8 @@ void SwTabFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA aRectFnSet.GetWidth(getSwFrame()); if( nDiff ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.AddRight( aFrm, nDiff ); - setSwFrame(aFrm); } } @@ -2984,9 +2976,8 @@ void SwTabFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA nWidth -= getSwPrint().Left(); nWidth -= pAttrs->CalcRightLine(); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Width( std::min( nWidth, aPrt.Width() ) ); - setSwPrint(aPrt); } if ( nOldHeight != aRectFnSet.GetHeight(getSwPrint()) ) @@ -3053,9 +3044,10 @@ SwTwips SwTabFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) if ( !bTst ) { - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nDist ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nDist ); + } SwRootFrame *pRootFrame = getRootFrame(); if( pRootFrame && pRootFrame->IsAnyShellAccessible() && @@ -4101,12 +4093,14 @@ void SwRowFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA //RowFrames don't have borders and so on therefore the PrtArea always //matches the Frame. mbValidPrtArea = true; - SwRect aPrt(getSwPrint()); - aPrt.Left( 0 ); - aPrt.Top( 0 ); - aPrt.Width ( getSwFrame().Width() ); - aPrt.Height( getSwFrame().Height() ); - setSwPrint(aPrt); + + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Left( 0 ); + aPrt.Top( 0 ); + aPrt.Width ( getSwFrame().Width() ); + aPrt.Height( getSwFrame().Height() ); + } // #i29550# // Here we calculate the top-printing area for the lower cell frames @@ -4283,9 +4277,10 @@ void SwRowFrame::AdjustCells( const SwTwips nHeight, const bool bHeight ) const long nDiff = nHeight - aRectFnSet.GetHeight(pCellFrame->getSwFrame()); if ( nDiff ) { - SwRect aFrm(pCellFrame->getSwFrame()); - aRectFnSet.AddBottom( aFrm, nDiff ); - pCellFrame->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pCellFrame); + aRectFnSet.AddBottom( aFrm, nDiff ); + } pCellFrame->InvalidatePrt_(); } @@ -4330,11 +4325,8 @@ void SwRowFrame::AdjustCells( const SwTwips nHeight, const bool bHeight ) if ( nDiff ) { aOldFrame = pToAdjust->getSwFrame(); - - SwRect aFrm(pToAdjust->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pToAdjust); aRectFnSet.AddBottom( aFrm, nDiff ); - pToAdjust->setSwFrame(aFrm); - pNotify = pToAdjust; } @@ -4401,9 +4393,8 @@ SwTwips SwRowFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) nDist -= nReal; if ( !bTst ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.AddBottom( aFrm, nReal ); - setSwFrame(aFrm); } } } @@ -4485,15 +4476,13 @@ SwTwips SwRowFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) if ( !bTst ) { SwTwips nHeight = aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, nHeight - nReal ); if( IsVertical() && !IsVertLR() && !aRectFnSet.IsRev() ) { aFrm.Pos().X() += nReal; } - - setSwFrame(aFrm); } SwLayoutFrame* pFrame = GetUpper(); @@ -4506,15 +4495,13 @@ SwTwips SwRowFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) { nReal -= nTmp; SwTwips nHeight = aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, nHeight + nReal ); if( IsVertical() && !IsVertLR() && !aRectFnSet.IsRev() ) { aFrm.Pos().X() -= nReal; } - - setSwFrame(aFrm); } nReal = nTmp; } @@ -4646,10 +4633,13 @@ static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, long lYStart, bool bInva ) bRet = true; const long lDiff = aRectFnSet.YDiff( lYStart, nFrameTop ); const long lDiffX = lYStart - nFrameTop; - SwRect aFrm(pFrame->getSwFrame()); - aRectFnSet.SubTop( aFrm, -lDiff ); - aRectFnSet.AddBottom( aFrm, lDiff ); - pFrame->setSwFrame(aFrm); + + { + SwFrameRect::FrameWriteAccess aFrm(*pFrame); + aRectFnSet.SubTop( aFrm, -lDiff ); + aRectFnSet.AddBottom( aFrm, lDiff ); + } + pFrame->SetCompletePaint(); if ( !pFrame->GetNext() ) @@ -4705,10 +4695,11 @@ static bool lcl_ArrangeLowers( SwLayoutFrame *pLay, long lYStart, bool bInva ) !pFly->ConsiderObjWrapInfluenceOnObjPos(); if ( bDirectMove ) { - SwRect aFrm(pFly->getSwFrame()); - aRectFnSet.SubTop( aFrm, -lDiff ); - aRectFnSet.AddBottom( aFrm, lDiff ); - pFly->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pFly); + aRectFnSet.SubTop( aFrm, -lDiff ); + aRectFnSet.AddBottom( aFrm, lDiff ); + } pFly->GetVirtDrawObj()->SetRectsDirty(); // --> OD 2004-08-17 - also notify view of <SdrObject> @@ -4979,24 +4970,27 @@ void SwCellFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorder pPre = pPre->GetNext(); } } + const long nDiff = nWidth - aRectFnSet.GetWidth(getSwFrame()); - SwRect aFrm(getSwFrame()); - if( IsNeighbourFrame() && IsRightToLeft() ) { - aRectFnSet.SubLeft( aFrm, nDiff ); + SwFrameRect::FrameWriteAccess aFrm(*this); + + if( IsNeighbourFrame() && IsRightToLeft() ) + { + aRectFnSet.SubLeft( aFrm, nDiff ); + } + else + { + aRectFnSet.AddRight( aFrm, nDiff ); + } } - else + { - aRectFnSet.AddRight( aFrm, nDiff ); + SwFrameRect::PrintWriteAccess aPrt(*this); + aRectFnSet.AddRight( aPrt, nDiff ); } - setSwFrame(aFrm); - - SwRect aPrt(getSwPrint()); - aRectFnSet.AddRight( aPrt, nDiff ); - setSwPrint(aPrt); - //Adjust the height, it's defined through the content and the border. const long nDiffHeight = nRemaining - aRectFnSet.GetHeight(getSwFrame()); if ( nDiffHeight ) diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx index cacac35d75db..1c301a161d2f 100644 --- a/sw/source/core/layout/wsfrm.cxx +++ b/sw/source/core/layout/wsfrm.cxx @@ -467,14 +467,17 @@ Size SwFrame::ChgSize( const Size& aNewSize ) if ( aNewSize == aOldSize ) return aOldSize; - SwRect aFrm(getSwFrame()); - if ( GetUpper() ) { bool bNeighb = IsNeighbourFrame(); SwRectFn fnRect = IsVertical() == bNeighb ? fnRectHori : ( IsVertLR() ? fnRectVertL2R : fnRectVert ); SwRect aNew( Point(0,0), aNewSize ); - (aFrm.*fnRect->fnSetWidth)( (aNew.*fnRect->fnGetWidth)() ); + + { + SwFrameRect::FrameWriteAccess aFrm(*this); + (aFrm.*fnRect->fnSetWidth)( (aNew.*fnRect->fnGetWidth)() ); + } + long nNew = (aNew.*fnRect->fnGetHeight)(); long nDiff = nNew - (getSwFrame().*fnRect->fnGetHeight)(); @@ -484,11 +487,16 @@ Size SwFrame::ChgSize( const Size& aNewSize ) SwNeighbourAdjust::GrowShrink != static_cast<SwFootnoteBossFrame*>(GetUpper())->NeighbourhoodAdjustment() ) { - (aFrm.*fnRect->fnSetHeight)( nNew ); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + (aFrm.*fnRect->fnSetHeight)( nNew ); + } + SwTwips nReal = static_cast<SwLayoutFrame*>(this)->AdjustNeighbourhood(nDiff); if ( nReal != nDiff ) { + SwFrameRect::FrameWriteAccess aFrm(*this); (aFrm.*fnRect->fnSetHeight)( nNew - nDiff + nReal ); } } @@ -503,7 +511,7 @@ Size SwFrame::ChgSize( const Size& aNewSize ) else Shrink( -nDiff ); - if ( GetUpper() && (aFrm.*fnRect->fnGetHeight)() != nNew ) + if ( GetUpper() && (getSwFrame().*fnRect->fnGetHeight)() != nNew ) { GetUpper()->InvalidateSize_(); } @@ -512,17 +520,17 @@ Size SwFrame::ChgSize( const Size& aNewSize ) // Even if grow/shrink did not yet set the desired width, for // example when called by ChgColumns to set the column width, we // set the right width now. + SwFrameRect::FrameWriteAccess aFrm(*this); (aFrm.*fnRect->fnSetHeight)( nNew ); } } } else { + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.SSize( aNewSize ); } - setSwFrame(aFrm); - if ( getSwFrame().SSize() != aOldSize ) { SwPageFrame *pPage = FindPageFrame(); @@ -1156,17 +1164,20 @@ void SwLayoutFrame::Cut() if( nReal < nShrink ) { const SwTwips nOldHeight = aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); // seems as if this needs to be frowarded to the SwFrame already here, // changing to zero seems temporary anyways - aRectFnSet.SetHeight( aFrm, 0 ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetHeight( aFrm, 0 ); + } nReal += pUp->Shrink( nShrink - nReal ); - aRectFnSet.SetHeight( aFrm, nOldHeight ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetHeight( aFrm, nOldHeight ); + } } if( SwNeighbourAdjust::GrowAdjust == nAdjust && nReal < nShrink ) @@ -1226,9 +1237,8 @@ SwTwips SwFrame::Grow( SwTwips nDist, bool bTst, bool bInfo ) { nPrtHeight = aRectFnSet.GetHeight(getSwPrint()); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetHeight( aPrt, nPrtHeight + ( IsContentFrame() ? nDist : nReal ) ); - setSwPrint(aPrt); } return nReal; } @@ -1268,9 +1278,8 @@ SwTwips SwFrame::Shrink( SwTwips nDist, bool bTst, bool bInfo ) if( !bTst ) { const SwTwips nPrtHeight = aRectFnSet.GetHeight(getSwPrint()); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetHeight( aPrt, nPrtHeight - ( IsContentFrame() ? nDist : nReal ) ); - setSwPrint(aPrt); } return nReal; } @@ -1345,9 +1354,10 @@ SwTwips SwFrame::AdjustNeighbourhood( SwTwips nDiff, bool bTst ) const long nTmp = nChg - pBody->getSwPrint().Height(); if ( !bTst ) { - SwRect aFrm(pBody->getSwFrame()); - aFrm.Height(std::max( 0L, aFrm.Height() - nChg )); - pBody->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pBody); + aFrm.Height(std::max( 0L, aFrm.Height() - nChg )); + } pBody->InvalidatePrt_(); pBody->InvalidateSize_(); @@ -1402,15 +1412,13 @@ SwTwips SwFrame::AdjustNeighbourhood( SwTwips nDiff, bool bTst ) if ( !bTst && nChg ) { { - SwRect aFrm(pUp->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pUp); aFrm.SSize().Height() += nChg; - pUp->setSwFrame(aFrm); } { - SwRect aPrt(pUp->getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*pUp); aPrt.SSize().Height() += nChg; - pUp->setSwPrint(aPrt); } if ( pViewShell ) @@ -1440,9 +1448,8 @@ SwTwips SwFrame::AdjustNeighbourhood( SwTwips nDiff, bool bTst ) if ( IsBodyFrame() ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.SSize().Height() = nOldFrameHeight; - setSwPrint(aPrt); } if ( pUp->GetUpper() ) @@ -1450,13 +1457,11 @@ SwTwips SwFrame::AdjustNeighbourhood( SwTwips nDiff, bool bTst ) static_cast<SwRootFrame*>(pUp->GetUpper())->CheckViewLayout( nullptr, nullptr ); } - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.SSize().Height() = nOldFrameHeight; - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.SSize().Height() = nOldPrtHeight; - setSwPrint(aPrt); mbCompletePaint = bOldComplete; } @@ -1552,15 +1557,16 @@ SwTwips SwFrame::AdjustNeighbourhood( SwTwips nDiff, bool bTst ) nAdd = nAddMax; if ( !bTst ) { - SwRect aFrm(pFrame->GetNext()->getSwFrame()); - aRectFnSet.SetHeight(aFrm, nAddMax-nAdd); - - if( aRectFnSet.IsVert() && !aRectFnSet.IsVertL2R() && !aRectFnSet.IsRev() ) { - aFrm.Pos().X() += nAdd; + SwFrameRect::FrameWriteAccess aFrm(*pFrame->GetNext()); + aRectFnSet.SetHeight(aFrm, nAddMax-nAdd); + + if( aRectFnSet.IsVert() && !aRectFnSet.IsVertL2R() && !aRectFnSet.IsRev() ) + { + aFrm.Pos().X() += nAdd; + } } - pFrame->GetNext()->setSwFrame(aFrm); pFrame->GetNext()->InvalidatePrt(); if ( pFrame->GetNext()->GetNext() ) @@ -1576,15 +1582,16 @@ SwTwips SwFrame::AdjustNeighbourhood( SwTwips nDiff, bool bTst ) { SwTwips nTmp = aRectFnSet.GetHeight(pFrame->getSwFrame()); - SwRect aFrm(pFrame->getSwFrame()); - aRectFnSet.SetHeight( aFrm, nTmp - nReal ); - - if( aRectFnSet.IsVert() && !aRectFnSet.IsVertL2R() && !aRectFnSet.IsRev() ) { - aFrm.Pos().X() += nReal; + SwFrameRect::FrameWriteAccess aFrm(*pFrame); + aRectFnSet.SetHeight( aFrm, nTmp - nReal ); + + if( aRectFnSet.IsVert() && !aRectFnSet.IsVertL2R() && !aRectFnSet.IsRev() ) + { + aFrm.Pos().X() += nReal; + } } - pFrame->setSwFrame(aFrm); pFrame->InvalidatePrt(); if ( pFrame->GetNext() ) @@ -1807,15 +1814,15 @@ SwTwips SwContentFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) { if ( !bTst ) { - SwRect aFrm(getSwFrame()); - aRectFnSet.SetHeight( aFrm, nFrameHeight + nDist ); - - if( IsVertical() && !IsVertLR() && !IsReverse() ) { - aFrm.Pos().X() -= nDist; - } + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetHeight( aFrm, nFrameHeight + nDist ); - setSwFrame(aFrm); + if( IsVertical() && !IsVertLR() && !IsReverse() ) + { + aFrm.Pos().X() -= nDist; + } + } if ( GetNext() ) { @@ -1845,16 +1852,17 @@ SwTwips SwContentFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) { //Contents are always resized to the wished value. long nOld = aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); - - aRectFnSet.SetHeight( aFrm, nOld + nDist ); - if( IsVertical()&& !IsVertLR() && !IsReverse() ) { - aFrm.Pos().X() -= nDist; - } + SwFrameRect::FrameWriteAccess aFrm(*this); - setSwFrame(aFrm); + aRectFnSet.SetHeight( aFrm, nOld + nDist ); + + if( IsVertical()&& !IsVertLR() && !IsReverse() ) + { + aFrm.Pos().X() -= nDist; + } + } SwTabFrame *pTab = (nOld && IsInTab()) ? FindTabFrame() : nullptr; if (pTab) @@ -1942,15 +1950,16 @@ SwTwips SwContentFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) nRstHeight = nDist; } - SwRect aFrm(getSwFrame()); - aRectFnSet.SetHeight( aFrm, aRectFnSet.GetHeight(aFrm) - nDist ); - - if( IsVertical() && !IsVertLR() ) { - aFrm.Pos().X() += nDist; + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.SetHeight( aFrm, aRectFnSet.GetHeight(aFrm) - nDist ); + + if( IsVertical() && !IsVertLR() ) + { + aFrm.Pos().X() += nDist; + } } - setSwFrame(aFrm); nDist = nRstHeight; SwTabFrame *pTab = IsInTab() ? FindTabFrame() : nullptr; if (pTab) @@ -2338,7 +2347,7 @@ SwTwips SwLayoutFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) bool bChgPos = IsVertical() && !IsReverse(); if ( !bTst ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, nFrameHeight + nDist ); if( bChgPos && !IsVertLR() ) @@ -2346,7 +2355,6 @@ SwTwips SwLayoutFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) aFrm.Pos().X() -= nDist; } - setSwFrame(aFrm); bMoveAccFrame = true; } @@ -2425,7 +2433,7 @@ SwTwips SwLayoutFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) // NEW TABLES ( !IsCellFrame() || static_cast<SwCellFrame*>(this)->GetLayoutRowSpan() > 1 ) ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, nFrameHeight + nReal ); if( bChgPos && !IsVertLR() ) @@ -2433,7 +2441,6 @@ SwTwips SwLayoutFrame::GrowFrame( SwTwips nDist, bool bTst, bool bInfo ) aFrm.Pos().X() = nFramePos - nReal; } - setSwFrame(aFrm); bMoveAccFrame = true; } @@ -2533,7 +2540,7 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) SwTwips nRealDist = nReal; if ( !bTst ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, nFrameHeight - nReal ); if( bChgPos && !IsVertLR() ) @@ -2541,7 +2548,6 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) aFrm.Pos().X() += nReal; } - setSwFrame(aFrm); bMoveAccFrame = true; } @@ -2559,7 +2565,7 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) nReal *= -1; if ( !bTst && IsBodyFrame() && nReal < nRealDist ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, aRectFnSet.GetHeight(aFrm) + nRealDist - nReal ); if( bChgPos && !IsVertLR() ) @@ -2567,7 +2573,6 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) aFrm.Pos().X() += nRealDist - nReal; } - setSwFrame(aFrm); OSL_ENSURE( !IsAccessibleFrame(), "bMoveAccFrame has to be set!" ); } } @@ -2577,7 +2582,7 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) SwTwips nTmp = GetUpper()->Shrink( nReal, bTst, bInfo ); if ( nTmp != nReal ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.SetHeight( aFrm, aRectFnSet.GetHeight(aFrm) + nReal - nTmp ); if( bChgPos && !IsVertLR() ) @@ -2585,7 +2590,6 @@ SwTwips SwLayoutFrame::ShrinkFrame( SwTwips nDist, bool bTst, bool bInfo ) aFrm.Pos().X() += nTmp - nReal; } - setSwFrame(aFrm); OSL_ENSURE( !IsAccessibleFrame(), "bMoveAccFrame has to be set!" ); nReal = nTmp; } @@ -2892,9 +2896,8 @@ void SwLayoutFrame::ChgLowersProp( const Size& rOldSize ) // In horizontal layout set width of header, footer, // foot note container, foot note, body and no-text // frames to its upper width. - SwRect aFrm(pLowerFrame->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pLowerFrame); aFrm.Width( getSwPrint().Width() ); - pLowerFrame->setSwFrame(aFrm); } else if( rOldSize.Width() && !pLowerFrame->IsFootnoteFrame() ) { @@ -2924,9 +2927,8 @@ void SwLayoutFrame::ChgLowersProp( const Size& rOldSize ) (pLowerFrame->getSwFrame().Width() * getSwPrint().Width()) / rOldSize.Width(); } - SwRect aFrm(pLowerFrame->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pLowerFrame); aFrm.Width( nNewWidth ); - pLowerFrame->setSwFrame(aFrm); } } if ( bHeightChgd ) @@ -2938,9 +2940,8 @@ void SwLayoutFrame::ChgLowersProp( const Size& rOldSize ) // no-text frames to its upper height. // In horizontal layout set height of column frames // to its upper height. - SwRect aFrm(pLowerFrame->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pLowerFrame); aFrm.Height( getSwPrint().Height() ); - pLowerFrame->setSwFrame(aFrm); } // OD 01.10.2002 #102211# // add conditions <!pLowerFrame->IsHeaderFrame()> and @@ -2997,9 +2998,8 @@ void SwLayoutFrame::ChgLowersProp( const Size& rOldSize ) nNewHeight = 0; } - SwRect aFrm(pLowerFrame->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pLowerFrame); aFrm.Height( nNewHeight ); - pLowerFrame->setSwFrame(aFrm); } } } @@ -3038,9 +3038,8 @@ void SwLayoutFrame::ChgLowersProp( const Size& rOldSize ) nNewHeight = nSum; } - SwRect aFrm(pLowerFrame->getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*pLowerFrame); aFrm.Height( nNewHeight ); - pLowerFrame->setSwFrame(aFrm); } } } @@ -3428,9 +3427,10 @@ void SwLayoutFrame::FormatWidthCols( const SwBorderAttrs &rAttrs, long nTop = aRectFnSet.GetTopMargin(*this); // #i23129# - correction // to the calculated maximum height. - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nMaximum - aRectFnSet.GetHeight(getSwFrame()) ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nMaximum - aRectFnSet.GetHeight(getSwFrame()) ); + } if( nTop > nMaximum ) nTop = nMaximum; @@ -3636,9 +3636,10 @@ void SwLayoutFrame::FormatWidthCols( const SwBorderAttrs &rAttrs, long nTop = aRectFnSet.GetTopMargin(*this); nDiff = aRectFnSet.GetHeight(getSwPrint()) + nDiff + nBorder - aRectFnSet.GetHeight(getSwFrame()); - SwRect aFrm(getSwFrame()); - aRectFnSet.AddBottom( aFrm, nDiff ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aRectFnSet.AddBottom( aFrm, nDiff ); + } // #i68520# SwFlyFrame *pFlyFrame = dynamic_cast<SwFlyFrame*>(this); diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx index f7a1fd49aa7b..79921b43c4df 100644 --- a/sw/source/core/text/frmform.cxx +++ b/sw/source/core/text/frmform.cxx @@ -374,11 +374,10 @@ void SwTextFrame::AdjustFrame( const SwTwips nChgHght, bool bHasToFit ) if( aRectFnSet.BottomDist( pCont->getSwFrame(), nBot ) > 0 ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.AddBottom( aFrm, nChgHght ); - setSwFrame(aFrm); - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); if( aRectFnSet.IsVert() ) { @@ -389,8 +388,6 @@ void SwTextFrame::AdjustFrame( const SwTwips nChgHght, bool bHasToFit ) aPrt.SSize().Height() += nChgHght; } - setSwPrint(aPrt); - return; } } @@ -805,14 +802,16 @@ bool SwTextFrame::CalcPreps() } else if ( aRectFnSet.IsVert() ) { - SwRect aFrm(getSwFrame()); - aFrm.Width( aFrm.Width() + aFrm.Left() ); - aFrm.Left( 0 ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Width( aFrm.Width() + aFrm.Left() ); + aFrm.Left( 0 ); + } - SwRect aPrt(getSwPrint()); - aPrt.Width( aPrt.Width() + getSwFrame().Left() ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Width( aPrt.Width() + getSwFrame().Left() ); + } SetWidow( true ); } @@ -821,13 +820,15 @@ bool SwTextFrame::CalcPreps() SwTwips nTmp = TWIPS_MAX/2 - (getSwFrame().Top()+10000); SwTwips nDiff = nTmp - getSwFrame().Height(); - SwRect aFrm(getSwFrame()); - aFrm.Height( nTmp ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Height( nTmp ); + } - SwRect aPrt(getSwPrint()); - aPrt.Height( aPrt.Height() + nDiff ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Height( aPrt.Height() + nDiff ); + } SetWidow( true ); } @@ -940,9 +941,8 @@ bool SwTextFrame::CalcPreps() if( getSwPrint().Width() < 0 ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Width( 0 ); - setSwPrint(aPrt); } SetUndersized( true ); @@ -953,9 +953,8 @@ bool SwTextFrame::CalcPreps() if( getSwPrint().Height() < 0 ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Height( 0 ); - setSwPrint(aPrt); } SetUndersized( true ); @@ -1768,9 +1767,8 @@ void SwTextFrame::Format( vcl::RenderContext* pRenderContext, const SwBorderAttr } else if( aRectFnSet.GetHeight(getSwPrint()) < 0 ) { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aRectFnSet.SetHeight( aPrt, 0 ); - setSwPrint(aPrt); } return; @@ -1845,9 +1843,8 @@ void SwTextFrame::Format( vcl::RenderContext* pRenderContext, const SwBorderAttr } else if( aRectFnSet.BottomDist( getSwFrame(), nMaxY ) < 0 ) { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aRectFnSet.AddBottom( aFrm, -aRectFnSet.GetHeight(aFrm) ); - setSwFrame(aFrm); } } else diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx index 5d3acafb585e..296e006c5fd1 100644 --- a/sw/source/core/text/txtfrm.cxx +++ b/sw/source/core/text/txtfrm.cxx @@ -82,48 +82,50 @@ /// Switches width and height of the text frame void SwTextFrame::SwapWidthAndHeight() { - SwRect aPrt(getSwPrint()); - - if ( ! mbIsSwapped ) { - const long nPrtOfstX = aPrt.Pos().X(); - aPrt.Pos().X() = aPrt.Pos().Y(); + SwFrameRect::PrintWriteAccess aPrt(*this); - if( IsVertLR() ) - { - aPrt.Pos().Y() = nPrtOfstX; - } - else + if ( ! mbIsSwapped ) { - aPrt.Pos().Y() = getSwFrame().Width() - ( nPrtOfstX + aPrt.Width() ); - } - } - else - { - const long nPrtOfstY = aPrt.Pos().Y(); - aPrt.Pos().Y() = aPrt.Pos().X(); + const long nPrtOfstX = aPrt.Pos().X(); + aPrt.Pos().X() = aPrt.Pos().Y(); - if( IsVertLR() ) - { - aPrt.Pos().X() = nPrtOfstY; + if( IsVertLR() ) + { + aPrt.Pos().Y() = nPrtOfstX; + } + else + { + aPrt.Pos().Y() = getSwFrame().Width() - ( nPrtOfstX + aPrt.Width() ); + } } else { - aPrt.Pos().X() = getSwFrame().Height() - ( nPrtOfstY + aPrt.Height() ); + const long nPrtOfstY = aPrt.Pos().Y(); + aPrt.Pos().Y() = aPrt.Pos().X(); + + if( IsVertLR() ) + { + aPrt.Pos().X() = nPrtOfstY; + } + else + { + aPrt.Pos().X() = getSwFrame().Height() - ( nPrtOfstY + aPrt.Height() ); + } } - } - const long nFrameWidth = getSwFrame().Width(); - SwRect aFrm(getSwFrame()); - aFrm.Width( aFrm.Height() ); - aFrm.Height( nFrameWidth ); - setSwFrame(aFrm); + const long nPrtWidth = aPrt.Width(); + aPrt.Width( aPrt.Height() ); + aPrt.Height( nPrtWidth ); + } - const long nPrtWidth = aPrt.Width(); - aPrt.Width( aPrt.Height() ); - aPrt.Height( nPrtWidth ); + { + const long nFrameWidth = getSwFrame().Width(); + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Width( aFrm.Height() ); + aFrm.Height( nFrameWidth ); + } - setSwPrint(aPrt); mbIsSwapped = ! mbIsSwapped; } @@ -1549,15 +1551,13 @@ bool SwTextFrame::Prepare( const PrepareHint ePrep, const void* pVoid, { case PREP_MOVEFTN : { - SwRect aFrm(getSwFrame()); + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Height(0); - setSwFrame(aFrm); } { - SwRect aPrt(getSwPrint()); + SwFrameRect::PrintWriteAccess aPrt(*this); aPrt.Height(0); - setSwPrint(aPrt); } InvalidatePrt_(); @@ -1890,36 +1890,41 @@ SwTestFormat::SwTestFormat( SwTextFrame* pTextFrame, const SwFrame* pPre, SwTwip SwRectFnSet aRectFnSet(pFrame); SwTwips nLower = aRectFnSet.GetBottomMargin(*pFrame); - SwRect aFrm(pFrame->getSwFrame()); - aFrm = pFrame->GetUpper()->getSwPrint(); - aFrm += pFrame->GetUpper()->getSwFrame().Pos(); - aRectFnSet.SetHeight( aFrm, nMaxHeight ); - - if( pFrame->GetPrev() ) { - aRectFnSet.SetPosY( - aFrm, - aRectFnSet.GetBottom(pFrame->GetPrev()->getSwFrame()) - ( aRectFnSet.IsVert() ? nMaxHeight + 1 : 0 ) ); - } + // indeed, here the GetUpper()->getSwPrint() gets copied and manipulated + SwFrameRect::FrameWriteAccess aFrm(*pFrame); + aFrm.setSwRect(pFrame->GetUpper()->getSwPrint()); + aFrm += pFrame->GetUpper()->getSwFrame().Pos(); + aRectFnSet.SetHeight( aFrm, nMaxHeight ); - pFrame->setSwFrame(aFrm); + if( pFrame->GetPrev() ) + { + aRectFnSet.SetPosY( + aFrm, + aRectFnSet.GetBottom(pFrame->GetPrev()->getSwFrame()) - ( aRectFnSet.IsVert() ? nMaxHeight + 1 : 0 ) ); + } + } SwBorderAttrAccess aAccess( SwFrame::GetCache(), pFrame ); const SwBorderAttrs &rAttrs = *aAccess.Get(); - SwRect aPrt(pFrame->getSwPrint()); - aRectFnSet.SetPosX(aPrt, rAttrs.CalcLeft( pFrame ) ); + + { + SwFrameRect::PrintWriteAccess aPrt(*pFrame); + aRectFnSet.SetPosX(aPrt, rAttrs.CalcLeft( pFrame ) ); + } if( pPre ) { - pFrame->setSwPrint(aPrt); // better set here, not sure if pFrame->CalcUpperSpace uses it SwTwips nUpper = pFrame->CalcUpperSpace( &rAttrs, pPre ); - aPrt = pFrame->getSwPrint(); // also read back, if pFrame->CalcUpperSpace may have changed it + SwFrameRect::PrintWriteAccess aPrt(*pFrame); aRectFnSet.SetPosY(aPrt, nUpper ); } - aRectFnSet.SetHeight( aPrt, std::max( 0L , aRectFnSet.GetHeight(pFrame->getSwFrame()) - aRectFnSet.GetTop(aPrt) - nLower ) ); - aRectFnSet.SetWidth( aPrt, aRectFnSet.GetWidth(pFrame->getSwFrame()) - ( rAttrs.CalcLeft( pFrame ) + rAttrs.CalcRight( pFrame ) ) ); - pFrame->setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*pFrame); + aRectFnSet.SetHeight( aPrt, std::max( 0L , aRectFnSet.GetHeight(pFrame->getSwFrame()) - aRectFnSet.GetTop(aPrt) - nLower ) ); + aRectFnSet.SetWidth( aPrt, aRectFnSet.GetWidth(pFrame->getSwFrame()) - ( rAttrs.CalcLeft( pFrame ) + rAttrs.CalcRight( pFrame ) ) ); + } pOldPara = pFrame->HasPara() ? pFrame->GetPara() : nullptr; pFrame->SetPara( new SwParaPortion(), false ); @@ -1941,13 +1946,15 @@ SwTestFormat::SwTestFormat( SwTextFrame* pTextFrame, const SwFrame* pPre, SwTwip SwTestFormat::~SwTestFormat() { - SwRect aFrm(pFrame->getSwFrame()); - aFrm = aOldFrame; - pFrame->setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*pFrame); + aFrm.setSwRect(aOldFrame); + } - SwRect aPrt(pFrame->getSwPrint()); - aPrt = aOldPrt; - pFrame->setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*pFrame); + aPrt.setSwRect(aOldPrt); + } pFrame->SetPara( pOldPara ); } @@ -2158,17 +2165,20 @@ SwTwips SwTextFrame::CalcFitToContent() pPage->getSwPrint().Height() : pPage->getSwPrint().Width(); - SwRect aFrm(getSwFrame()); - aFrm.Width( nPageWidth ); - setSwFrame(aFrm); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Width( nPageWidth ); + } - SwRect aPrt(getSwPrint()); - aPrt.Width( nPageWidth ); - setSwPrint(aPrt); + { + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Width( nPageWidth ); + } // i#25422 objects anchored as character in RTL if ( IsRightToLeft() ) { + SwFrameRect::FrameWriteAccess aFrm(*this); aFrm.Pos().X() += nOldFrameWidth - nPageWidth; } @@ -2181,20 +2191,23 @@ SwTwips SwTextFrame::CalcFitToContent() // i#54031 - assure mininum of MINLAY twips. const SwTwips nMax = std::max( (SwTwips)MINLAY, aLine.CalcFitToContent_() + 1 ); - aFrm = getSwFrame(); - aFrm.Width( nOldFrameWidth ); - aPrt = getSwPrint(); - aPrt.Width( nOldPrtWidth ); - setSwPrint(aPrt); + { + SwFrameRect::FrameWriteAccess aFrm(*this); + aFrm.Width( nOldFrameWidth ); + + // i#25422 objects anchored as character in RTL + if ( IsRightToLeft() ) + { + aFrm.Pos() = aOldFramePos; + } + } - // i#25422 objects anchored as character in RTL - if ( IsRightToLeft() ) { - aFrm.Pos() = aOldFramePos; + SwFrameRect::PrintWriteAccess aPrt(*this); + aPrt.Width( nOldPrtWidth ); } - setSwFrame(aFrm); SetPara( pOldPara ); return nMax; |