diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4449acd6ad..42bbb64567 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -225,6 +225,7 @@ Application::Application( _hmdTabletBecomesToolbarSetting("hmdTabletBecomesToolbar", DEFAULT_HMD_TABLET_BECOMES_TOOLBAR), _preferStylusOverLaserSetting("preferStylusOverLaser", DEFAULT_PREFER_STYLUS_OVER_LASER), _preferAvatarFingerOverStylusSetting("preferAvatarFingerOverStylus", DEFAULT_PREFER_AVATAR_FINGER_OVER_STYLUS), + _defaultMouseLock("defaultMouseLock", DEFAULT_MOUSE_LOCK), _showGraphicsIconSetting("showGraphicsIcon", DEFAULT_SHOW_GRAPHICS_ICON), _constrainToolbarPosition("toolbar/constrainToolbarToCenterX", true), _awayStateWhenFocusLostInVREnabled("awayStateWhenFocusLostInVREnabled", DEFAULT_AWAY_STATE_WHEN_FOCUS_LOST_IN_VR_ENABLED), diff --git a/interface/src/Application.h b/interface/src/Application.h index 613ad3f1b8..f725be2e5c 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -188,6 +188,9 @@ public: void setPreferStylusOverLaser(bool value) { _preferStylusOverLaserSetting.set(value); } bool getPreferAvatarFingerOverStylus() { return _preferAvatarFingerOverStylusSetting.get(); } void setPreferAvatarFingerOverStylus(bool value) { _preferAvatarFingerOverStylusSetting.set(value); } + + void setMouseLock(bool value); + bool getMouseLock(); bool getShowGraphicsIcon() { return _showGraphicsIconSetting.get(); } void setShowGraphicsIcon(bool value); @@ -791,6 +794,7 @@ private: Setting::Handle _hmdTabletBecomesToolbarSetting; Setting::Handle _preferStylusOverLaserSetting; Setting::Handle _preferAvatarFingerOverStylusSetting; + Setting::Handle _defaultMouseLock; Setting::Handle _showGraphicsIconSetting; Setting::Handle _constrainToolbarPosition; Setting::Handle _awayStateWhenFocusLostInVREnabled; diff --git a/interface/src/Application_UI.cpp b/interface/src/Application_UI.cpp index 6d4dbcbef3..da7aa42a7b 100644 --- a/interface/src/Application_UI.cpp +++ b/interface/src/Application_UI.cpp @@ -269,6 +269,14 @@ void Application::setHmdTabletBecomesToolbarSetting(bool value) { updateSystemTabletMode(); } +void Application::setMouseLock(bool value) { + _defaultMouseLock.set(value); + getApplicationCompositor().setMouseLockComposit(value); +} +bool Application::getMouseLock() { + return _defaultMouseLock.get(); +} + void Application::setShowGraphicsIcon(bool value) { _showGraphicsIconSetting.set(value); DependencyManager::get()->sendLocalMessage("Overte-ShowGraphicsIconChanged", ""); diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 623aede2fa..a0cc26b89c 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -32,6 +32,8 @@ void setupPreferences() { auto preferences = DependencyManager::get(); auto myAvatar = DependencyManager::get()->getMyAvatar(); + + static const QString AVATAR_BASICS { "Avatar Basics" }; { auto getter = [myAvatar]()->QString { return myAvatar->getDisplayName(); }; @@ -142,6 +144,14 @@ void setupPreferences() { preferences->addPreference(new CheckPreference(UI_CATEGORY, "Constrain Toolbar Position to Horizontal Center", getter, setter)); } + //static const QString TEST{ "TEST SECTION" }; + { + auto getter = []() -> bool { return qApp->getMouseLock(); }; + auto setter = [](bool value) { qApp->setMouseLock(value); }; + auto preference = new CheckPreference(UI_CATEGORY, "3D mouse cursor in VR", getter, setter); + preferences->addPreference(preference); + } + { auto getter = []()->bool { return qApp->getAwayStateWhenFocusLostInVREnabled(); }; auto setter = [](bool value) { qApp->setAwayStateWhenFocusLostInVREnabled(value); }; diff --git a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp index c645c39eb4..1cdb112aa9 100644 --- a/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp +++ b/libraries/display-plugins/src/display-plugins/CompositorHelper.cpp @@ -195,6 +195,10 @@ bool CompositorHelper::shouldCaptureMouse() const { if (!isHMD()) { return false; } + + if (!_mouseLockComposit) { + return false; + } if (!isWindowActive()) { @@ -216,6 +220,10 @@ void CompositorHelper::setAllowMouseCapture(bool capture) { } } +void CompositorHelper::setMouseLockComposit(bool capture) { + _mouseLockComposit = capture; +} + void CompositorHelper::handleLeaveEvent() { if (shouldCaptureMouse()) { diff --git a/libraries/display-plugins/src/display-plugins/CompositorHelper.h b/libraries/display-plugins/src/display-plugins/CompositorHelper.h index 389d49929e..175bec15d0 100644 --- a/libraries/display-plugins/src/display-plugins/CompositorHelper.h +++ b/libraries/display-plugins/src/display-plugins/CompositorHelper.h @@ -106,6 +106,7 @@ public: bool getAllowMouseCapture() const { return _allowMouseCapture; } void setAllowMouseCapture(bool capture); + void setMouseLockComposit(bool capture); /// if the reticle is pointing to a system overlay (a dialog box for example) then the function returns true otherwise false bool getReticleOverDesktop() const; @@ -168,7 +169,8 @@ private: bool _reticleOverQml { false }; - std::atomic _allowMouseCapture { true }; + std::atomic _allowMouseCapture{ true }; + std::atomic _mouseLockComposit{ false }; bool _fakeMouseEvent { false };