summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-06-27 20:51:24 +0200
committerMichael Stahl <mstahl@redhat.com>2012-06-28 14:15:15 +0200
commit3a4b7c3555f2ffb4e89502bb04ff063d8c08f628 (patch)
treed33977a2ad67e0688a11adc37e41542de2e6b077 /sw
parentaa8240e80394887a4af45710de69aacacec66d25 (diff)
fdo#39415: sw: fix collapsing border painting more:
There is a special case for i#9860, which is for first line in follow table (i.e. continued on new page) without repeated headlines: Here the bottom border of the cell is used as the top border in case the cell does not have a top border; this is fixed now with a bit of refactoring, so the correct half width adjustment can be made. Change-Id: I58ef81b7e13544014ef75973ea793f673a242488
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/layout/paintfrm.cxx46
1 files changed, 27 insertions, 19 deletions
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index ca3d76156d28..133a6c235dc4 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -2680,6 +2680,24 @@ void SwTabFrmPainter::FindStylesForLine( const Point& rStartPoint,
}
}
+// special case: #i9860#
+// first line in follow table without repeated headlines
+static bool lcl_IsFirstRowInFollowTableWithoutRepeatedHeadlines(
+ SwTabFrm const& rTabFrm, SwFrm const& rFrm, SvxBoxItem const& rBoxItem)
+{
+ SwRowFrm const*const pThisRowFrm =
+ dynamic_cast<const SwRowFrm*>(rFrm.GetUpper());
+ return (pThisRowFrm
+ && (pThisRowFrm->GetUpper() == &rTabFrm)
+ && rTabFrm.IsFollow()
+ && !rTabFrm.GetTable()->GetRowsToRepeat()
+ && ( !pThisRowFrm->GetPrev()
+ || static_cast<const SwRowFrm*>(pThisRowFrm->GetPrev())
+ ->IsRowSpanLine())
+ && !rBoxItem.GetTop()
+ && rBoxItem.GetBottom());
+}
+
void SwTabFrmPainter::Insert( const SwFrm& rFrm, const SvxBoxItem& rBoxItem )
{
// build 4 line entries for the 4 borders:
@@ -2690,6 +2708,10 @@ void SwTabFrmPainter::Insert( const SwFrm& rFrm, const SvxBoxItem& rBoxItem )
aBorderRect.Pos() += rFrm.Frm().Pos();
}
+ bool const bBottomAsTop(lcl_IsFirstRowInFollowTableWithoutRepeatedHeadlines(
+ mrTabFrm, rFrm, rBoxItem));
+
+ // these are positions of the lines
const SwTwips nLeft = aBorderRect._Left();
const SwTwips nRight = aBorderRect._Right();
const SwTwips nTop = aBorderRect._Top();
@@ -2700,8 +2722,9 @@ void SwTabFrmPainter::Insert( const SwFrm& rFrm, const SvxBoxItem& rBoxItem )
svx::frame::Style aT( rBoxItem.GetTop() );
svx::frame::Style aB( rBoxItem.GetBottom() );
- const SwTwips nHalfTopWidth = aT.GetWidth() / 2;
const SwTwips nHalfBottomWidth = aB.GetWidth() / 2;
+ const SwTwips nHalfTopWidth = (bBottomAsTop)
+ ? nHalfBottomWidth : aT.GetWidth() / 2;
aR.MirrorSelf();
aB.MirrorSelf();
@@ -2717,9 +2740,10 @@ void SwTabFrmPainter::Insert( const SwFrm& rFrm, const SvxBoxItem& rBoxItem )
SwLineEntry aLeft ( nLeft, nTop + nHalfTopWidth,
nBottom + nHalfBottomWidth, bVert ? aB : ( bR2L ? aR : aL ) );
SwLineEntry aRight ( nRight, nTop + nHalfTopWidth,
- nBottom + nHalfBottomWidth, bVert ? aT : ( bR2L ? aL : aR ) );
+ nBottom + nHalfBottomWidth,
+ bVert ? ((bBottomAsTop) ? aB : aT) : ( bR2L ? aL : aR ) );
SwLineEntry aTop ( nTop + nHalfTopWidth,
- nLeft, nRight, bVert ? aL : aT );
+ nLeft, nRight, bVert ? aL : ((bBottomAsTop) ? aB : aT) );
SwLineEntry aBottom( nBottom + nHalfBottomWidth,
nLeft, nRight, bVert ? aR : aB );
@@ -2727,22 +2751,6 @@ void SwTabFrmPainter::Insert( const SwFrm& rFrm, const SvxBoxItem& rBoxItem )
Insert( aRight, false );
Insert( aTop, true );
Insert( aBottom, true );
-
- const SwRowFrm* pThisRowFrm = dynamic_cast<const SwRowFrm*>(rFrm.GetUpper());
-
- // special case: #i9860#
- // first line in follow table without repeated headlines
- if ( pThisRowFrm &&
- pThisRowFrm->GetUpper() == &mrTabFrm &&
- mrTabFrm.IsFollow() &&
- !mrTabFrm.GetTable()->GetRowsToRepeat() &&
- (!pThisRowFrm->GetPrev() || static_cast<const SwRowFrm*>(pThisRowFrm->GetPrev())->IsRowSpanLine()) &&
- !rBoxItem.GetTop() &&
- rBoxItem.GetBottom() )
- {
- SwLineEntry aFollowTop( !bVert ? nTop : nRight, !bVert ? nLeft : nTop, !bVert ? nRight : nBottom, aB );
- Insert( aFollowTop, !bVert );
- }
}
void SwTabFrmPainter::Insert( SwLineEntry& rNew, bool bHori )