tdf#117388 use native scrollbar under gtk in richedit control

you get one of these by starting with a normal text box form control
and changing its "text type" property to multi-line with formatting

Change-Id: If922b6b9fdc49b78fa379dbb3e5974a73f6095ae
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137933
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/forms/source/richtext/richtextimplcontrol.cxx b/forms/source/richtext/richtextimplcontrol.cxx
index c51a3a8..fc92510 100644
--- a/forms/source/richtext/richtextimplcontrol.cxx
+++ b/forms/source/richtext/richtextimplcontrol.cxx
@@ -306,25 +306,23 @@ namespace frm
            m_pVScroll->SetThumbPos( m_pView->GetVisArea().Top() );
    }


    IMPL_LINK_NOARG( RichTextControlImpl, OnInvalidateAllAttributes, LinkParamNone*, void )
    {
        updateAllAttributes();
    }


    IMPL_LINK( RichTextControlImpl, OnHScroll, ScrollBar*, _pScrollbar, void )
    IMPL_LINK( RichTextControlImpl, OnHScroll, weld::Scrollbar&, rScrollbar, void )
    {
        m_pView->Scroll( -_pScrollbar->GetDelta(), 0, ScrollRangeCheck::PaperWidthTextSize );
        auto nDiff = m_pView->GetVisArea().Left() - rScrollbar.adjustment_get_value();
        m_pView->Scroll(nDiff, 0, ScrollRangeCheck::PaperWidthTextSize);
    }


    IMPL_LINK( RichTextControlImpl, OnVScroll, ScrollBar*, _pScrollbar, void )
    IMPL_LINK(RichTextControlImpl, OnVScroll, weld::Scrollbar&, rScrollbar, void)
    {
        m_pView->Scroll( 0, -_pScrollbar->GetDelta(), ScrollRangeCheck::PaperWidthTextSize );
        auto nDiff = m_pView->GetVisArea().Top() - rScrollbar.adjustment_get_value();
        m_pView->Scroll(0, nDiff, ScrollRangeCheck::PaperWidthTextSize);
    }


    void RichTextControlImpl::ensureScrollbars()
    {
        bool bNeedVScroll = 0 != ( m_pAntiImpl->GetStyle() & WB_VSCROLL );
@@ -341,7 +339,7 @@ namespace frm
        }
        else
        {
            m_pVScroll = VclPtr<ScrollBar>::Create( m_pAntiImpl, WB_VSCROLL | WB_DRAG | WB_REPEAT );
            m_pVScroll = VclPtr<ScrollAdaptor>::Create( m_pAntiImpl, false );
            m_pVScroll->SetScrollHdl ( LINK( this, RichTextControlImpl, OnVScroll ) );
            m_pVScroll->Show();
        }
@@ -352,7 +350,7 @@ namespace frm
        }
        else
        {
            m_pHScroll = VclPtr<ScrollBar>::Create( m_pAntiImpl, WB_HSCROLL | WB_DRAG | WB_REPEAT );
            m_pHScroll = VclPtr<ScrollAdaptor>::Create( m_pAntiImpl, true );
            m_pHScroll->SetScrollHdl ( LINK( this, RichTextControlImpl, OnHScroll ) );
            m_pHScroll->Show();
        }
@@ -417,9 +415,15 @@ namespace frm
        m_pViewport->SetPosSizePixel( Point( nOffset, nOffset ), aViewportSizePixel );
        // position the scrollbars
        if ( m_pVScroll )
        {
            m_pVScroll->SetThickness(nScrollBarWidth);
            m_pVScroll->SetPosSizePixel( Point( aViewportPlaygroundPixel.Width(), 0 ), Size( nScrollBarWidth, aViewportPlaygroundPixel.Height() ) );
        }
        if ( m_pHScroll )
        {
            m_pHScroll->SetThickness(nScrollBarHeight);
            m_pHScroll->SetPosSizePixel( Point( 0, aViewportPlaygroundPixel.Height() ), Size( aViewportPlaygroundPixel.Width(), nScrollBarHeight ) );
        }
        if ( m_pScrollCorner )
            m_pScrollCorner->SetPosSizePixel( Point( aViewportPlaygroundPixel.Width(), aViewportPlaygroundPixel.Height() ), Size( nScrollBarWidth, nScrollBarHeight ) );

diff --git a/forms/source/richtext/richtextimplcontrol.hxx b/forms/source/richtext/richtextimplcontrol.hxx
index d4fef2f..f1cbb81 100644
--- a/forms/source/richtext/richtextimplcontrol.hxx
+++ b/forms/source/richtext/richtextimplcontrol.hxx
@@ -21,6 +21,7 @@
#include "rtattributehandler.hxx"
#include "richtextviewport.hxx"
#include "richtextengine.hxx"
#include <svtools/scrolladaptor.hxx>
#include <vcl/scrbar.hxx>
#include <editeng/editdata.hxx>

@@ -53,8 +54,8 @@ namespace frm

        VclPtr<Control>                m_pAntiImpl;
        VclPtr<RichTextViewPort>       m_pViewport;
        VclPtr<ScrollBar>              m_pHScroll;
        VclPtr<ScrollBar>              m_pVScroll;
        VclPtr<ScrollAdaptor>          m_pHScroll;
        VclPtr<ScrollAdaptor>          m_pVScroll;
        VclPtr<ScrollBarBox>           m_pScrollCorner;
        RichTextEngine*         m_pEngine;
        std::unique_ptr<EditView> m_pView;
@@ -173,8 +174,8 @@ namespace frm

    private:
        DECL_LINK( OnInvalidateAllAttributes, LinkParamNone*, void );
        DECL_LINK( OnHScroll, ScrollBar*, void );
        DECL_LINK( OnVScroll, ScrollBar*, void );
        DECL_LINK( OnHScroll, weld::Scrollbar&, void );
        DECL_LINK( OnVScroll, weld::Scrollbar&, void );
    };