diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index 14a5e2cad9..5a5f04c7e6 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -165,6 +165,10 @@ bool FSFloaterPoser::postBuild() mPosYSlider = getChild("av_position_leftright"); mPosZSlider = getChild("av_position_updown"); + mAdvRotXSlider = getChild("limb_pitch_slider"); + mAdvRotYSlider = getChild("limb_yaw_slider"); + mAdvRotZSlider = getChild("limb_roll_slider"); + mAdvPosXSlider = getChild("Advanced_Position_X"); mAdvPosYSlider = getChild("Advanced_Position_Y"); mAdvPosZSlider = getChild("Advanced_Position_Z"); @@ -797,6 +801,25 @@ void FSFloaterPoser::onCommitSlider(const LLUICtrl* slider, const S32 id) break; } + case 4: // limb_pitch_slider + { + mPitchSpnr->setValue(value); + onYawPitchRollChanged(); + break; + } + case 5: // limb_yaw_slider + { + mYawSpnr->setValue(value); + onYawPitchRollChanged(); + break; + } + case 6: // limb_roll_slider + { + mRollSpnr->setValue(value); + onYawPitchRollChanged(); + break; + } + case 10: // Advanced_Scale_X { mScaleXSpnr->setValue(value); @@ -1816,10 +1839,15 @@ F32 FSFloaterPoser::clipRange(F32 value) void FSFloaterPoser::onYawPitchRollChanged(bool skipUpdateTrackpad) { LLVector3 absoluteRotation, deltaRotation; - absoluteRotation.mV[VX] = (F32)mYawSpnr->getValue().asReal() * DEG_TO_RAD; - absoluteRotation.mV[VY] = (F32)mPitchSpnr->getValue().asReal() * DEG_TO_RAD; - absoluteRotation.mV[VZ] = (F32)mRollSpnr->getValue().asReal() * DEG_TO_RAD; + absoluteRotation.mV[VX] = (F32)mYawSpnr->getValue().asReal(); + absoluteRotation.mV[VY] = (F32)mPitchSpnr->getValue().asReal(); + absoluteRotation.mV[VZ] = (F32)mRollSpnr->getValue().asReal(); + mAdvRotXSlider->setValue(absoluteRotation.mV[VY]); + mAdvRotYSlider->setValue(absoluteRotation.mV[VX]); + mAdvRotZSlider->setValue(absoluteRotation.mV[VZ]); + + absoluteRotation *= DEG_TO_RAD; deltaRotation = absoluteRotation - mLastSliderRotation; mLastSliderRotation = absoluteRotation; @@ -1853,6 +1881,9 @@ void FSFloaterPoser::refreshRotationSlidersAndSpinners() mYawSpnr->setValue(rotation.mV[VX] *= RAD_TO_DEG); mPitchSpnr->setValue(rotation.mV[VY] *= RAD_TO_DEG); mRollSpnr->setValue(rotation.mV[VZ] *= RAD_TO_DEG); + mAdvRotXSlider->setValue(rotation.mV[VY]); + mAdvRotYSlider->setValue(rotation.mV[VX]); + mAdvRotZSlider->setValue(rotation.mV[VZ]); } void FSFloaterPoser::refreshPositionSlidersAndSpinners() diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index 33d32589a1..622577b0de 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -448,6 +448,9 @@ public: LLSliderCtrl* mPosXSlider{ nullptr }; LLSliderCtrl* mPosYSlider{ nullptr }; LLSliderCtrl* mPosZSlider{ nullptr }; + LLSliderCtrl* mAdvRotXSlider{ nullptr }; + LLSliderCtrl* mAdvRotYSlider{ nullptr }; + LLSliderCtrl* mAdvRotZSlider{ nullptr }; LLSliderCtrl* mAdvPosXSlider{ nullptr }; LLSliderCtrl* mAdvPosYSlider{ nullptr }; LLSliderCtrl* mAdvPosZSlider{ nullptr }; 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 77592445a6..7312d08578 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_poser.xml @@ -975,7 +975,7 @@ width="430"> width="215"> name="limb_rotation" follows="left|right|top" top="2" - height="170" - width="170" - left="10" + height="160" + width="160" + left="15" tool_tip="Change the rotation of the currently selected body part(s). Hold Ctrl to move slow. Roll the wheel to adjust the 3rd axis. Use Shift or Alt to swap which rotations change" pinch_mode="false" infinite_scroll_mode="true"/> @@ -1011,75 +1011,132 @@ width="430"> name="limb_pitch_label" height="10" layout="topleft" - left="2" + left="5" top_pad="2" - width="57"> + width="200"> Up/Down: + + + + + + + left="5" + top_pad="2" + width="200"> Left/Right: + + + + + + Roll: + + + + height="16" + decimal_digits="2" + follows="left|top" + increment="0.01" + top_pad="-19" + left_pad="0" + name="limb_roll_spinner" + min_val="-180" + max_val="180" + width="53"> - - - - - - + function="Poser.CommitSpinner" + parameter="6"/>