From 2fec7400e2d06d2f9f730d32f42db8be802ec511 Mon Sep 17 00:00:00 2001 From: barnold1953 Date: Wed, 11 Jun 2014 17:21:59 -0700 Subject: [PATCH] Added menu options for sixense mouse input --- interface/src/Menu.cpp | 5 ++++ interface/src/Menu.h | 3 ++ interface/src/devices/SixenseManager.cpp | 35 ++++++++++++++++++++---- interface/src/ui/ApplicationOverlay.cpp | 10 +++++-- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f791d20588..f78b8a822f 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -379,6 +379,11 @@ Menu::Menu() : addCheckableActionToQMenuAndActionHash(oculusOptionsMenu, MenuOption::AllowOculusCameraModeChange, 0, false); addCheckableActionToQMenuAndActionHash(oculusOptionsMenu, MenuOption::DisplayOculusOverlays, 0, true); + QMenu* sixenseOptionsMenu = developerMenu->addMenu("Sixense Options"); + addCheckableActionToQMenuAndActionHash(sixenseOptionsMenu, MenuOption::SixenseMouseInput, 0, true); + addCheckableActionToQMenuAndActionHash(sixenseOptionsMenu, MenuOption::SixenseLeftHanded, 0, false); + addCheckableActionToQMenuAndActionHash(sixenseOptionsMenu, MenuOption::SixenseInvertInputButtons, 0, false); + QMenu* handOptionsMenu = developerMenu->addMenu("Hand Options"); addCheckableActionToQMenuAndActionHash(handOptionsMenu, diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 69015a938b..40c6e646d9 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -397,6 +397,9 @@ namespace MenuOption { const QString SettingsExport = "Export Settings"; const QString SettingsImport = "Import Settings"; const QString SimpleShadows = "Simple"; + const QString SixenseInvertInputButtons = "Invert Sixense Mouse Input Buttons"; + const QString SixenseLeftHanded = "Left Handed Sixense Mouse Input"; + const QString SixenseMouseInput = "Enable Sixense Mouse Input"; const QString ShowBordersVoxelNodes = "Show Voxel Nodes"; const QString ShowBordersModelNodes = "Show Model Nodes"; const QString ShowBordersParticleNodes = "Show Particle Nodes"; diff --git a/interface/src/devices/SixenseManager.cpp b/interface/src/devices/SixenseManager.cpp index 4ecb416a92..f347d09af9 100644 --- a/interface/src/devices/SixenseManager.cpp +++ b/interface/src/devices/SixenseManager.cpp @@ -113,8 +113,16 @@ void SixenseManager::update(float deltaTime) { // Emulate the mouse so we can use scripts - if (numActiveControllers == 2) { - emulateMouse(palm); + if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseMouseInput)) { + if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseLeftHanded)) { + if (numActiveControllers == 1){ + emulateMouse(palm); + } + } else { + if (numActiveControllers == 2) { + emulateMouse(palm); + } + } } // NOTE: Sixense API returns pos data in millimeters but we IMMEDIATELY convert to meters. @@ -348,16 +356,28 @@ void SixenseManager::emulateMouse(PalmData *palm) { } _oldPos = pos; + Qt::MouseButton bumperButton; + Qt::MouseButton triggerButton; + + if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseInvertInputButtons)) { + bumperButton = Qt::LeftButton; + triggerButton = Qt::RightButton; + } else { + bumperButton = Qt::RightButton; + triggerButton = Qt::LeftButton; + } + //Check for bumper press ( Right Click ) if (palm->getControllerButtons() & BUTTON_FWD) { if (!_bumperPressed) { _bumperPressed = true; - QMouseEvent mouseEvent(QEvent::MouseButtonPress, pos, Qt::RightButton, Qt::RightButton, 0); + + QMouseEvent mouseEvent(QEvent::MouseButtonPress, pos, bumperButton, bumperButton, 0); Application::getInstance()->mousePressEvent(&mouseEvent); } } else if (_bumperPressed) { - QMouseEvent mouseEvent(QEvent::MouseButtonRelease, pos, Qt::RightButton, Qt::RightButton, 0); + QMouseEvent mouseEvent(QEvent::MouseButtonRelease, pos, bumperButton, bumperButton, 0); Application::getInstance()->mouseReleaseEvent(&mouseEvent); @@ -368,17 +388,20 @@ void SixenseManager::emulateMouse(PalmData *palm) { if (palm->getTrigger() == 1.0f) { if (!_triggerPressed) { _triggerPressed = true; - QMouseEvent mouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, 0); + + QMouseEvent mouseEvent(QEvent::MouseButtonPress, pos, triggerButton, triggerButton, 0); Application::getInstance()->mousePressEvent(&mouseEvent); } } else if (_triggerPressed) { - QMouseEvent mouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, 0); + QMouseEvent mouseEvent(QEvent::MouseButtonRelease, pos, triggerButton, triggerButton, 0); Application::getInstance()->mouseReleaseEvent(&mouseEvent); _triggerPressed = false; } + + } #endif // HAVE_SIXENSE diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index 750be96cc9..401062bb36 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -45,7 +45,12 @@ void renderControllerPointer() int numberOfPalms = handData->getNumPalms(); - int palmIndex = 3; + int palmIndex; + if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseLeftHanded)) { + palmIndex = 2; + } else { + palmIndex = 3; + } const PalmData* palmData = NULL; if (palmIndex >= handData->getPalms().size()) { @@ -326,7 +331,8 @@ void ApplicationOverlay::renderOverlay(bool renderToTexture) { glVertex2i(mouseX + crossPad, mouseY - pointerHeight); glEnd(); - } else { //only render controller pointer if we aren't already rendering a mouse pointer + } else if (Menu::getInstance()->isOptionChecked(MenuOption::SixenseMouseInput)) { + //only render controller pointer if we aren't already rendering a mouse pointer renderControllerPointer(); } glPopMatrix();