From f0ed8d8cefdf4cdf327e497e2d9628b1b1a9bee9 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 28 Jul 2015 14:07:25 -0700 Subject: [PATCH] Add menu item that enables / disables simulated eye tracking --- interface/src/Application.cpp | 15 ++++++++------- interface/src/Menu.cpp | 5 +++-- interface/src/Menu.h | 1 + interface/src/devices/EyeTracker.cpp | 21 ++++++++++----------- interface/src/devices/EyeTracker.h | 2 +- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 217b8f334b..fcbe64cb06 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -595,12 +595,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : loadScripts(); } -#ifdef HAVE_IVIEWHMD - // Do this before loading settings - auto eyeTracker = DependencyManager::get(); - eyeTracker->init(); -#endif - loadSettings(); int SAVE_SETTINGS_INTERVAL = 10 * MSECS_PER_SECOND; // Let's save every seconds for now connect(&_settingsTimer, &QTimer::timeout, this, &Application::saveSettings); @@ -642,6 +636,12 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : connect(ddeTracker.data(), &FaceTracker::muteToggled, this, &Application::faceTrackerMuteToggled); #endif +#ifdef HAVE_IVIEWHMD + auto eyeTracker = DependencyManager::get(); + eyeTracker->init(); + setActiveEyeTracker(); +#endif + auto applicationUpdater = DependencyManager::get(); connect(applicationUpdater.data(), &AutoUpdater::newVersionIsAvailable, dialogsManager.data(), &DialogsManager::showUpdateDialog); applicationUpdater->checkForUpdate(); @@ -2020,7 +2020,8 @@ void Application::setActiveFaceTracker() { void Application::setActiveEyeTracker() { #ifdef HAVE_IVIEWHMD auto eyeTracker = DependencyManager::get(); - eyeTracker->setEnabled(Menu::getInstance()->isOptionChecked(MenuOption::SMIEyeTracking)); + eyeTracker->setEnabled(Menu::getInstance()->isOptionChecked(MenuOption::SMIEyeTracking), + Menu::getInstance()->isOptionChecked(MenuOption::SimulateEyeTracking)); #endif } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index c5a92747e9..fed7b84791 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -439,9 +439,10 @@ Menu::Menu() { #ifdef HAVE_IVIEWHMD MenuWrapper* eyeTrackingMenu = avatarDebugMenu->addMenu("Eye Tracking"); - QAction* smiEyeTracking = addCheckableActionToQMenuAndActionHash(eyeTrackingMenu, MenuOption::SMIEyeTracking, 0, false, + addCheckableActionToQMenuAndActionHash(eyeTrackingMenu, MenuOption::SMIEyeTracking, 0, false, + qApp, SLOT(setActiveEyeTracker())); + addCheckableActionToQMenuAndActionHash(eyeTrackingMenu, MenuOption::SimulateEyeTracking, 0, false, qApp, SLOT(setActiveEyeTracker())); - smiEyeTracking->setVisible(true); #endif auto avatarManager = DependencyManager::get(); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index b8ac2ef189..c1f7bcf751 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -273,6 +273,7 @@ namespace MenuOption { const QString SixenseEnabled = "Enable Hydra Support"; const QString SixenseMouseInput = "Enable Sixense Mouse Input"; const QString ShiftHipsForIdleAnimations = "Shift hips for idle animations"; + const QString SimulateEyeTracking = "Simulate"; const QString SMIEyeTracking = "SMI Eye Tracking"; const QString Stars = "Stars"; const QString Stats = "Stats"; diff --git a/interface/src/devices/EyeTracker.cpp b/interface/src/devices/EyeTracker.cpp index ce6afc1d97..7f0dcb4510 100644 --- a/interface/src/devices/EyeTracker.cpp +++ b/interface/src/devices/EyeTracker.cpp @@ -59,26 +59,25 @@ void EyeTracker::init() { #endif } -void EyeTracker::setEnabled(bool enabled) { +void EyeTracker::setEnabled(bool enabled, bool simulate) { if (!_isInitialized) { - qCWarning(interfaceapp) << "Eye Tracker: Not initialized before setting enabled"; return; } #ifdef HAVE_IVIEWHMD - qCDebug(interfaceapp) << "Eye Tracker: Set enabled =" << enabled; - - if (enabled && !_isStreaming) { - // There is no smi_stopStreaming() method so start streaming a maximum of once per program run. - int result = smi_startStreaming(true); + qCDebug(interfaceapp) << "Eye Tracker: Set enabled =" << enabled << ", simulate =" << simulate; + bool success = true; + int result = 0; + if (enabled) { + // There is no smi_stopStreaming() method so keep streaming once started in case tracking is re-enabled after stopping. + result = smi_startStreaming(simulate); if (result != SMI_RET_SUCCESS) { - qCWarning(interfaceapp) << "Eye Tracker: Error starting streaming:" << result; - } else { - _isStreaming = true; + qCWarning(interfaceapp) << "Eye Tracker: Error starting streaming:" << smiReturnValueToString(result); + success = false; } } - _isEnabled = enabled && _isStreaming; + _isEnabled = enabled && success; #endif } diff --git a/interface/src/devices/EyeTracker.h b/interface/src/devices/EyeTracker.h index 1410da3669..ab8a071dd3 100644 --- a/interface/src/devices/EyeTracker.h +++ b/interface/src/devices/EyeTracker.h @@ -29,7 +29,7 @@ public: public slots: void init(); - void setEnabled(bool enabled); + void setEnabled(bool enabled, bool simulate); void reset(); private: