From b1c37cac7e371939333de2527656614abcdeaa85 Mon Sep 17 00:00:00 2001 From: chanayane Date: Wed, 26 Jun 2024 22:45:34 +0200 Subject: [PATCH 01/11] Add camera roll buttons to the Firestorm Camera floater. The code comes mostly unchanged from the Alchemy viewer source code which is released under the GNU Lesser General Public License. Signed-off-by: chanayane --- .../app_settings/settings_per_account.xml | 13 ++++ indra/newview/llagentcamera.cpp | 68 ++++++++++++++++++- indra/newview/llagentcamera.h | 20 ++++++ indra/newview/llfloatercamera.cpp | 30 ++++++++ .../skins/ansastorm/xui/en/floater_camera.xml | 30 ++++++++ .../skins/default/xui/en/floater_camera.xml | 30 ++++++++ .../xui/en/floater_fs_camera_small.xml | 30 ++++++++ 7 files changed, 220 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 728928da83..95e3c687dd 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -1072,6 +1072,19 @@ 0.0 + + ALStoredCameraRoll + + Comment + Stored camera roll in camera tools + Persist + 1 + Type + F32 + Value + 0.0 + + FSStoredCameraFocusObjectId Comment diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 3ce4ae4b74..25232842aa 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -189,7 +189,10 @@ LLAgentCamera::LLAgentCamera() : mPanRightKey(0.f), mPanInKey(0.f), mPanOutKey(0.f), - +// Camera roll (from Alchemy) + mRollLeftKey(0.f), + mRollRightKey(0.f), +// mPointAtObject(NULL) { mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT ); @@ -200,6 +203,9 @@ LLAgentCamera::LLAgentCamera() : resetPanDiff(); resetOrbitDiff(); +// Camera roll (from Alchemy) + resetCameraRoll(); +// } // Requires gSavedSettings to be initialized. @@ -381,6 +387,9 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera, BOOL moveme setFocusOnAvatar(TRUE, ANIMATE); mCameraFOVZoomFactor = 0.f; +// Camera roll (from Alchemy) + resetCameraRoll(); +// } resetPanDiff(); resetOrbitDiff(); @@ -937,6 +946,20 @@ void LLAgentCamera::cameraOrbitOver(const F32 angle) } } +// Camera roll (from Alchemy) +//----------------------------------------------------------------------------- +// cameraRollOver() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraRollOver(const F32 angle) +{ + mRollAngle += fmodf(angle, F_TWO_PI); +} + +void LLAgentCamera::resetCameraRoll() +{ + mRollAngle = 0.f; +} +// void LLAgentCamera::resetCameraOrbit() { LLVector3 camera_offset_unit(mCameraFocusOffsetTarget); @@ -950,6 +973,9 @@ void LLAgentCamera::resetCameraOrbit() cameraZoomIn(1.f); resetOrbitDiff(); +// Camera roll (from Alchemy) + resetCameraRoll(); +// } void LLAgentCamera::resetOrbitDiff() @@ -1356,6 +1382,9 @@ void LLAgentCamera::updateCamera() const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second const F32 PAN_RATE = 5.f; // meters per second +// Camera roll (from Alchemy) + const F32 ROLL_RATE = 45.f * DEG_TO_RAD; // radians per second +// if (gAgentCamera.getOrbitUpKey() || gAgentCamera.getOrbitDownKey()) { @@ -1397,6 +1426,14 @@ void LLAgentCamera::updateCamera() cameraPanUp(input_rate * PAN_RATE / gFPSClamped ); } +// Camera roll (from Alchemy) + if (getRollLeftKey() || getRollRightKey()) + { + F32 input_rate = getRollRightKey() - getRollLeftKey(); + cameraRollOver(input_rate * ROLL_RATE / gFPSClamped); + } +// + // Clear camera keyboard keys. gAgentCamera.clearOrbitKeys(); gAgentCamera.clearPanKeys(); @@ -1641,7 +1678,20 @@ void LLAgentCamera::updateCamera() torso_joint->setScale(torso_scale); chest_joint->setScale(chest_scale); } +// Camera roll (from Alchemy) + // We have do this at the very end to make sure it takes all previous calculations into + // account and then applies our roll on top of it, besides it wouldn't even work otherwise. + LLQuaternion rot_quat = LLViewerCamera::getInstance()->getQuaternion(); + LLMatrix3 rot_mat(mRollAngle, 0.f, 0.f); + rot_quat = LLQuaternion(rot_mat)*rot_quat; + + LLMatrix3 mat(rot_quat); + + LLViewerCamera::getInstance()->mXAxis = LLVector3(mat.mMatrix[0]); + LLViewerCamera::getInstance()->mYAxis = LLVector3(mat.mMatrix[1]); + LLViewerCamera::getInstance()->mZAxis = LLVector3(mat.mMatrix[2]); } +// void LLAgentCamera::updateLastCamera() { @@ -2756,6 +2806,9 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset) resetPanDiff(); resetOrbitDiff(); +// Camera roll (from Alchemy) + resetCameraRoll(); +// gSavedSettings.setU32("CameraPresetType", mCameraPreset); } @@ -3260,6 +3313,10 @@ void LLAgentCamera::clearOrbitKeys() mOrbitDownKey = 0.f; mOrbitInKey = 0.f; mOrbitOutKey = 0.f; +// Camera roll (from Alchemy) + mRollLeftKey = 0.f; + mRollRightKey = 0.f; +// } void LLAgentCamera::clearPanKeys() @@ -3290,6 +3347,9 @@ void LLAgentCamera::storeCameraPosition() // flycam mode and not repositioned after LLVector3d forward = LLVector3d(1.0, 0.0, 0.0) * LLViewerCamera::getInstance()->getQuaternion() + getCameraPositionGlobal(); gSavedPerAccountSettings.setVector3d("FSStoredCameraFocus", forward); +// Camera roll (from Alchemy) + gSavedPerAccountSettings.setF32("ALStoredCameraRoll", mRollAngle); +// LLUUID stored_camera_focus_object_id = LLUUID::null; if (mFocusObject) @@ -3303,6 +3363,9 @@ void LLAgentCamera::loadCameraPosition() { LLVector3d stored_camera_pos = gSavedPerAccountSettings.getVector3d("FSStoredCameraPos"); LLVector3d stored_camera_focus = gSavedPerAccountSettings.getVector3d("FSStoredCameraFocus"); +// Camera roll (from Alchemy) + F32 stored_camera_roll = gSavedPerAccountSettings.getF32("ALStoredCameraRoll"); +// LLUUID stored_camera_focus_object_id = LLUUID(gSavedPerAccountSettings.getString("FSStoredCameraFocusObjectId")); F32 renderFarClip = gSavedSettings.getF32("RenderFarClip"); @@ -3331,6 +3394,9 @@ void LLAgentCamera::loadCameraPosition() unlockView(); setCameraPosAndFocusGlobal(stored_camera_pos, stored_camera_focus, stored_camera_focus_object_id); +// Camera roll (from Alchemy) + mRollAngle = stored_camera_roll; +// } // FIRE-7758: Save/load camera position feature diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 6971e965f3..3e85652207 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -300,8 +300,14 @@ public: void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point +// Camera roll (from Alchemy) + void cameraRollOver(const F32 radians); // Roll the camera +// void resetCameraOrbit(); void resetOrbitDiff(); +// Camera roll (from Alchemy) + void resetCameraRoll(); +// //-------------------------------------------------------------------- // Zoom //-------------------------------------------------------------------- @@ -409,6 +415,10 @@ public: F32 getOrbitDownKey() const { return mOrbitDownKey; } F32 getOrbitInKey() const { return mOrbitInKey; } F32 getOrbitOutKey() const { return mOrbitOutKey; } +// Camera roll (from Alchemy) + F32 getRollLeftKey() const { return mRollLeftKey; } + F32 getRollRightKey() const { return mRollRightKey; } +// void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; } void setOrbitRightKey(F32 mag) { mOrbitRightKey = mag; } @@ -416,6 +426,10 @@ public: void setOrbitDownKey(F32 mag) { mOrbitDownKey = mag; } void setOrbitInKey(F32 mag) { mOrbitInKey = mag; } void setOrbitOutKey(F32 mag) { mOrbitOutKey = mag; } +// Camera roll (from Alchemy) + void setRollLeftKey(F32 mag) { mRollLeftKey = mag; } + void setRollRightKey(F32 mag) { mRollRightKey = mag; } +// void clearOrbitKeys(); private: @@ -429,6 +443,12 @@ private: F32 mOrbitAroundRadians; F32 mOrbitOverAngle; +// Camera roll (from Alchemy) + F32 mRollLeftKey; + F32 mRollRightKey; + F32 mRollAngle = 0.f; +// + //-------------------------------------------------------------------- // Pan //-------------------------------------------------------------------- diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index d8faedb3d9..278e1dffb9 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -88,11 +88,17 @@ protected: void onCameraTrack(); void onCameraRotate(); F32 getOrbitRate(F32 time); +// Camera roll (from Alchemy) + void onRollLeftHeldDown(); + void onRollRightHeldDown(); +// private: LLButton* mPlusBtn { nullptr }; LLButton* mMinusBtn{ nullptr }; LLSlider* mSlider{ nullptr }; + LLButton* mRollLeft{ nullptr }; + LLButton* mRollRight{ nullptr }; friend class LLUICtrlFactory; }; @@ -177,6 +183,10 @@ void LLPanelCameraZoom::onCreate() 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)); +// Camera roll (from Alchemy) + mCommitCallbackRegistrar.add("Camera.roll_left", boost::bind(&LLPanelCameraZoom::onRollLeftHeldDown, this)); + mCommitCallbackRegistrar.add("Camera.roll_right", boost::bind(&LLPanelCameraZoom::onRollRightHeldDown, this)); +// } BOOL LLPanelCameraZoom::postBuild() @@ -184,6 +194,10 @@ BOOL LLPanelCameraZoom::postBuild() mPlusBtn = getChild("zoom_plus_btn"); mMinusBtn = getChild("zoom_minus_btn"); mSlider = getChild("zoom_slider"); +// Camera roll (from Alchemy) + mRollLeft = getChild("roll_left"); + mRollRight = getChild("roll_right"); +// return LLPanel::postBuild(); } @@ -213,6 +227,22 @@ void LLPanelCameraZoom::onZoomMinusHeldDown() gAgentCamera.setOrbitOutKey(getOrbitRate(time)); } +// Camera roll (from Alchemy) +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/ansastorm/xui/en/floater_camera.xml b/indra/newview/skins/ansastorm/xui/en/floater_camera.xml index ec8fe13a0f..fede8909aa 100644 --- a/indra/newview/skins/ansastorm/xui/en/floater_camera.xml +++ b/indra/newview/skins/ansastorm/xui/en/floater_camera.xml @@ -71,6 +71,36 @@ tool_tip="Orbit camera around focus" top="25" width="78" /> + + + + + + + + + + Date: Wed, 10 Jul 2024 00:05:47 +0200 Subject: [PATCH 02/11] Raised the 512x512 limitation for uploading snapshots to inventory to 2048x2048 --- indra/newview/llagentbenefits.cpp | 19 +++++++++++++++++++ indra/newview/llagentbenefits.h | 3 +++ indra/newview/llfloatersnapshot.cpp | 5 ++++- indra/newview/llpanelsnapshot.cpp | 12 ++++++++++-- indra/newview/llpanelsnapshotinventory.cpp | 18 +++++++++++++++++- indra/newview/llpanelsnapshotoptions.cpp | 18 +++++++++++++++++- indra/newview/llsnapshotlivepreview.cpp | 10 ++++++++-- 7 files changed, 78 insertions(+), 7 deletions(-) diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp index d09faeb9e0..4c752485d5 100644 --- a/indra/newview/llagentbenefits.cpp +++ b/indra/newview/llagentbenefits.cpp @@ -267,6 +267,25 @@ S32 LLAgentBenefits::getTextureUploadCost(const LLImageBase* tex) const return getTextureUploadCost(); } +// 2048x2048 snapshots upload to inventory +S32 LLAgentBenefits::getTextureUploadCost(S32 w, S32 h) const +{ + if (w > 0 && h > 0) + { + S32 area = w * h; + if (area >= MIN_2K_TEXTURE_AREA) + { + return get2KTextureUploadCost(area); + } + else + { + return getTextureUploadCost(); + } + } + return getTextureUploadCost(); +} +// + S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const { if (m_2k_texture_upload_cost.empty()) diff --git a/indra/newview/llagentbenefits.h b/indra/newview/llagentbenefits.h index ff23241aa9..2e693798bf 100644 --- a/indra/newview/llagentbenefits.h +++ b/indra/newview/llagentbenefits.h @@ -54,6 +54,9 @@ public: S32 getTextureUploadCost() const; S32 getTextureUploadCost(const LLViewerTexture* tex) const; S32 getTextureUploadCost(const LLImageBase* tex) const; + // 2048x2048 snapshots upload to inventory + S32 getTextureUploadCost(S32 w, S32 h) const; + // S32 get2KTextureUploadCost(S32 area) const; bool findUploadCost(LLAssetType::EType& asset_type, S32& cost) const; diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 9d1288bd96..3b7ff6b907 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -58,7 +58,10 @@ LLSnapshotFloaterView* gSnapshotFloaterView = NULL; const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f; const S32 MAX_POSTCARD_DATASIZE = 1572864; // 1.5 megabyte, similar to simulator limit -const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +// 2048x2048 snapshots upload to inventory +//const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +const S32 MAX_TEXTURE_SIZE = 2048 ; //max upload texture size 2048 * 2048 +// 2048x2048 snapshots upload to inventory static LLDefaultChildRegistry::Register r("snapshot_floater_view"); diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp index 3664d755bb..495d3b6242 100644 --- a/indra/newview/llpanelsnapshot.cpp +++ b/indra/newview/llpanelsnapshot.cpp @@ -41,7 +41,10 @@ #include "llagentbenefits.h" -const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +// 2048x2048 snapshots upload to inventory +//const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +const S32 MAX_TEXTURE_SIZE = 2048 ; //max upload texture size 2048 * 2048 +// S32 power_of_two(S32 sz, S32 upper) { @@ -66,7 +69,12 @@ BOOL LLPanelSnapshot::postBuild() LLUICtrl* save_btn = findChild("save_btn"); if (save_btn) { - save_btn->setLabelArg("[UPLOAD_COST]", std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost())); + // 2048x2048 snapshots upload to inventory + //save_btn->setLabelArg("[UPLOAD_COST]", std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost())); + S32 w = getTypedPreviewWidth(); + S32 h = getTypedPreviewHeight(); + save_btn->setLabelArg("[UPLOAD_COST]", std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost(w, h))); + // } // getChild(getImageSizeComboName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onResolutionComboCommit, this, _1)); diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp index c2f40d051f..ce130922ed 100644 --- a/indra/newview/llpanelsnapshotinventory.cpp +++ b/indra/newview/llpanelsnapshotinventory.cpp @@ -187,7 +187,23 @@ LLPanelSnapshotInventory::~LLPanelSnapshotInventory() void LLPanelSnapshotInventoryBase::onSend() { - S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); + // 2048x2048 snapshots upload to inventory + //S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); + S32 w = 0; + S32 h = 0; + + if( mSnapshotFloater ) + { + LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView(); + if( preview ) + { + preview->getSize(w, h); + } + } + + S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(w, h); + // + if (can_afford_transaction(expected_upload_cost)) { if (mSnapshotFloater) diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp index 4c71ed91f8..d744dd3682 100644 --- a/indra/newview/llpanelsnapshotoptions.cpp +++ b/indra/newview/llpanelsnapshotoptions.cpp @@ -30,6 +30,7 @@ #include "llsidetraypanelcontainer.h" #include "llfloatersnapshot.h" // FIXME: create a snapshot model +#include "llsnapshotlivepreview.h" // 2048x2048 snapshots upload to inventory #include "llfloaterreg.h" #include "llfloaterflickr.h" // Share to Flickr @@ -92,7 +93,22 @@ void LLPanelSnapshotOptions::onOpen(const LLSD& key) void LLPanelSnapshotOptions::updateUploadCost() { - S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); + // 2048x2048 snapshots upload to inventory + //S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); + S32 w = 0; + S32 h = 0; + + if( mSnapshotFloater ) + { + LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView(); + if( preview ) + { + preview->getSize(w, h); + } + } + + S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(w, h); + // getChild("save_to_inventory_btn")->setLabelArg("[AMOUNT]", llformat("%d", upload_cost)); } diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index 1228715eb7..dee8f4504d 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -66,7 +66,10 @@ F32 FALL_TIME = 0.6f; S32 BORDER_WIDTH = 6; S32 TOP_PANEL_HEIGHT = 30; -const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +// 2048x2048 snapshots upload to inventory +//const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 +const S32 MAX_TEXTURE_SIZE = 2048 ; //max upload texture size 2048 * 2048 +// 2048x2048 snapshots upload to inventory std::set LLSnapshotLivePreview::sList; LLPointer LLSnapshotLivePreview::sSaveLocalImage = NULL; @@ -1131,7 +1134,10 @@ void LLSnapshotLivePreview::saveTexture(BOOL outfit_snapshot, std::string name) LLAgentUI::buildLocationString(pos_string, LLAgentUI::LOCATION_FORMAT_FULL); std::string who_took_it; LLAgentUI::buildFullname(who_took_it); - S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); + // 2048x2048 snapshots upload to inventory + //S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); + S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(scaled->getWidth(), scaled->getHeight()); + // std::string res_name = outfit_snapshot ? name : "Snapshot : " + pos_string; std::string res_desc = outfit_snapshot ? "" : "Taken by " + who_took_it + " at " + pos_string; LLFolderType::EType folder_type = outfit_snapshot ? LLFolderType::FT_NONE : LLFolderType::FT_SNAPSHOT_CATEGORY; From 66cac4b9057d5cd8039c345e210a1d0d39d440fe Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Tue, 16 Jul 2024 12:56:16 +0200 Subject: [PATCH 03/11] FIRE-34300 - Fix label not showing in texture picker floater title --- indra/newview/lltexturectrl.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 64dd442699..7927cddc70 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1814,6 +1814,7 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p) mFallbackImage(p.fallback_image), mTextEnabledColor(p.text_enabled_color), // Add label/caption colors mTextDisabledColor(p.text_disabled_color), // Add label/caption colors + mLabel(p.label), // FIRE-34300 - Fix label not showing in texture picker floater title // Mask texture if desired mIsMasked(FALSE) { From 351f6723d9abcc2bbf00d70e4e292b7a3f830ad7 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Wed, 17 Jul 2024 19:00:17 +0200 Subject: [PATCH 04/11] updated polish translation, camera roll --- indra/newview/skins/ansastorm/xui/pl/floater_camera.xml | 2 ++ indra/newview/skins/default/xui/pl/floater_camera.xml | 2 ++ indra/newview/skins/default/xui/pl/floater_fs_camera_small.xml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml b/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml index 9cd2a6e411..8e03199c8b 100644 --- a/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml +++ b/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml @@ -18,6 +18,8 @@ +