fix mouse coordinates under linux
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user