summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@cib.de>2017-10-26 14:55:41 +0200
committerArmin Le Grand <Armin.Le.Grand@cib.de>2017-10-30 12:13:17 +0100
commit3444a3086c8fe8966953434a7fbe76802df8a149 (patch)
treed57600acfdd778f1487f3079094b25d2998ecb37
parent75d4e779e408bd532ddeda2b18923806c920b4a7 (diff)
Adapted to get methods and WriteAccess helpers
Change-Id: Ife3c1b2391ad7beae8c7f31f796b1454709ddd26
-rw-r--r--sw/source/core/doc/notxtfrm.cxx3
-rw-r--r--sw/source/core/frmedt/feshview.cxx6
-rw-r--r--sw/source/core/inc/frame.hxx36
-rw-r--r--sw/source/core/layout/calcmove.cxx142
-rw-r--r--sw/source/core/layout/fly.cxx123
-rw-r--r--sw/source/core/layout/flyincnt.cxx11
-rw-r--r--sw/source/core/layout/flylay.cxx44
-rw-r--r--sw/source/core/layout/frmtool.cxx4
-rw-r--r--sw/source/core/layout/ftnfrm.cxx54
-rw-r--r--sw/source/core/layout/hffrm.cxx18
-rw-r--r--sw/source/core/layout/laycache.cxx25
-rw-r--r--sw/source/core/layout/pagechg.cxx88
-rw-r--r--sw/source/core/layout/sectfrm.cxx116
-rw-r--r--sw/source/core/layout/ssfrm.cxx52
-rw-r--r--sw/source/core/layout/tabfrm.cxx136
-rw-r--r--sw/source/core/layout/wsfrm.cxx175
-rw-r--r--sw/source/core/text/frmform.cxx49
-rw-r--r--sw/source/core/text/txtfrm.cxx161
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;