Avoid providing bad pixelDeltas on X11
With libinput we now get a hardcoded resolution that is unrelated to the hardware. So avoid using that as a real pixel delta and document pixel deltas as being driver specific and unreliable on X11. Task-number: QTBUG-59261 Change-Id: I9fe86d80e7ccd290ed2e4091d7eafa52cb537d34 Reviewed-by: David Edmundson <davidedmundson@kde.org> Reviewed-by: Marco Martin <mart@kde.org> Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>bb10
parent
907a99f65b
commit
d196036024
|
|
@ -971,6 +971,7 @@ QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF& globalPos,
|
|||
\li scrolling is about to begin, but the distance did not yet change (Qt::ScrollBegin),
|
||||
\li or scrolling has ended and the distance did not change anymore (Qt::ScrollEnd).
|
||||
\endlist
|
||||
\note On X11 this value is driver specific and unreliable, use angleDelta() instead
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -953,10 +953,12 @@ void QXcbConnection::xi2HandleScrollEvent(void *event, ScrollingDevice &scrollin
|
|||
double delta = scrollingDevice.lastScrollPosition.y() - value;
|
||||
scrollingDevice.lastScrollPosition.setY(value);
|
||||
angleDelta.setY((delta / scrollingDevice.verticalIncrement) * 120);
|
||||
// We do not set "pixel" delta if it is only measured in ticks.
|
||||
if (scrollingDevice.verticalIncrement > 1)
|
||||
// With most drivers the increment is 1 for wheels.
|
||||
// For libinput it is hardcoded to a useless 15.
|
||||
// For a proper touchpad driver it should be in the same order of magnitude as 120
|
||||
if (scrollingDevice.verticalIncrement > 15)
|
||||
rawDelta.setY(delta);
|
||||
else if (scrollingDevice.verticalIncrement < -1)
|
||||
else if (scrollingDevice.verticalIncrement < -15)
|
||||
rawDelta.setY(-delta);
|
||||
}
|
||||
}
|
||||
|
|
@ -965,10 +967,10 @@ void QXcbConnection::xi2HandleScrollEvent(void *event, ScrollingDevice &scrollin
|
|||
double delta = scrollingDevice.lastScrollPosition.x() - value;
|
||||
scrollingDevice.lastScrollPosition.setX(value);
|
||||
angleDelta.setX((delta / scrollingDevice.horizontalIncrement) * 120);
|
||||
// We do not set "pixel" delta if it is only measured in ticks.
|
||||
if (scrollingDevice.horizontalIncrement > 1)
|
||||
// See comment under vertical
|
||||
if (scrollingDevice.horizontalIncrement > 15)
|
||||
rawDelta.setX(delta);
|
||||
else if (scrollingDevice.horizontalIncrement < -1)
|
||||
else if (scrollingDevice.horizontalIncrement < -15)
|
||||
rawDelta.setX(-delta);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue