tdf#115941 use max of scrollbar and statusbar height for record locater

Change-Id: I639fd1c593e7cc440de5d2038562e64eab1a5af6
Reviewed-on: https://gerrit.libreoffice.org/67164
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/svtools/brwbox.hxx b/include/svtools/brwbox.hxx
index cba45688..fbff817 100644
--- a/include/svtools/brwbox.hxx
+++ b/include/svtools/brwbox.hxx
@@ -21,6 +21,7 @@

#include <svtools/svtdllapi.h>
#include <vcl/scrbar.hxx>
#include <vcl/status.hxx>
#include <vcl/ctrl.hxx>
#include <vcl/vclptr.hxx>
#include <tools/multisel.hxx>
@@ -195,6 +196,7 @@ private:
    VclPtr<BrowserDataWin> pDataWin;       // window to display data rows
    VclPtr<ScrollBar>      pVScroll;       // vertical scrollbar
    VclPtr<ScrollBar>      aHScroll;       // horizontal scrollbar
    VclPtr<StatusBar>      aStatusBar;     // statusbar, just to measure its height

    long            nDataRowHeight; // height of a single data-row
    sal_uInt16      nTitleLines;    // number of lines in title row
@@ -289,7 +291,9 @@ private:
    DECL_DLLPRIVATE_LINK(    ScrollHdl, ScrollBar*, void );
    DECL_DLLPRIVATE_LINK(    StartDragHdl, HeaderBar*, void );

    SVT_DLLPRIVATE long            GetFrozenWidth() const;
    SVT_DLLPRIVATE long GetFrozenWidth() const;

    SVT_DLLPRIVATE long GetBarHeight() const;

    bool            GoToRow(long nRow, bool bRowColMove, bool bDoNotModifySelection = false );

diff --git a/svtools/source/brwbox/brwbox1.cxx b/svtools/source/brwbox/brwbox1.cxx
index 12b9e2c..67e73f2 100644
--- a/svtools/source/brwbox/brwbox1.cxx
+++ b/svtools/source/brwbox/brwbox1.cxx
@@ -111,6 +111,7 @@ BrowseBox::BrowseBox( vcl::Window* pParent, WinBits nBits, BrowserMode nMode )
    ,DragSourceHelper( this )
    ,DropTargetHelper( this )
    ,aHScroll( VclPtr<ScrollBar>::Create(this, WB_HSCROLL) )
    ,aStatusBar( VclPtr<StatusBar>::Create(this) )
{
    ConstructImpl( nMode );
}
@@ -137,6 +138,7 @@ void BrowseBox::dispose()
    pDataWin.disposeAndClear();
    pVScroll.disposeAndClear();
    aHScroll.disposeAndClear();
    aStatusBar.disposeAndClear();

    // free columns-space
    mvCols.clear();
@@ -2076,11 +2078,11 @@ bool BrowseBox::ReserveControlArea(sal_uInt16 nWidth)

tools::Rectangle BrowseBox::GetControlArea() const
{

    auto nHeight = aHScroll->GetSizePixel().Height();
    return tools::Rectangle(
        Point( 0, GetOutputSizePixel().Height() - aHScroll->GetSizePixel().Height() ),
        Point( 0, GetOutputSizePixel().Height() - nHeight ),
        Size( GetOutputSizePixel().Width() - aHScroll->GetSizePixel().Width(),
             aHScroll->GetSizePixel().Height() ) );
             nHeight ) );
}

void BrowseBox::SetMode( BrowserMode nMode )
diff --git a/svtools/source/brwbox/brwbox2.cxx b/svtools/source/brwbox/brwbox2.cxx
index 8af9740..f2aa331 100644
--- a/svtools/source/brwbox/brwbox2.cxx
+++ b/svtools/source/brwbox/brwbox2.cxx
@@ -475,9 +475,7 @@ void BrowseBox::Resize()
    pDataWin->bResizeOnPaint = false;

    // calc the size of the scrollbars
    // (we can't ask the scrollbars for their widths cause if we're zoomed they still have to be
    // resized - which is done in UpdateScrollbars)
    sal_uLong nSBSize = GetSettings().GetStyleSettings().GetScrollBarSize();
    sal_uLong nSBSize = GetBarHeight();
    if (IsZoom())
        nSBSize = static_cast<sal_uLong>(nSBSize * static_cast<double>(GetZoom()));

@@ -1028,6 +1026,17 @@ void BrowseBox::PaintData( vcl::Window const & rWin, vcl::RenderContext& rRender
    ImplPaintData(rRenderContext, rRect, false);
}

long BrowseBox::GetBarHeight() const
{
    // tdf#115941 because some platforms have things like overlay scrollbars, take a max
    // of a statusbar height and a scrollbar height as the control area height

    // (we can't ask the scrollbars for their size cause if we're zoomed they still have to be
    // resized - which is done in UpdateScrollbars)

    return std::max(aStatusBar->GetSizePixel().Height(), GetSettings().GetStyleSettings().GetScrollBarSize());
}

void BrowseBox::UpdateScrollbars()
{

@@ -1043,7 +1052,7 @@ void BrowseBox::UpdateScrollbars()
    pDataWin->bInUpdateScrollbars = true;

    // the size of the corner window (and the width of the VSB/height of the HSB)
    sal_uLong nCornerSize = GetSettings().GetStyleSettings().GetScrollBarSize();
    sal_uLong nCornerSize = GetBarHeight();
    if (IsZoom())
        nCornerSize = static_cast<sal_uLong>(nCornerSize * static_cast<double>(GetZoom()));

@@ -1940,7 +1949,7 @@ tools::Rectangle BrowseBox::calcTableRect(bool _bOnScreen)
    long nY = aRowBar.Top() - aRect.Top();
    Size aSize(aRect.GetSize());

    return tools::Rectangle(aRowBar.TopRight(), Size(aSize.Width() - nX, aSize.Height() - nY - aHScroll->GetSizePixel().Height()) );
    return tools::Rectangle(aRowBar.TopRight(), Size(aSize.Width() - nX, aSize.Height() - nY - GetBarHeight()) );
}

tools::Rectangle BrowseBox::GetFieldRectPixelAbs( sal_Int32 _nRowId, sal_uInt16 _nColId, bool /*_bIsHeader*/, bool _bOnScreen )