wheel event handler improved - more work to do

This commit is contained in:
Uwe Rathmann 2018-01-03 15:05:35 +01:00
parent eafd887f9c
commit 6edeca7360
2 changed files with 43 additions and 3 deletions

View File

@ -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 );
}

View File

@ -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