From dcf33f1384421ccfb252cd98621e606579b95f75 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 9 Nov 2018 00:58:38 +0100 Subject: [PATCH] fix mouse coordinates under linux --- src/overlaycontroller.cpp | 15 ++++++++++++--- src/overlaycontroller.h | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/overlaycontroller.cpp b/src/overlaycontroller.cpp index bba2a2d..ed7bdcb 100644 --- a/src/overlaycontroller.cpp +++ b/src/overlaycontroller.cpp @@ -330,6 +330,15 @@ bool OverlayController::pollNextEvent(vr::VROverlayHandle_t ulOverlayHandle, vr: } } +QPoint OverlayController::getMousePositionForEvent(vr::VREvent_Mouse_t mouse) { + float y = mouse.y; +#ifdef __linux__ + float h = (float) m_pWindow->height(); + y = h - y; +#endif + return QPoint(mouse.x, y); +} + void OverlayController::OnTimeoutPumpEvents() { if (!vr::VRSystem()) return; @@ -339,7 +348,7 @@ void OverlayController::OnTimeoutPumpEvents() { while (pollNextEvent(m_ulOverlayHandle, &vrEvent)) { switch (vrEvent.eventType) { case vr::VREvent_MouseMove: { - QPoint ptNewMouse(vrEvent.data.mouse.x, vrEvent.data.mouse.y); + QPoint ptNewMouse = getMousePositionForEvent(vrEvent.data.mouse); if (ptNewMouse != m_ptLastMouse) { QMouseEvent mouseEvent( QEvent::MouseMove, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), Qt::NoButton, m_lastMouseButtons, 0 ); m_ptLastMouse = ptNewMouse; @@ -350,7 +359,7 @@ void OverlayController::OnTimeoutPumpEvents() { break; case vr::VREvent_MouseButtonDown: { - QPoint ptNewMouse(vrEvent.data.mouse.x, vrEvent.data.mouse.y); + QPoint ptNewMouse = getMousePositionForEvent(vrEvent.data.mouse); Qt::MouseButton button = vrEvent.data.mouse.button == vr::VRMouseButton_Right ? Qt::RightButton : Qt::LeftButton; m_lastMouseButtons |= button; QMouseEvent mouseEvent(QEvent::MouseButtonPress, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), button, m_lastMouseButtons, 0); @@ -359,7 +368,7 @@ void OverlayController::OnTimeoutPumpEvents() { break; case vr::VREvent_MouseButtonUp: { - QPoint ptNewMouse(vrEvent.data.mouse.x, vrEvent.data.mouse.y); + QPoint ptNewMouse = getMousePositionForEvent(vrEvent.data.mouse); Qt::MouseButton button = vrEvent.data.mouse.button == vr::VRMouseButton_Right ? Qt::RightButton : Qt::LeftButton; m_lastMouseButtons &= ~button; QMouseEvent mouseEvent(QEvent::MouseButtonRelease, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), button, m_lastMouseButtons, 0); diff --git a/src/overlaycontroller.h b/src/overlaycontroller.h index f3aead5..257d0db 100644 --- a/src/overlaycontroller.h +++ b/src/overlaycontroller.h @@ -90,7 +90,8 @@ public: // I know it's an ugly hack to make them public to enable external acces AccessibilityTabController accessibilityTabController; private: - OverlayController(bool desktopMode, bool noSound) : QObject(), desktopMode(desktopMode), noSound(noSound) {} + OverlayController(bool desktopMode, bool noSound) : QObject(), desktopMode(desktopMode), noSound(noSound) {} + QPoint getMousePositionForEvent(vr::VREvent_Mouse_t mouse); public: virtual ~OverlayController();