diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index 7bc29e34f3..7fe558734f 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -75,6 +75,7 @@ FSFloaterPoser::FSFloaterPoser(const LLSD& key) : LLFloater(key) mCommitCallbackRegistrar.add("Poser.RefreshAvatars", [this](LLUICtrl*, const LLSD&) { onAvatarsRefresh(); }); mCommitCallbackRegistrar.add("Poser.StartStopAnimating", [this](LLUICtrl*, const LLSD&) { onPoseStartStop(); }); mCommitCallbackRegistrar.add("Poser.ToggleLoadSavePanel", [this](LLUICtrl*, const LLSD&) { onToggleLoadSavePanel(); }); + mCommitCallbackRegistrar.add("Poser.ToggleVisualManipulators", [this](LLUICtrl*, const LLSD&) { onToggleVisualManipulators(); }); mCommitCallbackRegistrar.add("Poser.UndoLastRotation", [this](LLUICtrl*, const LLSD&) { onUndoLastChange(); }); mCommitCallbackRegistrar.add("Poser.RedoLastRotation", [this](LLUICtrl*, const LLSD&) { onRedoLastChange(); }); @@ -149,6 +150,9 @@ bool FSFloaterPoser::postBuild() mPosesScrollList->setCommitOnSelectionChange(true); mPosesScrollList->setCommitCallback([this](LLUICtrl *, const LLSD &) { onPoseFileSelect(); }); + mToggleVisualManipulators = getChild("toggleVisualManipulators"); + mToggleVisualManipulators->setToggleState(true); + mTrackpadSensitivitySlider = getChild("trackpad_sensitivity_slider"); mPoseSaveNameEditor = getChild("pose_save_name"); @@ -219,18 +223,6 @@ bool FSFloaterPoser::postBuild() mBtnJointRotate = getChild("button_joint_rotate_tool"); - mCommitCallbackRegistrar.add("Poser.SetRotateTool", - [](LLUICtrl*, const LLSD&) - { - LLToolMgr::getInstance()->setCurrentToolset(gPoserToolset); - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) FSToolCompPose::getInstance()); - } - ); - - LLToolMgr::getInstance()->setCurrentToolset(gPoserToolset); - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) FSToolCompPose::getInstance()); - FSToolCompPose::getInstance()->setAvatar( gAgentAvatarp); - return true; } @@ -242,6 +234,13 @@ void FSFloaterPoser::onOpen(const LLSD& key) onJointTabSelect(); refreshPoseScroll(mHandPresetsScrollList, POSE_PRESETS_HANDS_SUBDIRECTORY); startPosingSelf(); + + enableVisualManipulators(); + LLFloater::onOpen(key); +} + +void FSFloaterPoser::enableVisualManipulators() +{ if (LLToolMgr::getInstance()->getCurrentToolset() != gCameraToolset) { mLastToolset = LLToolMgr::getInstance()->getCurrentToolset(); @@ -249,19 +248,25 @@ void FSFloaterPoser::onOpen(const LLSD& key) LLToolMgr::getInstance()->setCurrentToolset(gPoserToolset); LLToolMgr::getInstance()->getCurrentToolset()->selectTool(FSToolCompPose::getInstance()); FSToolCompPose::getInstance()->setAvatar( gAgentAvatarp); - LLFloater::onOpen(key); } -void FSFloaterPoser::onClose(bool app_quitting) +void FSFloaterPoser::disableVisualManipulators() { - if (gSavedSettings.getBOOL(POSER_STOPPOSINGWHENCLOSED_SAVE_KEY)) - stopPosingAllAvatars(); - if (mLastToolset) { LLToolMgr::getInstance()->setCurrentToolset(mLastToolset); } FSToolCompPose::getInstance()->setAvatar(nullptr); +} + +void FSFloaterPoser::onClose(bool app_quitting) +{ + if (gSavedSettings.getBOOL(POSER_STOPPOSINGWHENCLOSED_SAVE_KEY)) + { + stopPosingAllAvatars(); + } + + disableVisualManipulators(); LLFloater::onClose(app_quitting); } @@ -1385,6 +1390,20 @@ void FSFloaterPoser::enableOrDisableRedoButton() mRedoChangeBtn->setEnabled(shouldEnableRedoButton); } +void FSFloaterPoser::onToggleVisualManipulators() +{ + bool tools_enabled = mToggleVisualManipulators->getValue().asBoolean(); + + if (tools_enabled) + { + enableVisualManipulators(); + } + else + { + disableVisualManipulators(); + } +} + void FSFloaterPoser::selectJointByName(const std::string& jointName) { LLTabContainer* tabContainer = mJointsTabs; diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index 447dfbe5ec..cf75cd65c9 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -218,6 +218,9 @@ public: bool poseFileStartsFromTeePose(const std::string& poseFileName); void setPoseSaveFileTextBoxToUiSelectedAvatarSaveFileName(); void setUiSelectedAvatarSaveFileName(const std::string& saveFileName); + // visual manipulators control + void enableVisualManipulators(); + void disableVisualManipulators(); // UI Event Handlers: void onAvatarsRefresh(); @@ -225,6 +228,7 @@ public: void onJointTabSelect(); void onToggleMirrorChange(); void onToggleSympatheticChange(); + void onToggleVisualManipulators(); void setRotationChangeButtons(bool mirror, bool sympathetic); void onUndoLastChange(); void onRedoLastChange(); @@ -469,6 +473,7 @@ public: LLScrollListCtrl* mPosesScrollList{ nullptr }; LLScrollListCtrl* mHandPresetsScrollList{ nullptr }; + LLButton* mToggleVisualManipulators{ nullptr }; LLButton* mStartStopPosingBtn{ nullptr }; LLButton* mToggleLoadSavePanelBtn{ nullptr }; LLButton* mBrowserFolderBtn{ nullptr }; diff --git a/indra/newview/fsjointpose.cpp b/indra/newview/fsjointpose.cpp index d30d0eb68c..53a6b2869e 100644 --- a/indra/newview/fsjointpose.cpp +++ b/indra/newview/fsjointpose.cpp @@ -147,14 +147,18 @@ void FSJointPose::recaptureJoint() void FSJointPose::recaptureJointAsDelta() { if (mIsCollisionVolume) + { return; - + } + LLJoint* joint = mJointState->getJoint(); if (!joint) + { return; - - addToUndo(mRotation, &mUndoneRotationIndex, &mLastSetRotationDeltas, &mTimeLastUpdatedRotation); - mRotation.updateRotation(joint->getRotation()); + } + + addStateToUndo(mCurrentState); + mCurrentState = FSJointState(joint); } void FSJointPose::swapRotationWith(FSJointPose* oppositeJoint) diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index b5aa087962..c4d3fbe167 100644 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -997,7 +997,7 @@ void FSToolCompPose::pickCallback(const LLPickInfo& pick_info) else { // If no ring is highlighted, reset interaction or do nothing - LL_INFOS("FSToolCompPose") << "No manipulator ring selected" << LL_ENDL; + LL_DEBUGS("FSToolCompPose") << "No manipulator ring selected" << LL_ENDL; } } diff --git a/indra/newview/skins/default/textures/icons/visual_pose_enabled.png b/indra/newview/skins/default/textures/icons/visual_pose_enabled.png new file mode 100644 index 0000000000..eee9a94477 Binary files /dev/null and b/indra/newview/skins/default/textures/icons/visual_pose_enabled.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 0230309383..da82bd327a 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -593,6 +593,11 @@ with the same filename but different name + + + + + diff --git a/indra/newview/skins/default/xui/en/floater_fs_poser.xml b/indra/newview/skins/default/xui/en/floater_fs_poser.xml index 83a0ccdd81..d9f809a8d7 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -925,6 +925,24 @@ width="430"> width="134" /> + - + \ No newline at end of file