Merge branch 'release/2025.04' of https://github.com/secondlife/viewer
# Conflicts: # indra/llui/llfloater.h # indra/newview/llfloatersnapshot.h # indra/newview/llstatusbar.cpp # indra/newview/llviewerwindow.cpp # indra/newview/skins/default/xui/da/floater_about.xml # indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml # indra/newview/skins/default/xui/de/strings.xml # indra/newview/skins/default/xui/en/floater_snapshot.xml # indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml # indra/newview/skins/default/xui/en/panel_tools_texture.xml # indra/newview/skins/default/xui/es/strings.xml # indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml # indra/newview/skins/default/xui/fr/strings.xml # indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml # indra/newview/skins/default/xui/it/strings.xml # indra/newview/skins/default/xui/ja/panel_settings_water.xml # indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml # indra/newview/skins/default/xui/ja/strings.xml # indra/newview/skins/default/xui/pt/strings.xml # indra/newview/skins/default/xui/ru/strings.xml # indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml # indra/newview/skins/default/xui/zh/strings.xml # scripts/messages/message_template.msg # scripts/messages/message_template.msg.sha1master
commit
82b05f1063
|
|
@ -359,5 +359,7 @@ const U8 CLICK_ACTION_DISABLED = 8;
|
||||||
const U8 CLICK_ACTION_IGNORE = 9;
|
const U8 CLICK_ACTION_IGNORE = 9;
|
||||||
// DO NOT CHANGE THE SEQUENCE OF THIS LIST!!
|
// DO NOT CHANGE THE SEQUENCE OF THIS LIST!!
|
||||||
|
|
||||||
|
constexpr U32 BEACON_SHOW_MAP = 0x0001;
|
||||||
|
constexpr U32 BEACON_FOCUS_MAP = 0x0002;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -57,16 +57,16 @@ const U32 FLAGS_CAMERA_SOURCE = (1U << 22);
|
||||||
|
|
||||||
//const U32 FLAGS_UNUSED_001 = (1U << 23); // was FLAGS_CAST_SHADOWS
|
//const U32 FLAGS_UNUSED_001 = (1U << 23); // was FLAGS_CAST_SHADOWS
|
||||||
|
|
||||||
//const U32 FLAGS_UNUSED_002 = (1U << 24);
|
const U32 FLAGS_SERVER_AUTOPILOT = (1U << 24); // Update was for an agent AND that agent is being autopiloted from the server
|
||||||
//const U32 FLAGS_UNUSED_003 = (1U << 25);
|
//const U32 FLAGS_UNUSED_002 = (1U << 25);
|
||||||
//const U32 FLAGS_UNUSED_004 = (1U << 26);
|
//const U32 FLAGS_UNUSED_003 = (1U << 26);
|
||||||
//const U32 FLAGS_UNUSED_005 = (1U << 27);
|
//const U32 FLAGS_UNUSED_004 = (1U << 27);
|
||||||
|
|
||||||
const U32 FLAGS_OBJECT_OWNER_MODIFY = (1U << 28);
|
const U32 FLAGS_OBJECT_OWNER_MODIFY = (1U << 28);
|
||||||
|
|
||||||
const U32 FLAGS_TEMPORARY_ON_REZ = (1U << 29);
|
const U32 FLAGS_TEMPORARY_ON_REZ = (1U << 29);
|
||||||
//const U32 FLAGS_UNUSED_006 = (1U << 30); // was FLAGS_TEMPORARY
|
//const U32 FLAGS_UNUSED_005 = (1U << 30); // was FLAGS_TEMPORARY
|
||||||
//const U32 FLAGS_UNUSED_007 = (1U << 31); // was FLAGS_ZLIB_COMPRESSED
|
//const U32 FLAGS_UNUSED_006 = (1U << 31); // was FLAGS_ZLIB_COMPRESSED
|
||||||
|
|
||||||
const U32 FLAGS_LOCAL = FLAGS_ANIM_SOURCE | FLAGS_CAMERA_SOURCE;
|
const U32 FLAGS_LOCAL = FLAGS_ANIM_SOURCE | FLAGS_CAMERA_SOURCE;
|
||||||
const U32 FLAGS_WORLD = FLAGS_USE_PHYSICS | FLAGS_PHANTOM | FLAGS_TEMPORARY_ON_REZ;
|
const U32 FLAGS_WORLD = FLAGS_USE_PHYSICS | FLAGS_PHANTOM | FLAGS_TEMPORARY_ON_REZ;
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@ void LLEmojiHelper::showHelper(LLUICtrl* hostctrl_p, S32 local_x, S32 local_y, c
|
||||||
// </FS:Beq>
|
// </FS:Beq>
|
||||||
mHelperHandle = pHelperFloater->getHandle();
|
mHelperHandle = pHelperFloater->getHandle();
|
||||||
mHelperCommitConn = pHelperFloater->setCommitCallback(std::bind([&](const LLSD& sdValue) { onCommitEmoji(utf8str_to_wstring(sdValue.asStringRef())[0]); }, std::placeholders::_2));
|
mHelperCommitConn = pHelperFloater->setCommitCallback(std::bind([&](const LLSD& sdValue) { onCommitEmoji(utf8str_to_wstring(sdValue.asStringRef())[0]); }, std::placeholders::_2));
|
||||||
|
mHelperCloseConn = pHelperFloater->setCloseCallback([this](LLUICtrl* ctrl, const LLSD& param) { onCloseHelper(ctrl, param); });
|
||||||
}
|
}
|
||||||
setHostCtrl(hostctrl_p);
|
setHostCtrl(hostctrl_p);
|
||||||
mEmojiCommitCb = cb;
|
mEmojiCommitCb = cb;
|
||||||
|
|
@ -170,6 +171,16 @@ void LLEmojiHelper::onCommitEmoji(llwchar emoji)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLEmojiHelper::onCloseHelper(LLUICtrl* ctrl, const LLSD& param)
|
||||||
|
{
|
||||||
|
mCloseSignal(ctrl, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::signals2::connection LLEmojiHelper::setCloseCallback(const commit_signal_t::slot_type& cb)
|
||||||
|
{
|
||||||
|
return mCloseSignal.connect(cb);
|
||||||
|
}
|
||||||
|
|
||||||
void LLEmojiHelper::setHostCtrl(LLUICtrl* hostctrl_p)
|
void LLEmojiHelper::setHostCtrl(LLUICtrl* hostctrl_p)
|
||||||
{
|
{
|
||||||
const LLUICtrl* pCurHostCtrl = mHostHandle.get();
|
const LLUICtrl* pCurHostCtrl = mHostHandle.get();
|
||||||
|
|
|
||||||
|
|
@ -51,16 +51,23 @@ public:
|
||||||
// Eventing
|
// Eventing
|
||||||
bool handleKey(const LLUICtrl* ctrl_p, KEY key, MASK mask);
|
bool handleKey(const LLUICtrl* ctrl_p, KEY key, MASK mask);
|
||||||
void onCommitEmoji(llwchar emoji);
|
void onCommitEmoji(llwchar emoji);
|
||||||
|
void onCloseHelper(LLUICtrl* ctrl, const LLSD& param);
|
||||||
|
|
||||||
|
typedef boost::signals2::signal<void(LLUICtrl* ctrl, const LLSD& param)> commit_signal_t;
|
||||||
|
boost::signals2::connection setCloseCallback(const commit_signal_t::slot_type& cb);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LLUICtrl* getHostCtrl() const { return mHostHandle.get(); }
|
LLUICtrl* getHostCtrl() const { return mHostHandle.get(); }
|
||||||
void setHostCtrl(LLUICtrl* hostctrl_p);
|
void setHostCtrl(LLUICtrl* hostctrl_p);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
commit_signal_t mCloseSignal;
|
||||||
|
|
||||||
LLHandle<LLUICtrl> mHostHandle;
|
LLHandle<LLUICtrl> mHostHandle;
|
||||||
LLHandle<LLFloater> mHelperHandle;
|
LLHandle<LLFloater> mHelperHandle;
|
||||||
boost::signals2::connection mHostCtrlFocusLostConn;
|
boost::signals2::connection mHostCtrlFocusLostConn;
|
||||||
boost::signals2::connection mHelperCommitConn;
|
boost::signals2::connection mHelperCommitConn;
|
||||||
|
boost::signals2::connection mHelperCloseConn;
|
||||||
std::function<void(llwchar)> mEmojiCommitCb;
|
std::function<void(llwchar)> mEmojiCommitCb;
|
||||||
bool mIsHideDisabled;
|
bool mIsHideDisabled;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -394,6 +394,9 @@ public:
|
||||||
|
|
||||||
bool isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mPositioning); }
|
bool isPositioning(LLFloaterEnums::EOpenPositioning p) const { return (p == mPositioning); }
|
||||||
|
|
||||||
|
void setAutoFocus(bool focus) { mAutoFocus = focus; } // whether to automatically take focus when opened
|
||||||
|
bool getAutoFocus() const { return mAutoFocus; }
|
||||||
|
|
||||||
// <COLOSI opensim multi-currency support>
|
// <COLOSI opensim multi-currency support>
|
||||||
// update currency symbols in titles (if there) and force update of display
|
// update currency symbols in titles (if there) and force update of display
|
||||||
void updateCurrencySymbols() { mTitle.updateCurrencySymbols(); mShortTitle.updateCurrencySymbols(); applyTitle(); }
|
void updateCurrencySymbols() { mTitle.updateCurrencySymbols(); mShortTitle.updateCurrencySymbols(); applyTitle(); }
|
||||||
|
|
@ -422,8 +425,6 @@ protected:
|
||||||
void setExpandedRect(const LLRect& rect) { mExpandedRect = rect; } // size when not minimized
|
void setExpandedRect(const LLRect& rect) { mExpandedRect = rect; } // size when not minimized
|
||||||
const LLRect& getExpandedRect() const { return mExpandedRect; }
|
const LLRect& getExpandedRect() const { return mExpandedRect; }
|
||||||
|
|
||||||
void setAutoFocus(bool focus) { mAutoFocus = focus; } // whether to automatically take focus when opened
|
|
||||||
bool getAutoFocus() const { return mAutoFocus; }
|
|
||||||
LLDragHandle* getDragHandle() const { return mDragHandle; }
|
LLDragHandle* getDragHandle() const { return mDragHandle; }
|
||||||
|
|
||||||
void destroy(); // Don't call this directly. You probably want to call closeFloater()
|
void destroy(); // Don't call this directly. You probably want to call closeFloater()
|
||||||
|
|
|
||||||
|
|
@ -1316,6 +1316,14 @@ void LLTextEditor::showEmojiHelper()
|
||||||
LLEmojiHelper::instance().showHelper(this, cursorRect.mLeft, cursorRect.mTop, LLStringUtil::null, cb);
|
LLEmojiHelper::instance().showHelper(this, cursorRect.mLeft, cursorRect.mTop, LLStringUtil::null, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLTextEditor::hideEmojiHelper()
|
||||||
|
{
|
||||||
|
if (mShowEmojiHelper)
|
||||||
|
{
|
||||||
|
LLEmojiHelper::instance().hideHelper(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LLTextEditor::tryToShowEmojiHelper()
|
void LLTextEditor::tryToShowEmojiHelper()
|
||||||
{
|
{
|
||||||
if (mReadOnly || !mShowEmojiHelper)
|
if (mReadOnly || !mShowEmojiHelper)
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,7 @@ public:
|
||||||
bool getShowContextMenu() const { return mShowContextMenu; }
|
bool getShowContextMenu() const { return mShowContextMenu; }
|
||||||
|
|
||||||
void showEmojiHelper();
|
void showEmojiHelper();
|
||||||
|
void hideEmojiHelper();
|
||||||
void setShowEmojiHelper(bool show);
|
void setShowEmojiHelper(bool show);
|
||||||
bool getShowEmojiHelper() const { return mShowEmojiHelper; }
|
bool getShowEmojiHelper() const { return mShowEmojiHelper; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,16 @@ bool LLUrlEntryBase::isWikiLinkCorrect(const std::string &labeled_url) const
|
||||||
},
|
},
|
||||||
L'\u002F'); // Solidus
|
L'\u002F'); // Solidus
|
||||||
|
|
||||||
|
std::replace_if(wlabel.begin(),
|
||||||
|
wlabel.end(),
|
||||||
|
[](const llwchar& chr)
|
||||||
|
{
|
||||||
|
return // Not a decomposition, but suficiently similar
|
||||||
|
(chr == L'\u04BA') // "Cyrillic Capital Letter Shha"
|
||||||
|
|| (chr == L'\u04BB'); // "Cyrillic Small Letter Shha"
|
||||||
|
},
|
||||||
|
L'\u0068'); // "Latin Small Letter H"
|
||||||
|
|
||||||
std::string label = wstring_to_utf8str(wlabel);
|
std::string label = wstring_to_utf8str(wlabel);
|
||||||
if ((label.find(".com") != std::string::npos
|
if ((label.find(".com") != std::string::npos
|
||||||
|| label.find("www.") != std::string::npos)
|
|| label.find("www.") != std::string::npos)
|
||||||
|
|
|
||||||
|
|
@ -13128,6 +13128,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
|
<key>RenderBalanceInSnapshot</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Display L$ balance in snapshot</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
<key>RenderUIBuffer</key>
|
<key>RenderUIBuffer</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
|
@ -23812,17 +23823,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
<!-- <FS_Zi> Add avatar hitbox debug -->
|
<!-- <FS_Zi> Add avatar hitbox debug -->
|
||||||
<key>FSShowCurrencyBalanceInSnapshots</key>
|
|
||||||
<map>
|
|
||||||
<key>Comment</key>
|
|
||||||
<string>Show your currency balance in snapshots</string>
|
|
||||||
<key>Persist</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
<key>Type</key>
|
|
||||||
<string>Boolean</string>
|
|
||||||
<key>Value</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</map>
|
|
||||||
<key>DAEExportConsolidateMaterials</key>
|
<key>DAEExportConsolidateMaterials</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
|
|
||||||
|
|
@ -5415,6 +5415,7 @@ void LLAppViewer::saveFinalSnapshot()
|
||||||
false,
|
false,
|
||||||
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
|
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
||||||
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
|
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
|
||||||
mSavedFinalSnapshot = true;
|
mSavedFinalSnapshot = true;
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@
|
||||||
#include "llchicletbar.h"
|
#include "llchicletbar.h"
|
||||||
#include "lldraghandle.h"
|
#include "lldraghandle.h"
|
||||||
#include "llemojidictionary.h"
|
#include "llemojidictionary.h"
|
||||||
|
#include "llemojihelper.h"
|
||||||
#include "llfloaterreg.h"
|
#include "llfloaterreg.h"
|
||||||
#include "llfloateremojipicker.h"
|
#include "llfloateremojipicker.h"
|
||||||
#include "llfloaterimsession.h"
|
#include "llfloaterimsession.h"
|
||||||
|
|
@ -302,6 +303,8 @@ bool LLFloaterIMSessionTab::postBuild()
|
||||||
|
|
||||||
mEmojiPickerShowBtn = getChild<LLButton>("emoji_picker_show_btn");
|
mEmojiPickerShowBtn = getChild<LLButton>("emoji_picker_show_btn");
|
||||||
mEmojiPickerShowBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnClicked(); });
|
mEmojiPickerShowBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnClicked(); });
|
||||||
|
mEmojiPickerShowBtn->setMouseDownCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerShowBtnDown(); });
|
||||||
|
mEmojiCloseConn = LLEmojiHelper::instance().setCloseCallback([this](LLUICtrl*, const LLSD&) { onEmojiPickerClosed(); });
|
||||||
|
|
||||||
mGearBtn = getChild<LLButton>("gear_btn");
|
mGearBtn = getChild<LLButton>("gear_btn");
|
||||||
mAddBtn = getChild<LLButton>("add_btn");
|
mAddBtn = getChild<LLButton>("add_btn");
|
||||||
|
|
@ -534,8 +537,43 @@ void LLFloaterIMSessionTab::onEmojiRecentPanelToggleBtnClicked()
|
||||||
|
|
||||||
void LLFloaterIMSessionTab::onEmojiPickerShowBtnClicked()
|
void LLFloaterIMSessionTab::onEmojiPickerShowBtnClicked()
|
||||||
{
|
{
|
||||||
mInputEditor->setFocus(true);
|
if (!mEmojiPickerShowBtn->getToggleState())
|
||||||
mInputEditor->showEmojiHelper();
|
{
|
||||||
|
mInputEditor->hideEmojiHelper();
|
||||||
|
mInputEditor->setFocus(true);
|
||||||
|
mInputEditor->showEmojiHelper();
|
||||||
|
mEmojiPickerShowBtn->setToggleState(true); // in case hideEmojiHelper closed a visible instance
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mInputEditor->hideEmojiHelper();
|
||||||
|
mEmojiPickerShowBtn->setToggleState(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLFloaterIMSessionTab::onEmojiPickerShowBtnDown()
|
||||||
|
{
|
||||||
|
if (mEmojiHelperLastCallbackFrame == LLFrameTimer::getFrameCount())
|
||||||
|
{
|
||||||
|
// Helper gets closed by focus lost event on Down before before onEmojiPickerShowBtnDown
|
||||||
|
// triggers.
|
||||||
|
// If this condition is true, user pressed button and it was 'toggled' during press,
|
||||||
|
// restore 'toggled' state so that button will not reopen helper.
|
||||||
|
mEmojiPickerShowBtn->setToggleState(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLFloaterIMSessionTab::onEmojiPickerClosed()
|
||||||
|
{
|
||||||
|
if (mEmojiPickerShowBtn->getToggleState())
|
||||||
|
{
|
||||||
|
mEmojiPickerShowBtn->setToggleState(false);
|
||||||
|
// Helper gets closed by focus lost event on Down before onEmojiPickerShowBtnDown
|
||||||
|
// triggers. If mEmojiHelperLastCallbackFrame is set and matches Down, means close
|
||||||
|
// was triggered by user's press.
|
||||||
|
// A bit hacky, but I can't think of a better way to handle this without rewriting helper.
|
||||||
|
mEmojiHelperLastCallbackFrame = LLFrameTimer::getFrameCount();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterIMSessionTab::initEmojiRecentPanel()
|
void LLFloaterIMSessionTab::initEmojiRecentPanel()
|
||||||
|
|
|
||||||
|
|
@ -237,6 +237,8 @@ private:
|
||||||
|
|
||||||
void onEmojiRecentPanelToggleBtnClicked();
|
void onEmojiRecentPanelToggleBtnClicked();
|
||||||
void onEmojiPickerShowBtnClicked();
|
void onEmojiPickerShowBtnClicked();
|
||||||
|
void onEmojiPickerShowBtnDown();
|
||||||
|
void onEmojiPickerClosed();
|
||||||
void initEmojiRecentPanel();
|
void initEmojiRecentPanel();
|
||||||
void onEmojiRecentPanelFocusReceived();
|
void onEmojiRecentPanelFocusReceived();
|
||||||
void onEmojiRecentPanelFocusLost();
|
void onEmojiRecentPanelFocusLost();
|
||||||
|
|
@ -251,6 +253,9 @@ private:
|
||||||
S32 mInputEditorPad;
|
S32 mInputEditorPad;
|
||||||
S32 mChatLayoutPanelHeight;
|
S32 mChatLayoutPanelHeight;
|
||||||
S32 mFloaterHeight;
|
S32 mFloaterHeight;
|
||||||
|
|
||||||
|
boost::signals2::connection mEmojiCloseConn;
|
||||||
|
U32 mEmojiHelperLastCallbackFrame = { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,12 +67,13 @@ LLPanelSnapshot* LLFloaterSnapshot::Impl::getActivePanel(LLFloaterSnapshotBase*
|
||||||
{
|
{
|
||||||
LLSideTrayPanelContainer* panel_container = floater->getChild<LLSideTrayPanelContainer>("panel_container");
|
LLSideTrayPanelContainer* panel_container = floater->getChild<LLSideTrayPanelContainer>("panel_container");
|
||||||
LLPanelSnapshot* active_panel = dynamic_cast<LLPanelSnapshot*>(panel_container->getCurrentPanel());
|
LLPanelSnapshot* active_panel = dynamic_cast<LLPanelSnapshot*>(panel_container->getCurrentPanel());
|
||||||
if (!active_panel)
|
|
||||||
{
|
|
||||||
LL_WARNS() << "No snapshot active panel, current panel index: " << panel_container->getCurrentPanelIndex() << LL_ENDL;
|
|
||||||
}
|
|
||||||
if (!ok_if_not_found)
|
if (!ok_if_not_found)
|
||||||
{
|
{
|
||||||
|
if (!active_panel)
|
||||||
|
{
|
||||||
|
LL_WARNS() << "No snapshot active panel, current panel index: " << panel_container->getCurrentPanelIndex() << LL_ENDL;
|
||||||
|
}
|
||||||
llassert_always(active_panel != NULL);
|
llassert_always(active_panel != NULL);
|
||||||
}
|
}
|
||||||
return active_panel;
|
return active_panel;
|
||||||
|
|
@ -605,34 +606,13 @@ void LLFloaterSnapshotBase::ImplBase::onClickFilter(LLUICtrl *ctrl, void* data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLFloaterSnapshotBase::ImplBase::onClickUICheck(LLUICtrl *ctrl, void* data)
|
void LLFloaterSnapshotBase::ImplBase::onClickDisplaySetting(LLUICtrl* ctrl, void* data)
|
||||||
{
|
{
|
||||||
LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
|
LLFloaterSnapshot* view = (LLFloaterSnapshot*)data;
|
||||||
gSavedSettings.setBOOL( "RenderUIInSnapshot", check->get() );
|
|
||||||
|
|
||||||
LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
|
|
||||||
if (view)
|
if (view)
|
||||||
{
|
{
|
||||||
LLSnapshotLivePreview* previewp = view->getPreviewView();
|
LLSnapshotLivePreview* previewp = view->getPreviewView();
|
||||||
if(previewp)
|
if (previewp)
|
||||||
{
|
|
||||||
previewp->updateSnapshot(true, true);
|
|
||||||
}
|
|
||||||
view->impl->updateControls(view);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
void LLFloaterSnapshotBase::ImplBase::onClickHUDCheck(LLUICtrl *ctrl, void* data)
|
|
||||||
{
|
|
||||||
LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
|
|
||||||
gSavedSettings.setBOOL( "RenderHUDInSnapshot", check->get() );
|
|
||||||
|
|
||||||
LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
|
|
||||||
if (view)
|
|
||||||
{
|
|
||||||
LLSnapshotLivePreview* previewp = view->getPreviewView();
|
|
||||||
if(previewp)
|
|
||||||
{
|
{
|
||||||
previewp->updateSnapshot(true, true);
|
previewp->updateSnapshot(true, true);
|
||||||
}
|
}
|
||||||
|
|
@ -1139,11 +1119,9 @@ bool LLFloaterSnapshot::postBuild()
|
||||||
mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel");
|
mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel");
|
||||||
mFailureLblPanel = getChild<LLUICtrl>("failed_panel");
|
mFailureLblPanel = getChild<LLUICtrl>("failed_panel");
|
||||||
|
|
||||||
childSetCommitCallback("ui_check", ImplBase::onClickUICheck, this);
|
childSetCommitCallback("ui_check", ImplBase::onClickDisplaySetting, this);
|
||||||
getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot"));
|
childSetCommitCallback("balance_check", ImplBase::onClickDisplaySetting, this);
|
||||||
|
childSetCommitCallback("hud_check", ImplBase::onClickDisplaySetting, this);
|
||||||
childSetCommitCallback("hud_check", ImplBase::onClickHUDCheck, this);
|
|
||||||
getChild<LLUICtrl>("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot"));
|
|
||||||
|
|
||||||
// <FS:Ansariel> FIRE-15853: HUDs, interface or L$ balance checkbox don't update actual screenshot image
|
// <FS:Ansariel> FIRE-15853: HUDs, interface or L$ balance checkbox don't update actual screenshot image
|
||||||
childSetCommitCallback("currency_check", ImplBase::onClickCurrencyCheck, this);
|
childSetCommitCallback("currency_check", ImplBase::onClickCurrencyCheck, this);
|
||||||
|
|
|
||||||
|
|
@ -104,8 +104,7 @@ public:
|
||||||
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
|
static void onClickAutoSnap(LLUICtrl *ctrl, void* data);
|
||||||
static void onClickNoPost(LLUICtrl *ctrl, void* data);
|
static void onClickNoPost(LLUICtrl *ctrl, void* data);
|
||||||
static void onClickFilter(LLUICtrl *ctrl, void* data);
|
static void onClickFilter(LLUICtrl *ctrl, void* data);
|
||||||
static void onClickUICheck(LLUICtrl *ctrl, void* data);
|
static void onClickDisplaySetting(LLUICtrl *ctrl, void* data);
|
||||||
static void onClickHUDCheck(LLUICtrl *ctrl, void* data);
|
|
||||||
// <FS:Ansariel> FIRE-15853: HUDs, interface or L$ balance checkbox don't update actual screenshot image
|
// <FS:Ansariel> FIRE-15853: HUDs, interface or L$ balance checkbox don't update actual screenshot image
|
||||||
static void onClickCurrencyCheck(LLUICtrl *ctrl, void* data);
|
static void onClickCurrencyCheck(LLUICtrl *ctrl, void* data);
|
||||||
static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);
|
static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);
|
||||||
|
|
|
||||||
|
|
@ -504,8 +504,11 @@ void LLFloaterWorldMap::onOpen(const LLSD& key)
|
||||||
const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
|
const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
|
||||||
LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id);
|
LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id);
|
||||||
|
|
||||||
mLocationEditor->setFocus( true);
|
if (hasFocus())
|
||||||
gFocusMgr.triggerFocusFlash();
|
{
|
||||||
|
mLocationEditor->setFocus( true);
|
||||||
|
gFocusMgr.triggerFocusFlash();
|
||||||
|
}
|
||||||
|
|
||||||
buildAvatarIDList();
|
buildAvatarIDList();
|
||||||
buildLandmarkIDLists();
|
buildLandmarkIDLists();
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@
|
||||||
/* image compression headers. */
|
/* image compression headers. */
|
||||||
#include "llimagebmp.h"
|
#include "llimagebmp.h"
|
||||||
#include "llimagetga.h"
|
#include "llimagetga.h"
|
||||||
|
#include "llimagej2c.h"
|
||||||
#include "llimagejpeg.h"
|
#include "llimagejpeg.h"
|
||||||
#include "llimagepng.h"
|
#include "llimagepng.h"
|
||||||
|
|
||||||
|
|
@ -106,6 +107,10 @@ LLLocalBitmap::LLLocalBitmap(std::string filename)
|
||||||
{
|
{
|
||||||
mExtension = ET_IMG_JPG;
|
mExtension = ET_IMG_JPG;
|
||||||
}
|
}
|
||||||
|
else if (temp_exten == "j2c" || temp_exten == "jp2")
|
||||||
|
{
|
||||||
|
mExtension = ET_IMG_J2C;
|
||||||
|
}
|
||||||
else if (temp_exten == "png")
|
else if (temp_exten == "png")
|
||||||
{
|
{
|
||||||
mExtension = ET_IMG_PNG;
|
mExtension = ET_IMG_PNG;
|
||||||
|
|
@ -356,6 +361,21 @@ bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ET_IMG_J2C:
|
||||||
|
{
|
||||||
|
LLPointer<LLImageJ2C> jpeg_image = new LLImageJ2C;
|
||||||
|
if (jpeg_image->load(mFilename))
|
||||||
|
{
|
||||||
|
jpeg_image->setDiscardLevel(0);
|
||||||
|
if (jpeg_image->decode(rawimg, 0.0f))
|
||||||
|
{
|
||||||
|
rawimg->biasedScaleToPowerOfTwo(LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT);
|
||||||
|
decode_successful = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case ET_IMG_PNG:
|
case ET_IMG_PNG:
|
||||||
{
|
{
|
||||||
LLPointer<LLImagePNG> png_image = new LLImagePNG;
|
LLPointer<LLImagePNG> png_image = new LLImagePNG;
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ class LLLocalBitmap
|
||||||
ET_IMG_BMP,
|
ET_IMG_BMP,
|
||||||
ET_IMG_TGA,
|
ET_IMG_TGA,
|
||||||
ET_IMG_JPG,
|
ET_IMG_JPG,
|
||||||
|
ET_IMG_J2C,
|
||||||
ET_IMG_PNG
|
ET_IMG_PNG
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3291,6 +3291,8 @@ void LLSelectMgr::adjustTexturesByScale(bool send_to_sim, bool stretch)
|
||||||
|
|
||||||
F32 scale_x = 1;
|
F32 scale_x = 1;
|
||||||
F32 scale_y = 1;
|
F32 scale_y = 1;
|
||||||
|
F32 offset_x = 0;
|
||||||
|
F32 offset_y = 0;
|
||||||
|
|
||||||
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
|
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
|
||||||
{
|
{
|
||||||
|
|
@ -3307,6 +3309,21 @@ void LLSelectMgr::adjustTexturesByScale(bool send_to_sim, bool stretch)
|
||||||
scale_y = scale_ratio.mV[t_axis] * object_scale.mV[t_axis];
|
scale_y = scale_ratio.mV[t_axis] * object_scale.mV[t_axis];
|
||||||
}
|
}
|
||||||
material->mTextureTransform[i].mScale.set(scale_x, scale_y);
|
material->mTextureTransform[i].mScale.set(scale_x, scale_y);
|
||||||
|
|
||||||
|
LLVector2 scales = selectNode->mGLTFScales[te_num][i];
|
||||||
|
LLVector2 offsets = selectNode->mGLTFOffsets[te_num][i];
|
||||||
|
F64 int_part = 0;
|
||||||
|
offset_x = (F32)modf((offsets[VX] + (scales[VX] - scale_x)) / 2, &int_part);
|
||||||
|
if (offset_x < 0)
|
||||||
|
{
|
||||||
|
offset_x++;
|
||||||
|
}
|
||||||
|
offset_y = (F32)modf((offsets[VY] + (scales[VY] - scale_y)) / 2, &int_part);
|
||||||
|
if (offset_y < 0)
|
||||||
|
{
|
||||||
|
offset_y++;
|
||||||
|
}
|
||||||
|
material->mTextureTransform[i].mOffset.set(offset_x, offset_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
const LLGLTFMaterial* base_material = tep->getGLTFMaterial();
|
const LLGLTFMaterial* base_material = tep->getGLTFMaterial();
|
||||||
|
|
@ -7172,6 +7189,8 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
|
||||||
{
|
{
|
||||||
mTextureScaleRatios.clear();
|
mTextureScaleRatios.clear();
|
||||||
mGLTFScaleRatios.clear();
|
mGLTFScaleRatios.clear();
|
||||||
|
mGLTFScales.clear();
|
||||||
|
mGLTFOffsets.clear();
|
||||||
|
|
||||||
if (mObject.notNull())
|
if (mObject.notNull())
|
||||||
{
|
{
|
||||||
|
|
@ -7212,6 +7231,8 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
|
||||||
F32 scale_x = 1;
|
F32 scale_x = 1;
|
||||||
F32 scale_y = 1;
|
F32 scale_y = 1;
|
||||||
std::vector<LLVector3> material_v_vec;
|
std::vector<LLVector3> material_v_vec;
|
||||||
|
std::vector<LLVector2> material_scales_vec;
|
||||||
|
std::vector<LLVector2> material_offset_vec;
|
||||||
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
|
for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
|
||||||
{
|
{
|
||||||
if (material)
|
if (material)
|
||||||
|
|
@ -7219,12 +7240,16 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
|
||||||
LLGLTFMaterial::TextureTransform& transform = material->mTextureTransform[i];
|
LLGLTFMaterial::TextureTransform& transform = material->mTextureTransform[i];
|
||||||
scale_x = transform.mScale[VX];
|
scale_x = transform.mScale[VX];
|
||||||
scale_y = transform.mScale[VY];
|
scale_y = transform.mScale[VY];
|
||||||
|
material_scales_vec.push_back(transform.mScale);
|
||||||
|
material_offset_vec.push_back(transform.mOffset);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Not having an override doesn't mean that there is no material
|
// Not having an override doesn't mean that there is no material
|
||||||
scale_x = 1;
|
scale_x = 1;
|
||||||
scale_y = 1;
|
scale_y = 1;
|
||||||
|
material_scales_vec.emplace_back(scale_x, scale_y);
|
||||||
|
material_offset_vec.emplace_back(0.f, 0.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR)
|
if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR)
|
||||||
|
|
@ -7240,6 +7265,8 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
|
||||||
material_v_vec.push_back(material_v);
|
material_v_vec.push_back(material_v);
|
||||||
}
|
}
|
||||||
mGLTFScaleRatios.push_back(material_v_vec);
|
mGLTFScaleRatios.push_back(material_v_vec);
|
||||||
|
mGLTFScales.push_back(material_scales_vec);
|
||||||
|
mGLTFOffsets.push_back(material_offset_vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,8 @@ public:
|
||||||
gltf_materials_vec_t mSavedGLTFOverrideMaterials;
|
gltf_materials_vec_t mSavedGLTFOverrideMaterials;
|
||||||
std::vector<LLVector3> mTextureScaleRatios;
|
std::vector<LLVector3> mTextureScaleRatios;
|
||||||
std::vector< std::vector<LLVector3> > mGLTFScaleRatios;
|
std::vector< std::vector<LLVector3> > mGLTFScaleRatios;
|
||||||
|
std::vector< std::vector<LLVector2> > mGLTFScales;
|
||||||
|
std::vector< std::vector<LLVector2> > mGLTFOffsets;
|
||||||
std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object
|
std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object
|
||||||
std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object
|
std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object
|
||||||
bool mSilhouetteExists; // need to generate silhouette?
|
bool mSilhouetteExists; // need to generate silhouette?
|
||||||
|
|
|
||||||
|
|
@ -731,6 +731,7 @@ bool LLSnapshotLivePreview::onIdle( void* snapshot_preview )
|
||||||
static LLCachedControl<bool> freeze_time(gSavedSettings, "FreezeTime", false);
|
static LLCachedControl<bool> freeze_time(gSavedSettings, "FreezeTime", false);
|
||||||
static LLCachedControl<bool> use_freeze_frame(gSavedSettings, "UseFreezeFrame", false);
|
static LLCachedControl<bool> use_freeze_frame(gSavedSettings, "UseFreezeFrame", false);
|
||||||
static LLCachedControl<bool> render_ui(gSavedSettings, "RenderUIInSnapshot", false);
|
static LLCachedControl<bool> render_ui(gSavedSettings, "RenderUIInSnapshot", false);
|
||||||
|
static LLCachedControl<bool> render_balance(gSavedSettings, "RenderBalanceInSnapshot", false);
|
||||||
static LLCachedControl<bool> render_hud(gSavedSettings, "RenderHUDInSnapshot", false);
|
static LLCachedControl<bool> render_hud(gSavedSettings, "RenderHUDInSnapshot", false);
|
||||||
static LLCachedControl<bool> render_no_post(gSavedSettings, "RenderSnapshotNoPost", false);
|
static LLCachedControl<bool> render_no_post(gSavedSettings, "RenderSnapshotNoPost", false);
|
||||||
|
|
||||||
|
|
@ -787,6 +788,7 @@ bool LLSnapshotLivePreview::onIdle( void* snapshot_preview )
|
||||||
render_hud,
|
render_hud,
|
||||||
false,
|
false,
|
||||||
render_no_post,
|
render_no_post,
|
||||||
|
render_balance,
|
||||||
previewp->mSnapshotBufferType,
|
previewp->mSnapshotBufferType,
|
||||||
previewp->getMaxImageSize()))
|
previewp->getMaxImageSize()))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1291,14 +1291,13 @@ void LLStatusBar::updateBalancePanelPosition()
|
||||||
balance_bg_view->setShape(balance_bg_rect);
|
balance_bg_view->setShape(balance_bg_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLStatusBar::setBalanceVisible(bool visible)
|
||||||
|
{
|
||||||
|
mBoxBalance->setVisible(visible);
|
||||||
|
}
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
// Firestorm methods
|
// Firestorm methods
|
||||||
|
|
||||||
void LLStatusBar::showBalance(bool show)
|
|
||||||
{
|
|
||||||
mBoxBalance->setVisible(show);
|
|
||||||
}
|
|
||||||
|
|
||||||
// <COLOSI opensim multi-currency support>
|
// <COLOSI opensim multi-currency support>
|
||||||
void LLStatusBar::updateCurrencySymbols()
|
void LLStatusBar::updateCurrencySymbols()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,8 @@ public:
|
||||||
S32 getSquareMetersLeft() const;
|
S32 getSquareMetersLeft() const;
|
||||||
LLRegionDetails mRegionDetails;
|
LLRegionDetails mRegionDetails;
|
||||||
|
|
||||||
|
void setBalanceVisible(bool visible);
|
||||||
|
|
||||||
LLPanelNearByMedia* getNearbyMediaPanel() { return mPanelNearByMedia; }
|
LLPanelNearByMedia* getNearbyMediaPanel() { return mPanelNearByMedia; }
|
||||||
bool getAudioStreamEnabled() const;
|
bool getAudioStreamEnabled() const;
|
||||||
|
|
||||||
|
|
@ -150,8 +152,6 @@ public:
|
||||||
void toggleStream(bool enable);
|
void toggleStream(bool enable);
|
||||||
// </FS:Zi>
|
// </FS:Zi>
|
||||||
|
|
||||||
void showBalance(bool show); // <FS:CR> Hide currency balance in snapshots
|
|
||||||
|
|
||||||
// <COLOSI opensim multi-currency support>
|
// <COLOSI opensim multi-currency support>
|
||||||
// force update of the "BUY L$" button when currency symbol is changed.
|
// force update of the "BUY L$" button when currency symbol is changed.
|
||||||
void updateCurrencySymbols();
|
void updateCurrencySymbols();
|
||||||
|
|
|
||||||
|
|
@ -1016,6 +1016,7 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
|
||||||
bool render_ui = gSavedSettings.getBOOL("RenderUIInSnapshot");
|
bool render_ui = gSavedSettings.getBOOL("RenderUIInSnapshot");
|
||||||
bool render_hud = gSavedSettings.getBOOL("RenderHUDInSnapshot");
|
bool render_hud = gSavedSettings.getBOOL("RenderHUDInSnapshot");
|
||||||
bool render_no_post = gSavedSettings.getBOOL("RenderSnapshotNoPost");
|
bool render_no_post = gSavedSettings.getBOOL("RenderSnapshotNoPost");
|
||||||
|
bool render_balance = gSavedSettings.getBOOL("RenderBalanceInSnapshot");
|
||||||
|
|
||||||
bool high_res = gSavedSettings.getBOOL("HighResSnapshot");
|
bool high_res = gSavedSettings.getBOOL("HighResSnapshot");
|
||||||
if (high_res)
|
if (high_res)
|
||||||
|
|
@ -1036,6 +1037,7 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
|
||||||
render_hud,
|
render_hud,
|
||||||
false,
|
false,
|
||||||
render_no_post,
|
render_no_post,
|
||||||
|
render_balance,
|
||||||
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
||||||
high_res ? S32_MAX : MAX_SNAPSHOT_IMAGE_SIZE)) //per side
|
high_res ? S32_MAX : MAX_SNAPSHOT_IMAGE_SIZE)) //per side
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6351,6 +6351,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
||||||
false, //UI
|
false, //UI
|
||||||
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
|
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
||||||
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
|
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
|
||||||
}
|
}
|
||||||
|
|
@ -6408,23 +6409,6 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// </FS:Ansariel>
|
// </FS:Ansariel>
|
||||||
// <FS:CR> FIRE-9696 - Moved detection of HomePositionSet Alert hack to here where it's actually found now
|
|
||||||
if (notificationID == "HomePositionSet")
|
|
||||||
{
|
|
||||||
// save the home location image to disk
|
|
||||||
std::string snap_filename = gDirUtilp->getLindenUserDir();
|
|
||||||
snap_filename += gDirUtilp->getDirDelimiter();
|
|
||||||
snap_filename += LLStartUp::getScreenHomeFilename();
|
|
||||||
if (gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), false, gSavedSettings.getBOOL("RenderHUDInSnapshot"), false, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG))
|
|
||||||
{
|
|
||||||
LL_INFOS() << LLStartUp::getScreenHomeFilename() << " saved successfully." << LL_ENDL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LL_WARNS() << LLStartUp::getScreenHomeFilename() << " could not be saved." << LL_ENDL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// </FS:CR>
|
|
||||||
|
|
||||||
// Special Marketplace update notification
|
// Special Marketplace update notification
|
||||||
if (notificationID == "SLM_UPDATE_FOLDER")
|
if (notificationID == "SLM_UPDATE_FOLDER")
|
||||||
|
|
@ -6493,6 +6477,7 @@ static void process_special_alert_messages(const std::string & message)
|
||||||
false,
|
false,
|
||||||
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
|
gSavedSettings.getBOOL("RenderHUDInSnapshot"),
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
|
||||||
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
|
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
|
||||||
}
|
}
|
||||||
|
|
@ -8423,7 +8408,6 @@ void process_initiate_download(LLMessageSystem* msg, void**)
|
||||||
(void**)new std::string(viewer_filename));
|
(void**)new std::string(viewer_filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void process_script_teleport_request(LLMessageSystem* msg, void**)
|
void process_script_teleport_request(LLMessageSystem* msg, void**)
|
||||||
{
|
{
|
||||||
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
|
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
|
||||||
|
|
@ -8437,6 +8421,11 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
|
||||||
msg->getString("Data", "SimName", sim_name);
|
msg->getString("Data", "SimName", sim_name);
|
||||||
msg->getVector3("Data", "SimPosition", pos);
|
msg->getVector3("Data", "SimPosition", pos);
|
||||||
msg->getVector3("Data", "LookAt", look_at);
|
msg->getVector3("Data", "LookAt", look_at);
|
||||||
|
U32 flags = (BEACON_SHOW_MAP | BEACON_FOCUS_MAP);
|
||||||
|
if (msg->has("Options"))
|
||||||
|
{
|
||||||
|
msg->getU32("Options", "Flags", flags);
|
||||||
|
}
|
||||||
|
|
||||||
LLFloaterWorldMap* instance = LLFloaterWorldMap::getInstance();
|
LLFloaterWorldMap* instance = LLFloaterWorldMap::getInstance();
|
||||||
if(instance)
|
if(instance)
|
||||||
|
|
@ -8447,7 +8436,13 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
|
||||||
<< LL_ENDL;
|
<< LL_ENDL;
|
||||||
|
|
||||||
instance->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
|
instance->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
|
||||||
LLFloaterReg::showInstance("world_map", "center");
|
if (flags & BEACON_SHOW_MAP)
|
||||||
|
{
|
||||||
|
bool old_auto_focus = instance->getAutoFocus();
|
||||||
|
instance->setAutoFocus(flags & BEACON_FOCUS_MAP);
|
||||||
|
instance->openFloater("center");
|
||||||
|
instance->setAutoFocus(old_auto_focus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove above two lines and replace with below line
|
// remove above two lines and replace with below line
|
||||||
|
|
|
||||||
|
|
@ -2417,6 +2417,12 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||||
|
|
||||||
// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)
|
// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)
|
||||||
setRotation(new_rot * mAngularVelocityRot);
|
setRotation(new_rot * mAngularVelocityRot);
|
||||||
|
if ((mFlags & FLAGS_SERVER_AUTOPILOT) && asAvatar() && asAvatar()->isSelf())
|
||||||
|
{
|
||||||
|
gAgent.resetAxes();
|
||||||
|
gAgent.rotate(new_rot);
|
||||||
|
gAgentCamera.resetView();
|
||||||
|
}
|
||||||
setChanged(ROTATED | SILHOUETTE);
|
setChanged(ROTATED | SILHOUETTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1529,6 +1529,15 @@ bool LLViewerTextureList::createUploadFile(const std::string& filename,
|
||||||
image->setLastError("Couldn't load the image to be uploaded.");
|
image->setLastError("Couldn't load the image to be uploaded.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calcDataSizeJ2C assumes maximum size is 2048 and for bigger images can
|
||||||
|
// assign discard to bring imige to needed size, but upload does the scaling
|
||||||
|
// as needed, so just reset discard.
|
||||||
|
// Assume file is full and has 'discard' 0 data.
|
||||||
|
// Todo: probably a better idea to have some setMaxDimentions in J2C
|
||||||
|
// called when loading from a local file
|
||||||
|
image->setDiscardLevel(0);
|
||||||
|
|
||||||
// Decompress or expand it in a raw image structure
|
// Decompress or expand it in a raw image structure
|
||||||
LLPointer<LLImageRaw> raw_image = new LLImageRaw;
|
LLPointer<LLImageRaw> raw_image = new LLImageRaw;
|
||||||
if (!image->decode(raw_image, 0.0f))
|
if (!image->decode(raw_image, 0.0f))
|
||||||
|
|
|
||||||
|
|
@ -5988,12 +5988,12 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, bool show_ui, bool show_hud, bool do_rebuild, LLSnapshotModel::ESnapshotLayerType type, LLSnapshotModel::ESnapshotFormat format)
|
bool LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, bool show_ui, bool show_hud, bool do_rebuild, bool show_balance, LLSnapshotModel::ESnapshotLayerType type, LLSnapshotModel::ESnapshotFormat format)
|
||||||
{
|
{
|
||||||
LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
|
LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
|
||||||
|
|
||||||
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
||||||
bool success = rawSnapshot(raw, image_width, image_height, true, false, show_ui, show_hud, do_rebuild);
|
bool success = rawSnapshot(raw, image_width, image_height, true, false, show_ui, show_hud, do_rebuild, show_balance);
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
|
|
@ -6057,14 +6057,14 @@ void LLViewerWindow::resetSnapshotLoc() const
|
||||||
|
|
||||||
bool LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, LLSnapshotModel::ESnapshotLayerType type)
|
bool LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, LLSnapshotModel::ESnapshotLayerType type)
|
||||||
{
|
{
|
||||||
return rawSnapshot(raw, preview_width, preview_height, false, false, show_ui, show_hud, do_rebuild, no_post, type);
|
return rawSnapshot(raw, preview_width, preview_height, false, false, show_ui, show_hud, do_rebuild, no_post, gSavedSettings.getBOOL("RenderBalanceInSnapshot"), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Saves the image from the screen to a raw image
|
// Saves the image from the screen to a raw image
|
||||||
// Since the required size might be bigger than the available screen, this method rerenders the scene in parts (called subimages) and copy
|
// Since the required size might be bigger than the available screen, this method rerenders the scene in parts (called subimages) and copy
|
||||||
// the results over to the final raw image.
|
// the results over to the final raw image.
|
||||||
bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height,
|
bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height,
|
||||||
bool keep_window_aspect, bool is_texture, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, LLSnapshotModel::ESnapshotLayerType type, S32 max_size)
|
bool keep_window_aspect, bool is_texture, bool show_ui, bool show_hud, bool do_rebuild, bool no_post, bool show_balance, LLSnapshotModel::ESnapshotLayerType type, S32 max_size)
|
||||||
{
|
{
|
||||||
if (!raw)
|
if (!raw)
|
||||||
{
|
{
|
||||||
|
|
@ -6123,11 +6123,7 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
|
||||||
image_width = llmin(image_width, window_width);
|
image_width = llmin(image_width, window_width);
|
||||||
image_height = llmin(image_height, window_height);
|
image_height = llmin(image_height, window_height);
|
||||||
|
|
||||||
// <FS:CR> Hide currency balance in snapshots
|
setBalanceVisible(show_balance);
|
||||||
if (gStatusBar)
|
|
||||||
{
|
|
||||||
gStatusBar->showBalance((bool)gSavedSettings.getBOOL("FSShowCurrencyBalanceInSnapshots"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
S32 original_width = 0;
|
S32 original_width = 0;
|
||||||
|
|
@ -6208,13 +6204,13 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gStatusBar->showBalance(true); // <FS:CR> Hide currency balance in snapshots
|
setBalanceVisible(true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (raw->isBufferInvalid())
|
if (raw->isBufferInvalid())
|
||||||
{
|
{
|
||||||
gStatusBar->showBalance(true); // <FS:CR> Hide currency balance in snapshots
|
setBalanceVisible(true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6425,12 +6421,7 @@ bool LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
|
||||||
{
|
{
|
||||||
send_agent_resume();
|
send_agent_resume();
|
||||||
}
|
}
|
||||||
|
setBalanceVisible(true);
|
||||||
// <FS:CR> Hide currency balance in snapshots
|
|
||||||
if (gStatusBar)
|
|
||||||
{
|
|
||||||
gStatusBar->showBalance(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -6941,6 +6932,14 @@ void LLViewerWindow::setProgressCancelButtonVisible( bool b, const std::string&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLViewerWindow::setBalanceVisible(bool visible)
|
||||||
|
{
|
||||||
|
if (gStatusBar)
|
||||||
|
{
|
||||||
|
gStatusBar->setBalanceVisible(visible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LLProgressView *LLViewerWindow::getProgressView() const
|
LLProgressView *LLViewerWindow::getProgressView() const
|
||||||
{
|
{
|
||||||
return mProgressView;
|
return mProgressView;
|
||||||
|
|
|
||||||
|
|
@ -366,9 +366,11 @@ public:
|
||||||
// snapshot functionality.
|
// snapshot functionality.
|
||||||
// perhaps some of this should move to llfloatershapshot? -MG
|
// perhaps some of this should move to llfloatershapshot? -MG
|
||||||
|
|
||||||
bool saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, bool show_ui = true, bool show_hud = true, bool do_rebuild = false, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::ESnapshotFormat format = LLSnapshotModel::SNAPSHOT_FORMAT_BMP);
|
bool saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, bool show_ui = true, bool show_hud = true, bool do_rebuild = false, bool show_balance = true,
|
||||||
bool rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, bool keep_window_aspect = true, bool is_texture = false,
|
LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::ESnapshotFormat format = LLSnapshotModel::SNAPSHOT_FORMAT_BMP);
|
||||||
bool show_ui = true, bool show_hud = true, bool do_rebuild = false, bool no_post = false, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE);
|
bool rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, bool keep_window_aspect = true, bool is_texture = false,
|
||||||
|
bool show_ui = true, bool show_hud = true, bool do_rebuild = false, bool no_post = false, bool show_balance = true,
|
||||||
|
LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE);
|
||||||
|
|
||||||
bool simpleSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, const int num_render_passes);
|
bool simpleSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, const int num_render_passes);
|
||||||
|
|
||||||
|
|
@ -467,6 +469,8 @@ public:
|
||||||
void setTitle(const std::string& win_title);
|
void setTitle(const std::string& win_title);
|
||||||
// </FS:TT>
|
// </FS:TT>
|
||||||
|
|
||||||
|
void setBalanceVisible(bool visible);
|
||||||
|
|
||||||
static std::string getLastSnapshotDir();
|
static std::string getLastSnapshotDir();
|
||||||
|
|
||||||
LLView* getFloaterSnapRegion() { return mFloaterSnapRegion; }
|
LLView* getFloaterSnapRegion() { return mFloaterSnapRegion; }
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
|
||||||
}
|
}
|
||||||
type = found->second;
|
type = found->second;
|
||||||
}
|
}
|
||||||
bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, showhud, rebuild, type);
|
bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, showhud, rebuild, true /*L$ Balance*/, type);
|
||||||
sendReply(LLSDMap("ok", ok), event);
|
sendReply(LLSDMap("ok", ok), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4254,6 +4254,9 @@ Versuch abgebrochen.
|
||||||
<notification name="NowOwnObject">
|
<notification name="NowOwnObject">
|
||||||
Sie sind jetzt Eigentümer des Objekts [OBJECT_NAME]
|
Sie sind jetzt Eigentümer des Objekts [OBJECT_NAME]
|
||||||
</notification>
|
</notification>
|
||||||
|
<notification name="NowOwnObjectInv">
|
||||||
|
Sie sind jetzt Eigentümer des Objekts [OBJECT_NAME] und es wurde Ihrem Inventar hinzugefügt.
|
||||||
|
</notification>
|
||||||
<notification name="CantRezOnLand">
|
<notification name="CantRezOnLand">
|
||||||
Objekt kann nicht an [OBJECT_POS] gerezzt werden, da der Landeigentümer dies nicht zulässt. Machen Sie den Landeigentümer mit dem Landwerkzeug ausfindig.
|
Objekt kann nicht an [OBJECT_POS] gerezzt werden, da der Landeigentümer dies nicht zulässt. Machen Sie den Landeigentümer mit dem Landwerkzeug ausfindig.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
|
||||||
|
|
@ -4916,6 +4916,10 @@ Bitte installieren Sie den Viewer von [DOWNLOAD_URL] erneut und wenden Sie sich
|
||||||
<string name="inventory_folder_offered-im">
|
<string name="inventory_folder_offered-im">
|
||||||
Inventarordner „[ITEM_NAME]“ angeboten
|
Inventarordner „[ITEM_NAME]“ angeboten
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
Sie chatten mit einem Bot, [NAME]. Geben Sie keine persönlichen Informationen weiter.
|
||||||
|
Erfahren Sie mehr unter https://second.life/scripted-agents.
|
||||||
|
</string>
|
||||||
<string name="share_alert">
|
<string name="share_alert">
|
||||||
Objekte aus dem Inventar hier her ziehen
|
Objekte aus dem Inventar hier her ziehen
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
|
|
@ -182,10 +182,11 @@
|
||||||
height="16"
|
height="16"
|
||||||
top_pad="3"
|
top_pad="3"
|
||||||
width="180"
|
width="180"
|
||||||
|
control_name="RenderUIInSnapshot"
|
||||||
name="ui_check" />
|
name="ui_check" />
|
||||||
<check_box
|
<check_box
|
||||||
enabled_control="RenderUIInSnapshot"
|
enabled_control="RenderUIInSnapshot"
|
||||||
control_name="FSShowCurrencyBalanceInSnapshots"
|
control_name="RenderBalanceInSnapshot"
|
||||||
label="L$ Balance"
|
label="L$ Balance"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left="30"
|
left="30"
|
||||||
|
|
@ -199,6 +200,7 @@
|
||||||
left="30"
|
left="30"
|
||||||
top_pad="0"
|
top_pad="0"
|
||||||
width="180"
|
width="180"
|
||||||
|
control_name="RenderHUDInSnapshot"
|
||||||
name="hud_check" />
|
name="hud_check" />
|
||||||
<check_box
|
<check_box
|
||||||
control_name="FSSnapshotShowCaptureFrame"
|
control_name="FSSnapshotShowCaptureFrame"
|
||||||
|
|
|
||||||
|
|
@ -11593,6 +11593,14 @@ You are now the owner of object [OBJECT_NAME]
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
|
name="NowOwnObjectInv"
|
||||||
|
type="notify">
|
||||||
|
<tag>fail</tag>
|
||||||
|
You are now the owner of object [OBJECT_NAME] and it has been placed in your inventory.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
name="CantRezOnLand"
|
name="CantRezOnLand"
|
||||||
type="notify">
|
type="notify">
|
||||||
<tag>fail</tag>
|
<tag>fail</tag>
|
||||||
|
|
|
||||||
|
|
@ -377,7 +377,7 @@
|
||||||
initial_value="0"
|
initial_value="0"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left_delta="5"
|
left_delta="5"
|
||||||
min_val="-0.5"
|
min_val="0"
|
||||||
max_val="0.5"
|
max_val="0.5"
|
||||||
name="water_blur_multip"
|
name="water_blur_multip"
|
||||||
top_pad="5"
|
top_pad="5"
|
||||||
|
|
|
||||||
|
|
@ -4584,6 +4584,10 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
|
||||||
<string name="inventory_folder_offered-im">
|
<string name="inventory_folder_offered-im">
|
||||||
Carpeta del inventario '[ITEM_NAME]' ofrecida
|
Carpeta del inventario '[ITEM_NAME]' ofrecida
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
Estás conversando con un bot, [NAME]. No compartas información personal.
|
||||||
|
Más información en https://second.life/scripted-agents.
|
||||||
|
</string
|
||||||
<string name="inventory_item_offered_rlv">
|
<string name="inventory_item_offered_rlv">
|
||||||
Ofrecido ítem de inventario a [NAME]
|
Ofrecido ítem de inventario a [NAME]
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
|
|
@ -4846,6 +4846,10 @@ Veuillez réinstaller la visionneuse à partir de [DOWNLOAD_URL] et contacter [S
|
||||||
<string name="inventory_folder_offered-im">
|
<string name="inventory_folder_offered-im">
|
||||||
Dossier de l’inventaire [ITEM_NAME] offert
|
Dossier de l’inventaire [ITEM_NAME] offert
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
Vous discutez avec un bot, [NAME]. Ne partagez pas d’informations personnelles.
|
||||||
|
En savoir plus sur https://second.life/scripted-agents.
|
||||||
|
</string>
|
||||||
<string name="inventory_item_offered_rlv">
|
<string name="inventory_item_offered_rlv">
|
||||||
Article d'inventaire offert à [NAME]
|
Article d'inventaire offert à [NAME]
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
|
|
@ -4756,6 +4756,10 @@ Reinstallare il browser da [DOWNLOAD_URL] e contattare [SUPPORT_SITE] se il prob
|
||||||
<string name="inventory_folder_offered-im">
|
<string name="inventory_folder_offered-im">
|
||||||
Offerta cartella '[ITEM_NAME]' da inventario
|
Offerta cartella '[ITEM_NAME]' da inventario
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
Stai parlando con un bot, [NAME]. Non condividere informazioni personali.
|
||||||
|
Scopri di più su https://second.life/scripted-agents.
|
||||||
|
</string>
|
||||||
<string name="inventory_item_offered_rlv">
|
<string name="inventory_item_offered_rlv">
|
||||||
Offerto oggetto da inventario a [NAME]
|
Offerto oggetto da inventario a [NAME]
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
|
|
@ -4682,6 +4682,10 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
|
||||||
<string name="inventory_folder_offered-im">
|
<string name="inventory_folder_offered-im">
|
||||||
インベントリフォルダー '[ITEM_NAME]' を送りました
|
インベントリフォルダー '[ITEM_NAME]' を送りました
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
[NAME]とチャットしています。個人情報を共有しないでください。
|
||||||
|
詳細は https://second.life/scripted-agents をご覧ください。
|
||||||
|
</string>
|
||||||
<string name="share_alert">
|
<string name="share_alert">
|
||||||
インベントリからここにアイテムをドラッグします
|
インベントリからここにアイテムをドラッグします
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
|
|
@ -4856,6 +4856,10 @@ https://www.firestormviewer.org/support за помощь в решении эт
|
||||||
<string name="inventory_item_offered_rlv">
|
<string name="inventory_item_offered_rlv">
|
||||||
Предложен элемент инвентаря [NAME]
|
Предложен элемент инвентаря [NAME]
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
Вы общаетесь с ботом [NAME]. Не передавайте личные данные.
|
||||||
|
Подробнее на https://second.life/scripted-agents.
|
||||||
|
</string>
|
||||||
<string name="share_alert">
|
<string name="share_alert">
|
||||||
Перетащите элементы из инвентаря сюда
|
Перетащите элементы из инвентаря сюда
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
|
|
@ -5091,6 +5091,10 @@ support@secondlife.com.
|
||||||
<string name="inventory_item_offered_rlv">
|
<string name="inventory_item_offered_rlv">
|
||||||
庫存物件已傳送給 [NAME]
|
庫存物件已傳送給 [NAME]
|
||||||
</string>
|
</string>
|
||||||
|
<string name="bot_warning">
|
||||||
|
您正在与人工智能机器人 [NAME] 聊天。请勿分享任何个人信息。
|
||||||
|
了解更多:https://second.life/scripted-agents。
|
||||||
|
</string>
|
||||||
<string name="share_alert">
|
<string name="share_alert">
|
||||||
將庫存物件拖拽到這裡
|
將庫存物件拖拽到這裡
|
||||||
</string>
|
</string>
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1 +1 @@
|
||||||
1a9a3717fde5d0fb3d5f688a1a3dab7fcc2aa308
|
f0e9d30b03fe7823a7050cf1a86653e4de4bc256
|
||||||
Loading…
Reference in New Issue