diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-06-11 15:37:08 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-06-11 18:33:05 +0000 |
commit | 76010b7e3733a2c9f0cbf264123d043de2ceed6c (patch) | |
tree | cc29b4bb8c359a21536e727be338d2cd9cfbc83a /src/input/backend/mousedevice.cpp | |
parent | b816bbac412811ad9bd1999640509883a3bdf6d7 (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.cpp | 9 |
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 { |