From 769d5c06c42b79d87ca0b610068707d2ca7ec6f3 Mon Sep 17 00:00:00 2001 From: Angeldark Raymaker Date: Mon, 27 Jan 2025 21:47:22 +0000 Subject: [PATCH] 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" />