From e293a99d94eeda7e38ccec5718f85325985d4cf8 Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Sat, 11 Jan 2025 11:48:28 +0000 Subject: [PATCH 1/5] 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: Mon, 27 Jan 2025 21:45:56 +0000 Subject: [PATCH 2/5] FIRE-34943: Remove unnecessary gets/sets to trackpad sensitivity --- indra/newview/fsfloaterposer.cpp | 3 --- indra/newview/skins/default/xui/en/floater_fs_poser.xml | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index fe5c165121..874c90552b 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -166,7 +166,6 @@ bool FSFloaterPoser::postBuild() mToggleAdvancedPanelBtn->setValue(true); mTrackpadSensitivitySlider = getChild("trackpad_sensitivity_slider"); - mTrackpadSensitivitySlider->setValue(gSavedSettings.getF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY)); mPoseSaveNameEditor = getChild("pose_save_name"); mPoseSaveNameEditor->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); @@ -591,7 +590,6 @@ void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) if (spinner == mTrackpadSensitivitySpnr) { - mTrackpadSensitivitySlider->setValue(value); onAdjustTrackpadSensitivity(); return; } @@ -1793,7 +1791,6 @@ void FSFloaterPoser::onYawPitchRollSliderChanged() void FSFloaterPoser::onAdjustTrackpadSensitivity() { - gSavedSettings.setF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY, mTrackpadSensitivitySlider->getValueF32()); refreshTrackpadCursor(); } 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 3ffff4e5a8..362519f595 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -841,6 +841,7 @@ width="403"> height="16" decimal_digits="2" follows="left|top" + control_name="FSPoserTrackpadSensitivity" increment="0.01" top_pad="-19" left_pad="0" From 769d5c06c42b79d87ca0b610068707d2ca7ec6f3 Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Mon, 27 Jan 2025 21:47:22 +0000 Subject: [PATCH 3/5] FIRE-34943: Update spinner callbacks --- indra/newview/fsfloaterposer.cpp | 108 +++++++++++++----- indra/newview/fsfloaterposer.h | 8 +- .../skins/default/xui/en/floater_fs_poser.xml | 8 +- 3 files changed, 86 insertions(+), 38 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index 874c90552b..a4a84117e2 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -482,7 +482,7 @@ void FSFloaterPoser::onClickToggleSelectedBoneEnabled() mPoserAnimator.setPosingAvatarJoint(avatar, *item, !currentlyPosing); } - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); refreshTextHighlightingOnJointScrollLists(); } @@ -526,7 +526,7 @@ void FSFloaterPoser::onClickFlipSelectedJoints() mPoserAnimator.reflectJoint(avatar, item); } - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); } @@ -541,7 +541,7 @@ void FSFloaterPoser::onClickFlipPose() mPoserAnimator.flipEntirePose(avatar); - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); } @@ -568,7 +568,7 @@ void FSFloaterPoser::onClickRecaptureSelectedBones() } setSavePosesButtonText(true); - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); refreshTextHighlightingOnJointScrollLists(); } @@ -586,6 +586,12 @@ void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) if (!spinner) return; + auto activeTab = mJointsTabs->getCurrentPanel(); + if (!activeTab) + return; + + bool changingBodyPosition = activeTab == mPositionRotationPnl; + F32 value = (F32)spinner->getValue().asReal(); if (spinner == mTrackpadSensitivitySpnr) @@ -594,27 +600,57 @@ void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) return; } - if (spinner == mInOutSpnr || spinner == mAdvPosXSpnr) + if (spinner == mInOutSpnr) { mPosXSlider->setValue(value); onAvatarPositionSet(); return; } - if (spinner == mLeftRightSpnr || spinner == mAdvPosYSpnr) + if (spinner == mAdvPosXSpnr) + { + if (changingBodyPosition) + mPosXSlider->setValue(value); + + mAdvPosXSlider->setValue(value); + onAdvancedPositionSet(); + return; + } + + if (spinner == mLeftRightSpnr) { mPosYSlider->setValue(value); onAvatarPositionSet(); return; } - if (spinner == mUpDownSpnr || spinner == mAdvPosZSpnr) + if (spinner == mAdvPosYSpnr) + { + if (changingBodyPosition) + mPosYSlider->setValue(value); + + mAdvPosYSlider->setValue(value); + onAdvancedPositionSet(); + return; + } + + if (spinner == mUpDownSpnr) { mPosZSlider->setValue(value); onAvatarPositionSet(); return; } + if (spinner == mAdvPosZSpnr) + { + if (changingBodyPosition) + mPosZSlider->setValue(value); + + mAdvPosZSlider->setValue(value); + onAdvancedPositionSet(); + return; + } + if (spinner == mScaleXSpnr) { mAdvScaleXSlider->setValue(value); @@ -681,9 +717,9 @@ void FSFloaterPoser::onPoseJointsReset() mPoserAnimator.resetAvatarJoint(avatar, *item); } - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); - refreshAvatarPositionSliders(); + refreshAvatarPositionSlidersAndSpinners(); } void FSFloaterPoser::onPoseMenuAction(const LLSD& param) @@ -1241,7 +1277,7 @@ void FSFloaterPoser::onUndoLastRotation() } enableOrDisableRedoButton(); - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); } @@ -1265,8 +1301,8 @@ void FSFloaterPoser::onUndoLastPosition() mPoserAnimator.undoLastJointPosition(avatar, *item, getUiSelectedBoneDeflectionStyle()); } - refreshAdvancedPositionSliders(); - refreshAvatarPositionSliders(); + refreshAdvancedPositionSlidersAndSpinners(); + refreshAvatarPositionSlidersAndSpinners(); } void FSFloaterPoser::onUndoLastScale() @@ -1289,7 +1325,7 @@ void FSFloaterPoser::onUndoLastScale() mPoserAnimator.undoLastJointScale(avatar, *item, getUiSelectedBoneDeflectionStyle()); } - refreshAdvancedScaleSliders(); + refreshAdvancedScaleSlidersAndSpinners(); } void FSFloaterPoser::onSetAvatarToTpose() @@ -1329,8 +1365,8 @@ void FSFloaterPoser::onResetPosition() mPoserAnimator.resetJointPosition(avatar, *item, getUiSelectedBoneDeflectionStyle()); } - refreshAdvancedPositionSliders(); - refreshAvatarPositionSliders(); + refreshAdvancedPositionSlidersAndSpinners(); + refreshAvatarPositionSlidersAndSpinners(); } void FSFloaterPoser::onResetScale() @@ -1356,7 +1392,7 @@ void FSFloaterPoser::onResetScale() mPoserAnimator.resetJointScale(avatar, *item, getUiSelectedBoneDeflectionStyle()); } - refreshAdvancedScaleSliders(); + refreshAdvancedScaleSlidersAndSpinners(); } void FSFloaterPoser::onRedoLastRotation() @@ -1380,7 +1416,7 @@ void FSFloaterPoser::onRedoLastRotation() } enableOrDisableRedoButton(); - refreshRotationSliders(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); } @@ -1404,8 +1440,8 @@ void FSFloaterPoser::onRedoLastPosition() mPoserAnimator.redoLastJointPosition(avatar, *item, getUiSelectedBoneDeflectionStyle()); } - refreshAdvancedPositionSliders(); - refreshAvatarPositionSliders(); + refreshAdvancedPositionSlidersAndSpinners(); + refreshAvatarPositionSlidersAndSpinners(); } void FSFloaterPoser::onRedoLastScale() @@ -1428,7 +1464,7 @@ void FSFloaterPoser::onRedoLastScale() mPoserAnimator.redoLastJointScale(avatar, *item, getUiSelectedBoneDeflectionStyle()); } - refreshAdvancedScaleSliders(); + refreshAdvancedScaleSlidersAndSpinners(); } void FSFloaterPoser::enableOrDisableRedoButton() @@ -1669,7 +1705,7 @@ void FSFloaterPoser::onAdvancedPositionSet() mUpDownSpnr->setValue(posZ); setSelectedJointsPosition(posX, posY, posZ); - refreshAvatarPositionSliders(); + refreshAvatarPositionSlidersAndSpinners(); } void FSFloaterPoser::onAdvancedScaleSet() @@ -1699,7 +1735,7 @@ void FSFloaterPoser::onAvatarPositionSet() mUpDownSpnr->setValue(posZ); setSelectedJointsPosition(posX, posY, posZ); - refreshAdvancedPositionSliders(); + refreshAdvancedPositionSlidersAndSpinners(); } void FSFloaterPoser::onLimbTrackballChanged() @@ -1810,7 +1846,7 @@ void FSFloaterPoser::refreshTrackpadCursor() /// /// This only sets the position sliders of the 'basic' view (not the advanced sliders). /// -void FSFloaterPoser::refreshAvatarPositionSliders() +void FSFloaterPoser::refreshAvatarPositionSlidersAndSpinners() { auto activeTab = mJointsTabs->getCurrentPanel(); if (!activeTab) @@ -1821,36 +1857,48 @@ void FSFloaterPoser::refreshAvatarPositionSliders() LLVector3 position = getPositionOfFirstSelectedJoint(); mPosXSlider->setValue(position.mV[VX]); + mInOutSpnr->setValue(position.mV[VX]); mPosYSlider->setValue(position.mV[VY]); + mLeftRightSpnr->setValue(position.mV[VY]); mPosZSlider->setValue(position.mV[VZ]); + mUpDownSpnr->setValue(position.mV[VZ]); } -void FSFloaterPoser::refreshRotationSliders() +void FSFloaterPoser::refreshRotationSlidersAndSpinners() { LLVector3 rotation = getRotationOfFirstSelectedJoint(); mLastSliderRotation = rotation; mLimbYawSlider->setValue(rotation.mV[VX] *= RAD_TO_DEG); + mYawSpnr->setValue(rotation.mV[VX] *= RAD_TO_DEG); mLimbPitchSlider->setValue(rotation.mV[VY] *= RAD_TO_DEG); + mPitchSpnr->setValue(rotation.mV[VY] *= RAD_TO_DEG); mLimbRollSlider->setValue(rotation.mV[VZ] *= RAD_TO_DEG); + mRollSpnr->setValue(rotation.mV[VZ] *= RAD_TO_DEG); } -void FSFloaterPoser::refreshAdvancedPositionSliders() +void FSFloaterPoser::refreshAdvancedPositionSlidersAndSpinners() { LLVector3 position = getPositionOfFirstSelectedJoint(); mAdvPosXSlider->setValue(position.mV[VX]); + mAdvPosXSpnr->setValue(position.mV[VX]); mAdvPosYSlider->setValue(position.mV[VY]); + mAdvPosYSpnr->setValue(position.mV[VY]); mAdvPosZSlider->setValue(position.mV[VZ]); + mAdvPosZSpnr->setValue(position.mV[VZ]); } -void FSFloaterPoser::refreshAdvancedScaleSliders() +void FSFloaterPoser::refreshAdvancedScaleSlidersAndSpinners() { LLVector3 rotation = getScaleOfFirstSelectedJoint(); mAdvScaleXSlider->setValue(rotation.mV[VX]); + mScaleXSpnr->setValue(rotation.mV[VX]); mAdvScaleYSlider->setValue(rotation.mV[VY]); + mScaleYSpnr->setValue(rotation.mV[VY]); mAdvScaleZSlider->setValue(rotation.mV[VZ]); + mScaleZSpnr->setValue(rotation.mV[VZ]); } void FSFloaterPoser::setSelectedJointsPosition(F32 x, F32 y, F32 z) @@ -1994,16 +2042,16 @@ LLVector3 FSFloaterPoser::getScaleOfFirstSelectedJoint() const void FSFloaterPoser::onJointTabSelect() { - refreshAvatarPositionSliders(); - refreshRotationSliders(); + refreshAvatarPositionSlidersAndSpinners(); + refreshRotationSlidersAndSpinners(); refreshTrackpadCursor(); enableOrDisableRedoButton(); onClickSetBaseRotZero(); if (mToggleAdvancedPanelBtn->getValue().asBoolean()) { - refreshAdvancedPositionSliders(); - refreshAdvancedScaleSliders(); + refreshAdvancedPositionSlidersAndSpinners(); + refreshAdvancedScaleSlidersAndSpinners(); } } diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index eafa475892..f403154134 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -256,11 +256,11 @@ class FSFloaterPoser : public LLFloater void onCommitSpinner(LLUICtrl* spinner); // UI Refreshments - void refreshRotationSliders(); - void refreshAvatarPositionSliders(); + void refreshRotationSlidersAndSpinners(); + void refreshAvatarPositionSlidersAndSpinners(); void refreshTrackpadCursor(); - void refreshAdvancedPositionSliders(); - void refreshAdvancedScaleSliders(); + void refreshAdvancedPositionSlidersAndSpinners(); + void refreshAdvancedScaleSlidersAndSpinners(); /// /// Determines if we have permission to animate the supplied avatar. 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 362519f595..1f273104c8 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -868,8 +868,8 @@ width="403"> top_pad="-19" left_pad="0" name="trackpad_sensitivity_spinner" - min_val="-1.5" - max_val="1.5" + min_val="0.01" + max_val="2" width="47"> @@ -901,9 +901,9 @@ width="403"> enabled="false" label="Write BVH when saving**" follows="left|top" - left="5" + left="15" tool_tip="When you save your pose, also write a BVH file, which can be uploaded via the 'Build > Upload > Animation' to pose yourself or others in-world. This needs joints to reset their 'base' to zero, because BVH requires original work." - top_pad="5" + top_pad="2" width="134" /> From c84770a5aa2b0c3cdd749ab7b0ca4af677af86e2 Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Mon, 27 Jan 2025 23:57:21 +0000 Subject: [PATCH 4/5] FIRE-34943: Fix rotation errors --- indra/newview/fsfloaterposer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index a4a84117e2..dd9aba2eb8 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -1870,11 +1870,11 @@ void FSFloaterPoser::refreshRotationSlidersAndSpinners() mLastSliderRotation = rotation; mLimbYawSlider->setValue(rotation.mV[VX] *= RAD_TO_DEG); - mYawSpnr->setValue(rotation.mV[VX] *= RAD_TO_DEG); + mYawSpnr->setValue(rotation.mV[VX]); mLimbPitchSlider->setValue(rotation.mV[VY] *= RAD_TO_DEG); - mPitchSpnr->setValue(rotation.mV[VY] *= RAD_TO_DEG); + mPitchSpnr->setValue(rotation.mV[VY]); mLimbRollSlider->setValue(rotation.mV[VZ] *= RAD_TO_DEG); - mRollSpnr->setValue(rotation.mV[VZ] *= RAD_TO_DEG); + mRollSpnr->setValue(rotation.mV[VZ]); } void FSFloaterPoser::refreshAdvancedPositionSlidersAndSpinners() From b4536e545f1a46ea920e5e25e3dcbc080e2927a1 Mon Sep 17 00:00:00 2001 From: minerjr Date: Thu, 30 Jan 2025 03:30:25 -0400 Subject: [PATCH 5/5] Added new parameter to the OnCommitSpinner method and XML objects Added new parameter to the OnCommitSpinner method and XML objects Also changed logic to use Switch statement so that each action takes the same amount of time to be reached. --- indra/newview/fsfloaterposer.cpp | 184 +++++++++--------- indra/newview/fsfloaterposer.h | 3 +- .../skins/default/xui/en/floater_fs_poser.xml | 39 ++-- 3 files changed, 118 insertions(+), 108 deletions(-) diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index dd9aba2eb8..eba653938d 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -106,7 +106,8 @@ FSFloaterPoser::FSFloaterPoser(const LLSD& key) : LLFloater(key) 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); }); + //mCommitCallbackRegistrar.add("Poser.CommitSpinner", [this](LLUICtrl* spinnerControl, const LLSD&) { onCommitSpinner(spinnerControl); }); + mCommitCallbackRegistrar.add("Poser.CommitSpinner", boost::bind(&FSFloaterPoser::onCommitSpinner, this, _1, _2)); } bool FSFloaterPoser::postBuild() @@ -581,7 +582,9 @@ void FSFloaterPoser::onClickBrowsePoseCache() gViewerWindow->getWindow()->openFile(pathname); } -void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) +//void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) +// Pass in an ID as a parameter, so you can use a switch statement +void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner, S32 id) { if (!spinner) return; @@ -594,103 +597,96 @@ void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner) F32 value = (F32)spinner->getValue().asReal(); - if (spinner == mTrackpadSensitivitySpnr) + // Use the ID passed in to perform a switch statment + // which should make each action take the same amount of time. + switch (id) { - onAdjustTrackpadSensitivity(); - return; - } - - if (spinner == mInOutSpnr) - { - mPosXSlider->setValue(value); - onAvatarPositionSet(); - return; - } - - if (spinner == mAdvPosXSpnr) - { - if (changingBodyPosition) - mPosXSlider->setValue(value); - - mAdvPosXSlider->setValue(value); - onAdvancedPositionSet(); - return; - } - - if (spinner == mLeftRightSpnr) - { - mPosYSlider->setValue(value); - onAvatarPositionSet(); - return; - } - - if (spinner == mAdvPosYSpnr) - { - if (changingBodyPosition) - mPosYSlider->setValue(value); - - mAdvPosYSlider->setValue(value); - onAdvancedPositionSet(); - return; - } - - if (spinner == mUpDownSpnr) - { - mPosZSlider->setValue(value); - onAvatarPositionSet(); - return; - } - - if (spinner == mAdvPosZSpnr) - { - if (changingBodyPosition) + case 0: // av_position_updown_spinner + { mPosZSlider->setValue(value); + onAvatarPositionSet(); + break; + } + case 1: // av_position_leftright + { + mPosYSlider->setValue(value); + onAvatarPositionSet(); + break; + } + case 2: // av_position_inout_spinner + { + mPosXSlider->setValue(value); + onAvatarPositionSet(); + break; + } + case 3: // trackpad_sensitivity_spinner + { + onAdjustTrackpadSensitivity(); + break; + } + case 4: // limb_pitch_spinner + { + mLimbPitchSlider->setValue(value); + onYawPitchRollSliderChanged(); + break; + } + case 5: // limb_yaw_spinner + { + mLimbYawSlider->setValue(value); + onYawPitchRollSliderChanged(); + break; + } + case 6: // limb_roll_spinner + { + mLimbRollSlider->setValue(value); + onYawPitchRollSliderChanged(); + break; + } + case 7: // adv_posx_spinner + { + if (changingBodyPosition) + mPosXSlider->setValue(value); - mAdvPosZSlider->setValue(value); - onAdvancedPositionSet(); - return; - } + mAdvPosXSlider->setValue(value); + onAdvancedPositionSet(); + break; + } + case 8: // adv_posy_spinner + { + if (changingBodyPosition) + mPosYSlider->setValue(value); - if (spinner == mScaleXSpnr) - { - mAdvScaleXSlider->setValue(value); - onAdvancedScaleSet(); - return; - } + mAdvPosYSlider->setValue(value); + onAdvancedPositionSet(); + break; + } + case 9: // adv_posz_spinner + { + if (changingBodyPosition) + mPosZSlider->setValue(value); - 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; + mAdvPosZSlider->setValue(value); + onAdvancedPositionSet(); + break; + } + case 10: // adv_scalex_spinner + { + mAdvScaleXSlider->setValue(value); + onAdvancedScaleSet(); + break; + } + case 11: // adv_scaley_spinner + { + mAdvScaleYSlider->setValue(value); + onAdvancedScaleSet(); + break; + } + case 12: // adv_scalez_spinner + { + mAdvScaleZSlider->setValue(value); + onAdvancedScaleSet(); + break; + } } } diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index f403154134..bd8e4c09db 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -253,7 +253,8 @@ class FSFloaterPoser : public LLFloater void onClickLoadRightHandPose(); void onClickLoadHandPose(bool isRightHand); void onClickSetBaseRotZero(); - void onCommitSpinner(LLUICtrl* spinner); + //void onCommitSpinner(LLUICtrl* spinner); + void onCommitSpinner(LLUICtrl* spinner, S32 ID); // UI Refreshments void refreshRotationSlidersAndSpinners(); 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 1f273104c8..61db38b42a 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -380,7 +380,8 @@ width="403"> max_val="1.5" width="47"> + function="Poser.CommitSpinner" + parameter="0"/> max_val="1.5" width="47"> + function="Poser.CommitSpinner" + parameter="1"/> max_val="1.5" width="47"> + function="Poser.CommitSpinner" + parameter="2"/> max_val="2" width="47"> + function="Poser.CommitSpinner" + parameter="3"/> max_val="180" width="57"> + function="Poser.CommitSpinner" + parameter="4"/> max_val="180" width="57"> + function="Poser.CommitSpinner" + parameter="5"/> max_val="180" width="57"> + function="Poser.CommitSpinner" + parameter="6"/> max_val="1.5" width="47"> + function="Poser.CommitSpinner" + parameter="7"/> max_val="1.5" width="47"> + function="Poser.CommitSpinner" + parameter="8"/> max_val="1.5" width="47"> + function="Poser.CommitSpinner" + parameter="9"/>