fix mouse coordinates under linux

This commit is contained in:
Robin Appelman
2018-11-09 00:58:38 +01:00
parent 93b7baff38
commit dcf33f1384
2 changed files with 14 additions and 4 deletions
+12 -3
View File
@@ -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() { void OverlayController::OnTimeoutPumpEvents() {
if (!vr::VRSystem()) if (!vr::VRSystem())
return; return;
@@ -339,7 +348,7 @@ void OverlayController::OnTimeoutPumpEvents() {
while (pollNextEvent(m_ulOverlayHandle, &vrEvent)) { while (pollNextEvent(m_ulOverlayHandle, &vrEvent)) {
switch (vrEvent.eventType) { switch (vrEvent.eventType) {
case vr::VREvent_MouseMove: { case vr::VREvent_MouseMove: {
QPoint ptNewMouse(vrEvent.data.mouse.x, vrEvent.data.mouse.y); QPoint ptNewMouse = getMousePositionForEvent(vrEvent.data.mouse);
if (ptNewMouse != m_ptLastMouse) { if (ptNewMouse != m_ptLastMouse) {
QMouseEvent mouseEvent( QEvent::MouseMove, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), Qt::NoButton, m_lastMouseButtons, 0 ); QMouseEvent mouseEvent( QEvent::MouseMove, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), Qt::NoButton, m_lastMouseButtons, 0 );
m_ptLastMouse = ptNewMouse; m_ptLastMouse = ptNewMouse;
@@ -350,7 +359,7 @@ void OverlayController::OnTimeoutPumpEvents() {
break; break;
case vr::VREvent_MouseButtonDown: { 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; Qt::MouseButton button = vrEvent.data.mouse.button == vr::VRMouseButton_Right ? Qt::RightButton : Qt::LeftButton;
m_lastMouseButtons |= button; m_lastMouseButtons |= button;
QMouseEvent mouseEvent(QEvent::MouseButtonPress, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), button, m_lastMouseButtons, 0); QMouseEvent mouseEvent(QEvent::MouseButtonPress, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), button, m_lastMouseButtons, 0);
@@ -359,7 +368,7 @@ void OverlayController::OnTimeoutPumpEvents() {
break; break;
case vr::VREvent_MouseButtonUp: { 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; Qt::MouseButton button = vrEvent.data.mouse.button == vr::VRMouseButton_Right ? Qt::RightButton : Qt::LeftButton;
m_lastMouseButtons &= ~button; m_lastMouseButtons &= ~button;
QMouseEvent mouseEvent(QEvent::MouseButtonRelease, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), button, m_lastMouseButtons, 0); QMouseEvent mouseEvent(QEvent::MouseButtonRelease, ptNewMouse, m_pWindow->mapToGlobal(ptNewMouse), button, m_lastMouseButtons, 0);
+2 -1
View File
@@ -90,7 +90,8 @@ public: // I know it's an ugly hack to make them public to enable external acces
AccessibilityTabController accessibilityTabController; AccessibilityTabController accessibilityTabController;
private: 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: public:
virtual ~OverlayController(); virtual ~OverlayController();