summaryrefslogtreecommitdiffstats
path: root/src/input/backend/mousedevice.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-06-11 15:37:08 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-06-11 18:33:05 +0000
commit76010b7e3733a2c9f0cbf264123d043de2ceed6c (patch)
treecc29b4bb8c359a21536e727be338d2cd9cfbc83a /src/input/backend/mousedevice.cpp
parentb816bbac412811ad9bd1999640509883a3bdf6d7 (diff)
Don't jump input when releasing and pressing mouse button elsewhere
Track when the button is actually held and only update axis values in this case. This prevents the camera controller from being "jumpy" if you release the mouse, move cursor elsewhere, then press the button again. Change-Id: Icf12366aa84865d276e2627e4959c0106b33f57d Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/input/backend/mousedevice.cpp')
-rw-r--r--src/input/backend/mousedevice.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/input/backend/mousedevice.cpp b/src/input/backend/mousedevice.cpp
index 25f0a6682..c4dfc1819 100644
--- a/src/input/backend/mousedevice.cpp
+++ b/src/input/backend/mousedevice.cpp
@@ -55,6 +55,7 @@ namespace Input {
MouseDevice::MouseDevice()
: QAbstractPhysicalDeviceBackendNode(ReadOnly)
, m_sensitivity(0.1f)
+ , m_wasPressed(false)
{
}
@@ -127,8 +128,12 @@ void MouseDevice::updateMouseEvents(const QList<QT_PREPEND_NAMESPACE(QMouseEvent
m_mouseState.leftPressed = e.buttons() & (Qt::LeftButton);
m_mouseState.centerPressed = e.buttons() & (Qt::MiddleButton);
m_mouseState.rightPressed = e.buttons() & (Qt::RightButton);
- m_mouseState.xAxis = m_sensitivity * (e.screenPos().x() - m_previousPos.x());
- m_mouseState.yAxis = m_sensitivity * (m_previousPos.y() - e.screenPos().y());
+ bool pressed = m_mouseState.leftPressed || m_mouseState.centerPressed || m_mouseState.rightPressed;
+ if (m_wasPressed && pressed) {
+ m_mouseState.xAxis = m_sensitivity * (e.screenPos().x() - m_previousPos.x());
+ m_mouseState.yAxis = m_sensitivity * (m_previousPos.y() - e.screenPos().y());
+ }
+ m_wasPressed = pressed;
m_previousPos = e.screenPos();
}
} else {