From b909b057456bde5677a65b5d31c5801cdb16f13b Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Sun, 26 Jan 2025 11:49:37 +0000 Subject: [PATCH 01/21] FIRE-34908: Pose only Animeshes you own removed unused posingAnyoneOnScrollList() method, renamed a UI-control that had a duplicate name. --- indra/newview/fsfloaterposer.cpp | 45 +++++++------------ indra/newview/fsfloaterposer.h | 7 +-- .../skins/default/xui/en/floater_fs_poser.xml | 2 +- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index b90705a31d..dd59d39637 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -238,7 +238,7 @@ void FSFloaterPoser::onClose(bool app_quitting) gSavedSettings.setBOOL(POSER_ADVANCEDWINDOWSTATE_SAVE_KEY, mToggleAdvancedPanelBtn->getValue().asBoolean()); if (gSavedSettings.getBOOL(POSER_STOPPOSINGWHENCLOSED_SAVE_KEY)) - stopPosingSelf(); + stopPosingAllAvatars(); LLFloater::onClose(app_quitting); } @@ -892,20 +892,24 @@ void FSFloaterPoser::startPosingSelf() onAvatarSelect(); } -void FSFloaterPoser::stopPosingSelf() +void FSFloaterPoser::stopPosingAllAvatars() { if (!gAgentAvatarp || gAgentAvatarp.isNull()) return; - LLVOAvatar* avatar = getAvatarByUuid(gAgentAvatarp->getID()); - if (!avatar) - return; + for (auto listItem : mAvatarSelectionScrollList->getAllData()) + { + LLScrollListCell* cell = listItem->getColumn(COL_UUID); + if (!cell) + continue; - bool arePosingSelected = mPoserAnimator.isPosingAvatar(avatar); - if (!arePosingSelected) - return; + LLUUID selectedAvatarId = cell->getValue().asUUID(); + LLVOAvatar* listAvatar = getAvatarByUuid(selectedAvatarId); + + if (mPoserAnimator.isPosingAvatar(listAvatar)) + mPoserAnimator.stopPosingAvatar(listAvatar); + } - mPoserAnimator.stopPosingAvatar(avatar); onAvatarSelect(); } @@ -2074,7 +2078,7 @@ void FSFloaterPoser::onAvatarsRefresh() LLAvatarName av_name; std::string animeshName = getControlAvatarName(avatar); if (animeshName.empty()) - animeshName = avatar->getFullname(); + continue; LLSD row; row["columns"][COL_ICON]["column"] = "icon"; @@ -2109,6 +2113,9 @@ std::string FSFloaterPoser::getControlAvatarName(const LLControlAvatar* avatar) if (attachedItem) return attachedItem->getName(); + if (rootEditObject->permYouOwner()) + return avatar->getFullname(); + return ""; } @@ -2146,24 +2153,6 @@ void FSFloaterPoser::setSavePosesButtonText(bool setAsSaveDiff) setAsSaveDiff ? mSavePosesBtn->setLabel("Save Diff") : mSavePosesBtn->setLabel("Save Pose"); } -bool FSFloaterPoser::posingAnyoneOnScrollList() -{ - for (auto listItem : mAvatarSelectionScrollList->getAllData()) - { - LLScrollListCell* cell = listItem->getColumn(COL_UUID); - if (!cell) - continue; - - LLUUID selectedAvatarId = cell->getValue().asUUID(); - LLVOAvatar* listAvatar = getAvatarByUuid(selectedAvatarId); - - if (mPoserAnimator.isPosingAvatar(listAvatar)) - return true; - } - - return false; -} - void FSFloaterPoser::addBoldToScrollList(LLScrollListCtrl* list, LLVOAvatar* avatar) { if (!avatar) diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index f847fb587a..163d90f7a5 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -236,7 +236,7 @@ class FSFloaterPoser : public LLFloater void enableOrDisableRedoButton(); void onPoseStartStop(); void startPosingSelf(); - void stopPosingSelf(); + void stopPosingAllAvatars(); void onLimbTrackballChanged(); void onYawPitchRollSliderChanged(); void onAvatarPositionSet(); @@ -328,11 +328,6 @@ class FSFloaterPoser : public LLFloater /// Whether to indicate a diff will be saved, instead of a pose. void setSavePosesButtonText(bool setAsSaveDiff); - /// - /// Gets whether any avatar know by the UI is being posed. - /// - bool posingAnyoneOnScrollList(); - /// /// Applies the appropriate font-face (such as bold) to the text of the supplied list, to indicate use. /// 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 b10ca485d1..f4234960e1 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -923,7 +923,7 @@ width="403"> layout="topleft" image_overlay="Inv_TrashOpen" image_unselected="Toolbar_Middle_Off" - name="refresh_avatars" + name="poser_joint_reset" tool_tip="Double click to reset all selected body parts to when you first started posing" width="18" top_delta="0" From e293a99d94eeda7e38ccec5718f85325985d4cf8 Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Sat, 11 Jan 2025 11:48:28 +0000 Subject: [PATCH 02/21] FIRE-34943: Add spinners to sliders and add callback --- indra/newview/fsfloaterposer.cpp | 120 ++++++ indra/newview/fsfloaterposer.h | 15 + .../skins/default/xui/en/floater_fs_poser.xml | 360 +++++++++++++----- 3 files changed, 409 insertions(+), 86 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index dd59d39637..fe5c165121 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -105,6 +105,8 @@ FSFloaterPoser::FSFloaterPoser(const LLSD& key) : LLFloater(key) mCommitCallbackRegistrar.add("Poser.RecaptureSelectedBones", [this](LLUICtrl*, const LLSD&) { onClickRecaptureSelectedBones(); }); mCommitCallbackRegistrar.add("Poser.TogglePosingSelectedBones", [this](LLUICtrl*, const LLSD&) { onClickToggleSelectedBoneEnabled(); }); mCommitCallbackRegistrar.add("Poser.PoseJointsReset", [this](LLUICtrl*, const LLSD&) { onPoseJointsReset(); }); + + mCommitCallbackRegistrar.add("Poser.CommitSpinner", [this](LLUICtrl* spinnerControl, const LLSD&) { onCommitSpinner(spinnerControl); }); } bool FSFloaterPoser::postBuild() @@ -216,6 +218,20 @@ bool FSFloaterPoser::postBuild() mResetBaseRotCbx = getChild("reset_base_rotation_on_edit_checkbox"); mResetBaseRotCbx->setCommitCallback([this](LLUICtrl*, const LLSD&) { onClickSetBaseRotZero(); }); + mTrackpadSensitivitySpnr = getChild("trackpad_sensitivity_spinner"); + mYawSpnr = getChild("limb_yaw_spinner"); + mPitchSpnr = getChild("limb_pitch_spinner"); + mRollSpnr = getChild("limb_roll_spinner"); + mUpDownSpnr = getChild("av_position_updown_spinner"); + mLeftRightSpnr = getChild("av_position_leftright_spinner"); + mInOutSpnr = getChild("av_position_inout_spinner"); + mAdvPosXSpnr = getChild("adv_posx_spinner"); + mAdvPosYSpnr = getChild("adv_posy_spinner"); + mAdvPosZSpnr = getChild("adv_posz_spinner"); + mScaleXSpnr = getChild("adv_scalex_spinner"); + mScaleYSpnr = getChild("adv_scaley_spinner"); + mScaleZSpnr = getChild("adv_scalez_spinner"); + return true; } @@ -566,6 +582,84 @@ void FSFloaterPoser::onClickBrowsePoseCache() gViewerWindow->getWindow()->openFile(pathname); } +void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) +{ + if (!spinner) + return; + + F32 value = (F32)spinner->getValue().asReal(); + + if (spinner == mTrackpadSensitivitySpnr) + { + mTrackpadSensitivitySlider->setValue(value); + onAdjustTrackpadSensitivity(); + return; + } + + if (spinner == mInOutSpnr || spinner == mAdvPosXSpnr) + { + mPosXSlider->setValue(value); + onAvatarPositionSet(); + return; + } + + if (spinner == mLeftRightSpnr || spinner == mAdvPosYSpnr) + { + mPosYSlider->setValue(value); + onAvatarPositionSet(); + return; + } + + if (spinner == mUpDownSpnr || spinner == mAdvPosZSpnr) + { + mPosZSlider->setValue(value); + onAvatarPositionSet(); + return; + } + + if (spinner == mScaleXSpnr) + { + mAdvScaleXSlider->setValue(value); + onAdvancedScaleSet(); + return; + } + + if (spinner == mScaleYSpnr) + { + mAdvScaleYSlider->setValue(value); + onAdvancedScaleSet(); + return; + } + + if (spinner == mScaleZSpnr) + { + mAdvScaleZSlider->setValue(value); + onAdvancedScaleSet(); + return; + } + + if (spinner == mYawSpnr) + { + mLimbYawSlider->setValue(value); + onYawPitchRollSliderChanged(); + return; + } + + if (spinner == mPitchSpnr) + { + mLimbPitchSlider->setValue(value); + onYawPitchRollSliderChanged(); + return; + } + + if (spinner == mRollSpnr) + { + mLimbRollSlider->setValue(value); + onYawPitchRollSliderChanged(); + return; + } +} + void FSFloaterPoser::onPoseJointsReset() { if (notDoubleClicked()) @@ -1569,6 +1663,13 @@ void FSFloaterPoser::onAdvancedPositionSet() F32 posY = mAdvPosYSlider->getValueF32(); F32 posZ = mAdvPosZSlider->getValueF32(); + mAdvPosXSpnr->setValue(posX); + mInOutSpnr->setValue(posX); + mAdvPosYSpnr->setValue(posY); + mLeftRightSpnr->setValue(posY); + mAdvPosZSpnr->setValue(posZ); + mUpDownSpnr->setValue(posZ); + setSelectedJointsPosition(posX, posY, posZ); refreshAvatarPositionSliders(); } @@ -1579,6 +1680,10 @@ void FSFloaterPoser::onAdvancedScaleSet() F32 scY = mAdvScaleYSlider->getValueF32(); F32 scZ = mAdvScaleZSlider->getValueF32(); + mScaleXSpnr->setValue(scX); + mScaleYSpnr->setValue(scY); + mScaleZSpnr->setValue(scZ); + setSelectedJointsScale(scX, scY, scZ); } @@ -1588,6 +1693,13 @@ void FSFloaterPoser::onAvatarPositionSet() F32 posY = mPosYSlider->getValueF32(); F32 posZ = mPosZSlider->getValueF32(); + mAdvPosXSpnr->setValue(posX); + mInOutSpnr->setValue(posX); + mAdvPosYSpnr->setValue(posY); + mLeftRightSpnr->setValue(posY); + mAdvPosZSpnr->setValue(posZ); + mUpDownSpnr->setValue(posZ); + setSelectedJointsPosition(posX, posY, posZ); refreshAdvancedPositionSliders(); } @@ -1628,6 +1740,10 @@ void FSFloaterPoser::onLimbTrackballChanged() mLimbYawSlider->setValue(trackPadPos.mV[VX] *= RAD_TO_DEG); mLimbPitchSlider->setValue(trackPadPos.mV[VY] *= RAD_TO_DEG); mLimbRollSlider->setValue(trackPadPos.mV[VZ] *= RAD_TO_DEG); + + mYawSpnr->setValue(mLimbYawSlider->getValueF32()); + mPitchSpnr->setValue(mLimbPitchSlider->getValueF32()); + mRollSpnr->setValue(mLimbRollSlider->getValueF32()); } F32 FSFloaterPoser::unWrapScale(F32 scale) @@ -1669,6 +1785,10 @@ void FSFloaterPoser::onYawPitchRollSliderChanged() absoluteRotation.mV[VZ] /= NormalTrackpadRangeInRads; mAvatarTrackball->setValue(absoluteRotation.getValue()); + + mYawSpnr->setValue(mLimbYawSlider->getValueF32()); + mPitchSpnr->setValue(mLimbPitchSlider->getValueF32()); + mRollSpnr->setValue(mLimbRollSlider->getValueF32()); } void FSFloaterPoser::onAdjustTrackpadSensitivity() diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index 163d90f7a5..eafa475892 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -253,6 +253,7 @@ class FSFloaterPoser : public LLFloater void onClickLoadRightHandPose(); void onClickLoadHandPose(bool isRightHand); void onClickSetBaseRotZero(); + void onCommitSpinner(LLUICtrl* spinner); // UI Refreshments void refreshRotationSliders(); @@ -496,6 +497,20 @@ class FSFloaterPoser : public LLFloater LLCheckBoxCtrl* mResetBaseRotCbx{ nullptr }; LLCheckBoxCtrl* mAlsoSaveBvhCbx{ nullptr }; + + LLUICtrl* mTrackpadSensitivitySpnr{ nullptr }; + LLUICtrl* mYawSpnr{ nullptr }; + LLUICtrl* mPitchSpnr{ nullptr }; + LLUICtrl* mRollSpnr{ nullptr }; + LLUICtrl* mUpDownSpnr{ nullptr }; + LLUICtrl* mLeftRightSpnr{ nullptr }; + LLUICtrl* mInOutSpnr{ nullptr }; + LLUICtrl* mAdvPosXSpnr{ nullptr }; + LLUICtrl* mAdvPosYSpnr{ nullptr }; + LLUICtrl* mAdvPosZSpnr{ nullptr }; + LLUICtrl* mScaleXSpnr{ nullptr }; + LLUICtrl* mScaleYSpnr{ nullptr }; + LLUICtrl* mScaleZSpnr{ nullptr }; }; #endif 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 f4234960e1..3ffff4e5a8 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -351,6 +351,7 @@ width="403"> max_val="1.5" name="av_position_updown" top_pad="5" - width="172" + width="122" tool_tip="Move the selected avatar up or down" can_edit_text="true"> + + + Left/Right: @@ -380,6 +395,7 @@ width="403"> max_val="1.5" name="av_position_leftright" top_pad="5" - width="172" + width="122" tool_tip="Move the selected avatar left or right" can_edit_text="true"> + + + In/Out: @@ -408,6 +438,7 @@ width="403"> max_val="1.5" name="av_position_inout" top_pad="5" - width="172" + width="122" tool_tip="Move the selected avatar in or out" can_edit_text="true"> - + + + + left_delta="0" max_val="2" min_val="0.01" + show_text="false" name="trackpad_sensitivity_slider" tool_tip="Adjusts the sensitivity of the trackball" top_pad="3" - width="170" > + width="120" > + + + follows="left|top" left="5" tool_tip="Not stopping your pose can be helpful if you do a lot of work, and don't want to accidentally lose it." - top_pad="5" + top_pad="10" width="134" /> name="limb_pitch_label" height="10" layout="topleft" - left_delta="0" + left="0" top_pad="2" width="200"> Up/Down: @@ -1008,16 +1068,30 @@ width="403"> min_val="-180" max_val="180" name="limb_pitch" + show_text="false" top_pad="2" - width="150" - can_edit_text="true"/> + width="98"/> + + + Left/Right: @@ -1032,16 +1106,31 @@ width="403"> min_val="-180" max_val="180" name="limb_yaw" + show_text="false" top_pad="0" - width="150" + width="98" can_edit_text="true"/> + + + Roll: @@ -1052,13 +1141,28 @@ width="403"> increment="0.1" initial_value="0" layout="topleft" + show_text="false" left_delta="5" min_val="-180" max_val="180" name="limb_roll" top_pad="-1" - width="150" + width="98" can_edit_text="true"/> + + + top="0" width="555"> + top_pad="2" + width="342" > - + + + - - - + max_val="1.5" + min_val="-1.5" + name="Advanced_Position_Y" + left="3" + width="342" > + + + + + + + + + @@ -1419,7 +1562,7 @@ width="403"> image_unselected="Toolbar_Middle_Off" name="redo_position_change" tool_tip="Redo the last position change" - width="110" + width="108" top_delta="0" left_pad="4"> image_unselected="Toolbar_Middle_Off" name="reset_positions" tool_tip="Double click to reset position back to original" - width="110" + width="109" top_delta="0" left_pad="4"> + top_pad="2" + width="342" > + + + + width="342" > + + + + width="342" > + + + @@ -1535,7 +1723,7 @@ width="403"> image_unselected="Toolbar_Middle_Off" name="redo_scale_change" tool_tip="Redo the last scale change" - width="110" + width="108" top_delta="0" left_pad="4"> image_unselected="Toolbar_Middle_Off" name="reset_scales" tool_tip="Double click to reset scale back to original" - width="110" + width="109" top_delta="0" left_pad="4"> Date: Sun, 26 Jan 2025 15:07:45 +0100 Subject: [PATCH 03/21] Update other language files as well --- indra/newview/skins/default/xui/de/floater_fs_poser.xml | 2 +- indra/newview/skins/default/xui/fr/floater_fs_poser.xml | 2 +- indra/newview/skins/default/xui/it/floater_fs_poser.xml | 2 +- indra/newview/skins/default/xui/pl/floater_fs_poser.xml | 2 +- indra/newview/skins/default/xui/ru/floater_fs_poser.xml | 2 +- indra/newview/skins/default/xui/zh/floater_fs_poser.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/indra/newview/skins/default/xui/de/floater_fs_poser.xml b/indra/newview/skins/default/xui/de/floater_fs_poser.xml index 2119dfb5a5..4d2b073034 100644 --- a/indra/newview/skins/default/xui/de/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/de/floater_fs_poser.xml @@ -235,7 +235,7 @@