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
(cherry picked from commit 3a4b7c3555f2ffb4e89502bb04ff063d8c08f628)
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index d851cf0..5a78bfc 100755
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -2682,6 +2682,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 )
{
    std::vector< const SwFrm* > aTestVec;
@@ -2697,6 +2715,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();
@@ -2707,8 +2729,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();
@@ -2724,9 +2747,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 );

@@ -2734,22 +2758,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 )