From 81bb5ff07d4d54274e38ae8d3e9272e846eff10f Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 7 Apr 2016 13:13:19 -0700 Subject: [PATCH 1/2] when using the fullscreen mirror hot key, return to the view mode you were in when leaving full screen mirror --- interface/src/Application.cpp | 24 +++++++++++++++++++++++- interface/src/Application.h | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 280f2c5d1f..9f43afc476 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2152,10 +2152,32 @@ void Application::keyPressEvent(QKeyEvent* event) { if (isShifted) { Menu::getInstance()->triggerOption(MenuOption::MiniMirror); } else { + // whenever switching to/from full screen mirror from the keyboard, remember + // the state you were in before full screen mirror, and return to that. + auto previousMode = _myCamera.getMode(); + if (previousMode != CAMERA_MODE_MIRROR) { + switch (previousMode) { + case CAMERA_MODE_FIRST_PERSON: + _returnFromFullScreenMirrorTo = MenuOption::FirstPerson; + break; + case CAMERA_MODE_THIRD_PERSON: + _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; + break; + + // FIXME - it's not clear that these modes make sense to return to... + case CAMERA_MODE_INDEPENDENT: + _returnFromFullScreenMirrorTo = MenuOption::IndependentMode; + break; + case CAMERA_MODE_ENTITY: + _returnFromFullScreenMirrorTo = MenuOption::CameraEntityMode; + break; + } + } + bool isMirrorChecked = Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror); Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !isMirrorChecked); if (isMirrorChecked) { - Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); + Menu::getInstance()->setIsOptionChecked(_returnFromFullScreenMirrorTo, true); } cameraMenuChanged(); } diff --git a/interface/src/Application.h b/interface/src/Application.h index 116d2b2137..5998cb00b2 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -522,6 +522,8 @@ private: bool _keyboardDeviceHasFocus { true }; bool _recentlyClearedDomain { false }; + + QString _returnFromFullScreenMirrorTo; }; #endif // hifi_Application_h From 09004680d08e5a48733ce65dc4c16cfe77d1664d Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 7 Apr 2016 13:32:26 -0700 Subject: [PATCH 2/2] handle a couple edge cases --- interface/src/Application.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9f43afc476..2e27560e58 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2171,12 +2171,23 @@ void Application::keyPressEvent(QKeyEvent* event) { case CAMERA_MODE_ENTITY: _returnFromFullScreenMirrorTo = MenuOption::CameraEntityMode; break; + + default: + _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; + break; } } bool isMirrorChecked = Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror); Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !isMirrorChecked); if (isMirrorChecked) { + + // if we got here without coming in from a non-Full Screen mirror case, then our + // _returnFromFullScreenMirrorTo is unknown. In that case we'll go to the old + // behavior of returning to ThirdPerson + if (_returnFromFullScreenMirrorTo.isEmpty()) { + _returnFromFullScreenMirrorTo = MenuOption::ThirdPerson; + } Menu::getInstance()->setIsOptionChecked(_returnFromFullScreenMirrorTo, true); } cameraMenuChanged();