tdf#117388 use native scrollbar under gtk in reportdesigner
Change-Id: If7a66055dbae6d8ee31768ff438eb8105b8f980f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137880
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/reportdesign/source/ui/inc/ScrollHelper.hxx b/reportdesign/source/ui/inc/ScrollHelper.hxx
index 076943f..02b34d6 100644
--- a/reportdesign/source/ui/inc/ScrollHelper.hxx
+++ b/reportdesign/source/ui/inc/ScrollHelper.hxx
@@ -16,9 +16,10 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_REPORTDESIGN_SOURCE_UI_INC_SCROLLHELPER_HXX
#define INCLUDED_REPORTDESIGN_SOURCE_UI_INC_SCROLLHELPER_HXX
#pragma once
#include <svtools/scrolladaptor.hxx>
#include <vcl/scrbar.hxx>
#include <com/sun/star/report/XSection.hpp>
#include <comphelper/propmultiplex.hxx>
@@ -44,8 +45,8 @@ namespace rptui
, public IMarkedSection
{
private:
VclPtr<ScrollBar> m_aHScroll;
VclPtr<ScrollBar> m_aVScroll;
VclPtr<ScrollAdaptor> m_aHScroll;
VclPtr<ScrollAdaptor> m_aVScroll;
VclPtr<ScrollBarBox> m_aCornerWin; // window in the bottom right corner
Size m_aTotalPixelSize;
VclPtr<ODesignView> m_pParent;
@@ -53,10 +54,10 @@ namespace rptui
::rtl::Reference<comphelper::OPropertyChangeMultiplexer >
m_pReportDefinitionMultiPlexer; // listener for property changes
DECL_LINK( ScrollHdl, ScrollBar*, void);
DECL_LINK( ScrollHdl, weld::Scrollbar&, void);
Size ResizeScrollBars();
void ImplInitSettings();
void impl_initScrollBar( ScrollBar& _rScrollBar ) const;
void impl_initScrollBar(ScrollAdaptor& rScrollBar) const;
OScrollWindowHelper(OScrollWindowHelper const &) = delete;
void operator =(OScrollWindowHelper const &) = delete;
@@ -79,8 +80,8 @@ namespace rptui
Point getThumbPos() const { return Point(m_aHScroll->GetThumbPos(),m_aVScroll->GetThumbPos())/*m_aScrollOffset*/; }
void setTotalSize(sal_Int32 _nWidth, sal_Int32 _nHeight);
const Size& getTotalSize() const { return m_aTotalPixelSize; }
ScrollBar& GetHScroll() { return *m_aHScroll; }
ScrollBar& GetVScroll() { return *m_aVScroll; }
ScrollAdaptor& GetHScroll() { return *m_aHScroll; }
ScrollAdaptor& GetVScroll() { return *m_aVScroll; }
// forwards
void SetMode( DlgEdMode _eMode );
@@ -205,6 +206,5 @@ namespace rptui
sal_uInt16 getZoomFactor(SvxZoomType _eType) const;
};
}
#endif // INCLUDED_REPORTDESIGN_SOURCE_UI_INC_SCROLLHELPER_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/reportdesign/source/ui/report/ScrollHelper.cxx b/reportdesign/source/ui/report/ScrollHelper.cxx
index bf5f261..de342a1 100644
--- a/reportdesign/source/ui/report/ScrollHelper.cxx
+++ b/reportdesign/source/ui/report/ScrollHelper.cxx
@@ -34,7 +34,7 @@ namespace rptui
using namespace ::com::sun::star;
static void lcl_setScrollBar(sal_Int32 _nNewValue,const Point& _aPos,const Size& _aSize,ScrollBar& _rScrollBar)
static void lcl_setScrollBar(sal_Int32 _nNewValue,const Point& _aPos,const Size& _aSize,ScrollAdaptor& _rScrollBar)
{
_rScrollBar.SetPosSizePixel(_aPos,_aSize);
_rScrollBar.SetPageSize( _nNewValue );
@@ -45,8 +45,8 @@ static void lcl_setScrollBar(sal_Int32 _nNewValue,const Point& _aPos,const Size&
OScrollWindowHelper::OScrollWindowHelper( ODesignView* _pDesignView)
: OScrollWindowHelper_BASE( _pDesignView,WB_DIALOGCONTROL)
,OPropertyChangeListener(m_aMutex)
,m_aHScroll( VclPtr<ScrollBar>::Create(this, WB_HSCROLL|WB_REPEAT|WB_DRAG) )
,m_aVScroll( VclPtr<ScrollBar>::Create(this, WB_VSCROLL|WB_REPEAT|WB_DRAG) )
,m_aHScroll( VclPtr<ScrollAdaptor>::Create(this, true) )
,m_aVScroll( VclPtr<ScrollAdaptor>::Create(this, false) )
,m_aCornerWin( VclPtr<ScrollBarBox>::Create(this) )
,m_pParent(_pDesignView)
,m_aReportWindow(VclPtr<rptui::OReportWindow>::Create(this,m_pParent))
@@ -83,20 +83,12 @@ void OScrollWindowHelper::dispose()
OScrollWindowHelper_BASE::dispose();
}
void OScrollWindowHelper::impl_initScrollBar( ScrollBar& _rScrollBar ) const
void OScrollWindowHelper::impl_initScrollBar( ScrollAdaptor& _rScrollBar ) const
{
AllSettings aSettings( _rScrollBar.GetSettings() );
StyleSettings aStyle( aSettings.GetStyleSettings() );
aStyle.SetDragFullOptions( aStyle.GetDragFullOptions() | DragFullOptions::Scroll ); // live scrolling
aSettings.SetStyleSettings( aStyle );
_rScrollBar.SetSettings( aSettings );
_rScrollBar.SetScrollHdl( LINK( const_cast<OScrollWindowHelper*>(this), OScrollWindowHelper, ScrollHdl ) );
_rScrollBar.SetLineSize( SCR_LINE_SIZE );
}
void OScrollWindowHelper::initialize()
{
uno::Reference<report::XReportDefinition> xReportDefinition = m_pParent->getController().getReportDefinition();
@@ -191,7 +183,7 @@ void OScrollWindowHelper::Resize()
m_aReportWindow->SetPosSizePixel(Point( 0, 0 ),aTotalOutputSize);
}
IMPL_LINK( OScrollWindowHelper, ScrollHdl, ScrollBar*, /*pScroll*/, void )
IMPL_LINK_NOARG(OScrollWindowHelper, ScrollHdl, weld::Scrollbar&, void)
{
m_aReportWindow->ScrollChildren( getThumbPos() );
}
@@ -331,8 +323,8 @@ bool OScrollWindowHelper::EventNotify( NotifyEvent& rNEvt )
(pCommandEvent->GetCommand() == CommandEventId::StartAutoScroll) ||
(pCommandEvent->GetCommand() == CommandEventId::AutoScroll)) )
{
ScrollBar* pHScrBar = nullptr;
ScrollBar* pVScrBar = nullptr;
ScrollAdaptor* pHScrBar = nullptr;
ScrollAdaptor* pVScrBar = nullptr;
if ( m_aHScroll->IsVisible() )
pHScrBar = m_aHScroll.get();
diff --git a/reportdesign/source/ui/report/ViewsWindow.cxx b/reportdesign/source/ui/report/ViewsWindow.cxx
index 9dfec8d..50269c1 100644
--- a/reportdesign/source/ui/report/ViewsWindow.cxx
+++ b/reportdesign/source/ui/report/ViewsWindow.cxx
@@ -1371,9 +1371,13 @@ void OViewsWindow::handleKey(const vcl::KeyCode& _rCode)
{
// scroll page
OScrollWindowHelper* pScrollWindow = getView()->getScrollWindow();
ScrollBar& rScrollBar = ( nCode == KEY_LEFT || nCode == KEY_RIGHT ) ? pScrollWindow->GetHScroll() : pScrollWindow->GetVScroll();
ScrollAdaptor& rScrollBar = ( nCode == KEY_LEFT || nCode == KEY_RIGHT ) ? pScrollWindow->GetHScroll() : pScrollWindow->GetVScroll();
if ( rScrollBar.IsVisible() )
rScrollBar.DoScrollAction(( nCode == KEY_RIGHT || nCode == KEY_UP ) ? ScrollType::LineUp : ScrollType::LineDown );
{
auto nCurrentPos = rScrollBar.GetThumbPos();
auto nLineSize = rScrollBar.GetLineSize();
rScrollBar.DoScroll(( nCode == KEY_RIGHT || nCode == KEY_UP ) ? (nCurrentPos - nLineSize) : (nCurrentPos + nLineSize));
}
return;
}
diff --git a/reportdesign/source/ui/report/dlgedfunc.cxx b/reportdesign/source/ui/report/dlgedfunc.cxx
index 8a84093..6252e29 100644
--- a/reportdesign/source/ui/report/dlgedfunc.cxx
+++ b/reportdesign/source/ui/report/dlgedfunc.cxx
@@ -86,8 +86,8 @@ void DlgEdFunc::ForceScroll( const Point& rPos )
aWorkArea = pScrollWindow->PixelToLogic( aWorkArea );
if( !aOutRect.Contains( rPos ) && aWorkArea.Contains( rPos ) )
{
ScrollBar& rHScroll = pScrollWindow->GetHScroll();
ScrollBar& rVScroll = pScrollWindow->GetVScroll();
ScrollAdaptor& rHScroll = pScrollWindow->GetHScroll();
ScrollAdaptor& rVScroll = pScrollWindow->GetVScroll();
ScrollType eH = ScrollType::LineDown,eV = ScrollType::LineDown;
if( rPos.X() < aOutRect.Left() )
eH = ScrollType::LineUp;
@@ -99,8 +99,21 @@ void DlgEdFunc::ForceScroll( const Point& rPos )
else if( rPos.Y() <= aOutRect.Bottom() )
eV = ScrollType::DontKnow;
rHScroll.DoScrollAction(eH);
rVScroll.DoScrollAction(eV);
if (eH != ScrollType::DontKnow)
{
auto nCurrentPos = rHScroll.GetThumbPos();
auto nLineSize = rHScroll.GetLineSize();
assert(eH == ScrollType::LineUp || eH == ScrollType::LineDown);
rHScroll.DoScroll(eH == ScrollType::LineUp ? (nCurrentPos - nLineSize) : (nCurrentPos + nLineSize));
}
if (eV != ScrollType::DontKnow)
{
auto nCurrentPos = rVScroll.GetThumbPos();
auto nLineSize = rVScroll.GetLineSize();
assert(eV == ScrollType::LineUp || eV == ScrollType::LineDown);
rVScroll.DoScroll(eV == ScrollType::LineUp ? (nCurrentPos - nLineSize) : (nCurrentPos + nLineSize));
}
}
aScrollTimer.Start();