From 6edeca7360c8180dc68d8605a1ce8a5be7530110 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Wed, 3 Jan 2018 15:05:35 +0100 Subject: [PATCH] wheel event handler improved - more work to do --- src/controls/QskRangeControl.cpp | 2 +- src/controls/QskScrollView.cpp | 44 ++++++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/controls/QskRangeControl.cpp b/src/controls/QskRangeControl.cpp index 94ec7869..3e005dd4 100644 --- a/src/controls/QskRangeControl.cpp +++ b/src/controls/QskRangeControl.cpp @@ -281,7 +281,7 @@ void QskRangeControl::wheelEvent( QWheelEvent* event ) if( isReadOnly() ) return; - const int steps = event->delta() / 120; + const int steps = event->delta() / QWheelEvent::DefaultDeltasPerStep; setValue( m_data->value + steps * m_data->stepSize ); } diff --git a/src/controls/QskScrollView.cpp b/src/controls/QskScrollView.cpp index 95b7b46a..73caa6d8 100644 --- a/src/controls/QskScrollView.cpp +++ b/src/controls/QskScrollView.cpp @@ -340,8 +340,48 @@ void QskScrollView::gestureEvent( QskGestureEvent* event ) void QskScrollView::wheelEvent( QWheelEvent* event ) { - const qreal dy = event->delta() / 120 * 20.0; - setScrollPos( m_data->scrollPos - QPointF( 0.0, dy ) ); + const qreal stepSize = 20.0; // how to find this value + + QPointF offset; + + if ( subControlRect( Viewport ).contains( event->posF() ) ) + { + /* + Not sure if that code makes sense, but I don't have an input device + that generates wheel events in both directions. TODO ... + */ + + //offset = event->pixelDelta(); + + if ( offset.isNull() ) + { + offset = event->angleDelta(); + offset *= stepSize / QWheelEvent::DefaultDeltasPerStep; + } + } + else + { + const qreal delta = stepSize * event->delta() / QWheelEvent::DefaultDeltasPerStep; + + if ( subControlRect( VerticalScrollBar ).contains( event->posF() ) ) + { + offset.setY( delta ); + } + else if ( subControlRect( HorizontalScrollBar ).contains( event->posF() ) ) + { + offset.setX( delta ); + } + } + + if ( !offset.isNull() ) + { +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) + if ( event->inverted() ) + offset = -offset; +#endif + + setScrollPos( m_data->scrollPos - offset ); + } } #endif