diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index aeff3d0de0647b432ba080590288167464b0bbe0..b68cb29faf8a308bf2beb64c8b10d5cb234ab1c7 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -81,11 +81,15 @@ class LLPanelCameraZoom void onCameraTrack(); void onCameraRotate(); F32 getOrbitRate(F32 time); + void onRollLeftHeldDown(); + void onRollRightHeldDown(); private: LLButton* mPlusBtn; LLButton* mMinusBtn; LLSlider* mSlider; + LLButton* mRollLeft; + LLButton* mRollRight; }; LLPanelCameraItem::Params::Params() @@ -164,13 +168,17 @@ static LLPanelInjector<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel LLPanelCameraZoom::LLPanelCameraZoom() : mPlusBtn( NULL ), mMinusBtn( NULL ), - mSlider( NULL ) + mSlider( NULL ), + mRollLeft( NULL ), + mRollRight( NULL ) { mCommitCallbackRegistrar.add("Zoom.minus", boost::bind(&LLPanelCameraZoom::onZoomMinusHeldDown, this)); mCommitCallbackRegistrar.add("Zoom.plus", boost::bind(&LLPanelCameraZoom::onZoomPlusHeldDown, this)); mCommitCallbackRegistrar.add("Slider.value_changed", boost::bind(&LLPanelCameraZoom::onSliderValueChanged, this)); mCommitCallbackRegistrar.add("Camera.track", boost::bind(&LLPanelCameraZoom::onCameraTrack, this)); mCommitCallbackRegistrar.add("Camera.rotate", boost::bind(&LLPanelCameraZoom::onCameraRotate, this)); + mCommitCallbackRegistrar.add("Camera.roll_left", boost::bind(&LLPanelCameraZoom::onRollLeftHeldDown, this)); + mCommitCallbackRegistrar.add("Camera.roll_right", boost::bind(&LLPanelCameraZoom::onRollRightHeldDown, this)); } BOOL LLPanelCameraZoom::postBuild() @@ -178,6 +186,8 @@ BOOL LLPanelCameraZoom::postBuild() mPlusBtn = getChild <LLButton> ("zoom_plus_btn"); mMinusBtn = getChild <LLButton> ("zoom_minus_btn"); mSlider = getChild <LLSlider> ("zoom_slider"); + mRollLeft = getChild <LLButton> ("roll_left"); + mRollRight = getChild <LLButton> ("roll_right"); return LLPanel::postBuild(); } @@ -207,6 +217,20 @@ void LLPanelCameraZoom::onZoomMinusHeldDown() gAgentCamera.setOrbitOutKey(getOrbitRate(time)); } +void LLPanelCameraZoom::onRollLeftHeldDown() +{ + F32 time = mRollLeft->getHeldDownTime(); + gAgentCamera.unlockView(); + gAgentCamera.setRollLeftKey(getOrbitRate(time)); +} + +void LLPanelCameraZoom::onRollRightHeldDown() +{ + F32 time = mRollRight->getHeldDownTime(); + gAgentCamera.unlockView(); + gAgentCamera.setRollRightKey(getOrbitRate(time)); +} + void LLPanelCameraZoom::onCameraTrack() { // EXP-202 when camera panning activated, remove the hint diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 26d0e8deea4162902022a735c0f00a1f7011cbf2..34694803f0378462f4fec8dd81221acfd460ee4d 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -123,8 +123,38 @@ sound_flags="3" visible="true" tool_tip="Orbit camera around focus" - top="5" - width="78" /> + top="3" + width="78" /> + <button + follows="top|left" + height="18" + image_selected="VirtualTrackball_Rotate_Left_Active" + image_unselected="VirtualTrackball_Rotate_Left" + layout="topleft" + left_delta="0" + name="roll_left" + width="18" + top="66"> + <commit_callback + function="Camera.roll_left" /> + <mouse_held_callback + function="Camera.roll_left" /> + </button> + <button + follows="top|left" + height="18" + image_selected="VirtualTrackball_Rotate_Right_Active" + image_unselected="VirtualTrackball_Rotate_Right" + layout="topleft" + left_delta="60" + name="roll_right" + width="18" + top="66"> + <commit_callback + function="Camera.roll_right" /> + <mouse_held_callback + function="Camera.roll_right" /> + </button> <button follows="top|left" height="18" @@ -180,7 +210,7 @@ scale_image="false" sound_flags="3" tool_tip="Move camera up and down, left and right" - top="5" + top="3" width="78"/> </panel> </panel>