mirror of
https://github.com/FirestormViewer/phoenix-firestorm.git
synced 2026-08-14 00:48:30 +00:00
Merge branch 'release/2026.02' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/llviewerparceloverlay.cpp # indra/newview/skins/default/xui/da/panel_preferences_alerts.xml # indra/newview/skins/default/xui/da/panel_preferences_sound.xml # indra/newview/skins/default/xui/en/floater_adjust_environment.xml # indra/newview/skins/default/xui/en/floater_inventory_settings.xml # indra/newview/skins/default/xui/en/floater_model_preview.xml # indra/newview/skins/default/xui/en/floater_test_textbox.xml # indra/newview/skins/default/xui/en/panel_group_general.xml # indra/newview/skins/default/xui/en/panel_main_inventory.xml # indra/newview/skins/default/xui/en/panel_preferences_advanced.xml # indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml # indra/newview/skins/default/xui/en/panel_preferences_sound.xml # indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml # indra/newview/skins/default/xui/en/widgets/wearable_outfit_list_item.xml
This commit is contained in:
@@ -155,7 +155,6 @@ class LLVector3
|
||||
friend const LLVector3& operator*=(LLVector3 &a, const LLVector3 &b); // Returns a * b;
|
||||
friend const LLVector3& operator*=(LLVector3 &a, F32 k); // Return a times scaler k
|
||||
friend const LLVector3& operator/=(LLVector3 &a, F32 k); // Return a divided by scaler k
|
||||
friend const LLVector3& operator/=(LLVector3& a, const LLVector3& b);
|
||||
friend const LLVector3& operator*=(LLVector3 &a, const LLQuaternion &b); // Returns a * b;
|
||||
|
||||
friend LLVector3 operator-(const LLVector3 &a); // Return vector -a
|
||||
@@ -461,14 +460,6 @@ inline const LLVector3& operator/=(LLVector3& a, F32 k)
|
||||
return a;
|
||||
}
|
||||
|
||||
inline const LLVector3& operator/=(LLVector3& a, const LLVector3& b)
|
||||
{
|
||||
a.mV[VX] /= b.mV[VX];
|
||||
a.mV[VY] /= b.mV[VY];
|
||||
a.mV[VZ] /= b.mV[VZ];
|
||||
return a;
|
||||
}
|
||||
|
||||
inline LLVector3 operator-(const LLVector3& a)
|
||||
{
|
||||
return LLVector3(-a.mV[VX], -a.mV[VY], -a.mV[VZ]);
|
||||
|
||||
@@ -1178,7 +1178,14 @@ LLFontGL* LLFontGL::getFontSansSerifSmallItalic()
|
||||
//static
|
||||
LLFontGL* LLFontGL::getFontSansSerif()
|
||||
{
|
||||
static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",0));
|
||||
static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Small",0));
|
||||
return fontp;
|
||||
}
|
||||
|
||||
// static
|
||||
LLFontGL* LLFontGL::getFontSansSerifMedium()
|
||||
{
|
||||
static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif", "Medium", 0));
|
||||
return fontp;
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +210,7 @@ public:
|
||||
static LLFontGL* getFontSansSerifSmallBold();
|
||||
static LLFontGL* getFontSansSerifSmallItalic();
|
||||
static LLFontGL* getFontSansSerif();
|
||||
static LLFontGL* getFontSansSerifMedium();
|
||||
static LLFontGL* getFontSansSerifBig();
|
||||
static LLFontGL* getFontSansSerifHuge();
|
||||
static LLFontGL* getFontSansSerifBold();
|
||||
|
||||
@@ -203,7 +203,7 @@ LLFontDescriptor LLFontDescriptor::normalize() const
|
||||
new_size = "Cascadia";
|
||||
// </FS:Ansariel>
|
||||
if (new_size.empty())
|
||||
new_size = "Medium";
|
||||
new_size = "Small";
|
||||
|
||||
if (removeSubString(new_name,"Bold"))
|
||||
new_style |= LLFontGL::BOLD;
|
||||
|
||||
+14
-53
@@ -1815,9 +1815,17 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
|
||||
return;
|
||||
}
|
||||
|
||||
LLVector4a vert(x, y, z);
|
||||
transform(vert);
|
||||
mVerticesp[mCount] = vert;
|
||||
if (mUIOffset.empty())
|
||||
{
|
||||
mVerticesp[mCount].set(x,y,z);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVector4a vert(x, y, z);
|
||||
vert.add(mUIOffset.back());
|
||||
vert.mul(mUIScale.back());
|
||||
mVerticesp[mCount] = vert;
|
||||
}
|
||||
|
||||
mCount++;
|
||||
mVerticesp[mCount] = mVerticesp[mCount-1];
|
||||
@@ -1825,54 +1833,7 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)
|
||||
mTexcoordsp[mCount] = mTexcoordsp[mCount-1];
|
||||
}
|
||||
|
||||
void LLRender::transform(LLVector3& vert)
|
||||
{
|
||||
if (!mUIOffset.empty())
|
||||
{
|
||||
vert += LLVector3(mUIOffset.back().getF32ptr());
|
||||
vert *= LLVector3(mUIScale.back().getF32ptr());
|
||||
}
|
||||
}
|
||||
|
||||
void LLRender::transform(LLVector4a& vert)
|
||||
{
|
||||
if (!mUIOffset.empty())
|
||||
{
|
||||
vert.add(mUIOffset.back());
|
||||
vert.mul(mUIScale.back());
|
||||
}
|
||||
}
|
||||
|
||||
void LLRender::untransform(LLVector3& vert)
|
||||
{
|
||||
if (!mUIOffset.empty())
|
||||
{
|
||||
vert /= LLVector3(mUIScale.back().getF32ptr());
|
||||
vert -= LLVector3(mUIOffset.back().getF32ptr());
|
||||
}
|
||||
}
|
||||
|
||||
void LLRender::batchTransform(LLVector4a* verts, U32 vert_count)
|
||||
{
|
||||
if (!mUIOffset.empty())
|
||||
{
|
||||
const LLVector4a& offset = mUIOffset.back();
|
||||
const LLVector4a& scale = mUIScale.back();
|
||||
|
||||
for (U32 i = 0; i < vert_count; ++i)
|
||||
{
|
||||
verts[i].add(offset);
|
||||
verts[i].mul(scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLRender::vertexBatchPreTransformed(const std::vector<LLVector4a>& verts)
|
||||
{
|
||||
vertexBatchPreTransformed(verts.data(), narrow(verts.size()));
|
||||
}
|
||||
|
||||
void LLRender::vertexBatchPreTransformed(const LLVector4a* verts, S32 vert_count)
|
||||
void LLRender::vertexBatchPreTransformed(LLVector4a* verts, S32 vert_count)
|
||||
{
|
||||
if (mCount + vert_count > 4094)
|
||||
{
|
||||
@@ -1893,7 +1854,7 @@ void LLRender::vertexBatchPreTransformed(const LLVector4a* verts, S32 vert_count
|
||||
mVerticesp[mCount] = mVerticesp[mCount-1];
|
||||
}
|
||||
|
||||
void LLRender::vertexBatchPreTransformed(const LLVector4a* verts, const LLVector2* uvs, S32 vert_count)
|
||||
void LLRender::vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, S32 vert_count)
|
||||
{
|
||||
if (mCount + vert_count > 4094)
|
||||
{
|
||||
@@ -1917,7 +1878,7 @@ void LLRender::vertexBatchPreTransformed(const LLVector4a* verts, const LLVector
|
||||
}
|
||||
}
|
||||
|
||||
void LLRender::vertexBatchPreTransformed(const LLVector4a* verts, const LLVector2* uvs, const LLColor4U* colors, S32 vert_count)
|
||||
void LLRender::vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, LLColor4U* colors, S32 vert_count)
|
||||
{
|
||||
if (mCount + vert_count > 4094)
|
||||
{
|
||||
|
||||
@@ -450,16 +450,9 @@ public:
|
||||
void diffuseColor4ubv(const U8* c);
|
||||
void diffuseColor4ub(U8 r, U8 g, U8 b, U8 a);
|
||||
|
||||
void transform(LLVector3& vert);
|
||||
void transform(LLVector4a& vert);
|
||||
void untransform(LLVector3& vert);
|
||||
|
||||
void batchTransform(LLVector4a* verts, U32 vert_count);
|
||||
|
||||
void vertexBatchPreTransformed(const std::vector<LLVector4a>& verts);
|
||||
void vertexBatchPreTransformed(const LLVector4a* verts, S32 vert_count);
|
||||
void vertexBatchPreTransformed(const LLVector4a* verts, const LLVector2* uvs, S32 vert_count);
|
||||
void vertexBatchPreTransformed(const LLVector4a* verts, const LLVector2* uvs, const LLColor4U*, S32 vert_count);
|
||||
void vertexBatchPreTransformed(LLVector4a* verts, S32 vert_count);
|
||||
void vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, S32 vert_count);
|
||||
void vertexBatchPreTransformed(LLVector4a* verts, LLVector2* uvs, LLColor4U*, S32 vert_count);
|
||||
|
||||
void setColorMask(bool writeColor, bool writeAlpha);
|
||||
void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha);
|
||||
|
||||
@@ -80,7 +80,7 @@ LLUICtrl::Params::Params()
|
||||
mouseenter_callback("mouseenter_callback"),
|
||||
mouseleave_callback("mouseleave_callback"),
|
||||
control_name("control_name"),
|
||||
font("font", LLFontGL::getFontEmojiMedium()),
|
||||
font("font", LLFontGL::getFontEmojiSmall()),
|
||||
font_halign("halign"),
|
||||
font_valign("valign"),
|
||||
length("length"), // ignore LLXMLNode cruft
|
||||
|
||||
@@ -9264,7 +9264,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>90</integer>
|
||||
<integer>110</integer>
|
||||
</map>
|
||||
<key>ChannelBottomPanelMargin</key>
|
||||
<map>
|
||||
|
||||
@@ -5470,13 +5470,66 @@ void LLAppViewer::purgeCefStaleCaches()
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
// TODO: we really shouldn't use a hard coded name for the cache folder here...
|
||||
const std::string browser_parent_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "cef_cache");
|
||||
if (LLFile::isdir(browser_parent_cache))
|
||||
if (!LLFile::isdir(browser_parent_cache))
|
||||
{
|
||||
// This is a sledgehammer approach - nukes the cef_cache dir entirely
|
||||
// which is then recreated the first time a CEF instance creates an
|
||||
// individual cache folder. If we ever decide to retain some folders
|
||||
// e.g. Search UI cache - then we will need a more granular approach.
|
||||
gDirUtilp->deleteDirAndContents(browser_parent_cache);
|
||||
return;
|
||||
}
|
||||
// We are using a fixed name to not leave stale folders
|
||||
// around in case something goes wrong on startup.
|
||||
const std::string holder_cache_name = browser_parent_cache + "_rename";
|
||||
|
||||
// Try to rename the entire directory first
|
||||
if (LLFile::rename(browser_parent_cache, holder_cache_name) == 0)
|
||||
{
|
||||
LL_DEBUGS("AppInit") << "Successfully renamed CEF cache folder for deletion" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Rename failed (likely another instance has files open in the cache)
|
||||
// Create holder folder and move individual subfolders instead
|
||||
LL_DEBUGS("AppInit") << "Could not rename CEF cache folder (may be in use), moving individual folders" << LL_ENDL;
|
||||
|
||||
if (!LLFile::isdir(holder_cache_name) && LLFile::mkdir(holder_cache_name) != 0)
|
||||
{
|
||||
LL_WARNS() << "Failed to create holder folder: " << holder_cache_name << LL_ENDL;
|
||||
// Attept normal cleanup
|
||||
gDirUtilp->deleteDirAndContents(browser_parent_cache);
|
||||
return;
|
||||
}
|
||||
|
||||
// Iterate through subdirectories in the cache folder
|
||||
LLDirIterator dir_iter(browser_parent_cache, "*");
|
||||
std::string subfolder_name;
|
||||
while (dir_iter.next(subfolder_name))
|
||||
{
|
||||
if (subfolder_name == "." || subfolder_name == "..")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
std::string source_path = browser_parent_cache + gDirUtilp->getDirDelimiter() + subfolder_name;
|
||||
std::string dest_path = holder_cache_name + gDirUtilp->getDirDelimiter() + subfolder_name;
|
||||
|
||||
// If folder is in use, move will fail, don't delete it.
|
||||
LLFile::rename(source_path, dest_path);
|
||||
}
|
||||
}
|
||||
|
||||
// Post deletion task to the General work queue to avoid blocking the main thread
|
||||
if (auto queue = LL::WorkQueue::getInstance("General"))
|
||||
{
|
||||
// Alternatively throw it at LLPurgeDiskCacheThread to clean
|
||||
// it during periodic purges.
|
||||
queue->post([holder_cache_name]()
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED("cef_cache_cleanup");
|
||||
gDirUtilp->deleteDirAndContents(holder_cache_name);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Failed to get General work queue, deleting CEF cache synchronously" << LL_ENDL;
|
||||
gDirUtilp->deleteDirAndContents(holder_cache_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -514,22 +514,8 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
|
||||
// commands and exit the process before we do anything else.
|
||||
if (!velopack_initialize())
|
||||
{
|
||||
// Obsolete? Always return true
|
||||
// Velopack handled the invocation (install/uninstall hook)
|
||||
|
||||
// Drop install related settings
|
||||
gDirUtilp->initAppDirs("SecondLife");
|
||||
|
||||
std::string user_settings_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "settings.xml");
|
||||
LLControlGroup settings("global");
|
||||
if (settings.loadFromFile(user_settings_path))
|
||||
{
|
||||
// If user reinstalls or updates, we want to recheck for nsis leftovers.
|
||||
if (settings.controlExists("PreviousInstallChecked"))
|
||||
{
|
||||
settings.setBOOL("PreviousInstallChecked", false);
|
||||
}
|
||||
settings.saveToFile(user_settings_path, true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1114,7 +1114,7 @@ void LLFloaterIMSession::processAgentListUpdates(const LLSD& body)
|
||||
if (moderator_muted_text)
|
||||
label = LLTrans::getString("IM_muted_text_label");
|
||||
else
|
||||
label = LLTrans::getString("IM_to_label") + " " + LLIMModel::instance().getName(mSessionID);
|
||||
label = LLIMModel::instance().getName(mSessionID);
|
||||
mInputEditor->setLabel(label);
|
||||
|
||||
if (moderator_muted_text)
|
||||
|
||||
@@ -937,7 +937,7 @@ void LLFloaterIMSessionTab::hideOrShowTitle()
|
||||
|
||||
void LLFloaterIMSessionTab::updateSessionName(const std::string& name)
|
||||
{
|
||||
mInputEditor->setLabel(LLTrans::getString("IM_to_label") + " " + name);
|
||||
mInputEditor->setLabel(name);
|
||||
}
|
||||
|
||||
void LLFloaterIMSessionTab::updateChatIcon(const LLUUID& id)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
const S32 BOTTOM_PAD = VPAD * 3;
|
||||
const S32 IGNORE_BTN_TOP_DELTA = 3*VPAD;//additional ignore_btn padding
|
||||
S32 BUTTON_WIDTH = 90;
|
||||
S32 BUTTON_WIDTH = 110;
|
||||
|
||||
|
||||
//static
|
||||
@@ -387,8 +387,20 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images )
|
||||
}
|
||||
else
|
||||
{
|
||||
const S32 button_panel_width = mControlPanel->getRect().getWidth();// do not change width of the panel
|
||||
S32 button_panel_width = mControlPanel->getRect().getWidth();// get initial width from XML
|
||||
S32 button_panel_height = mControlPanel->getRect().getHeight();
|
||||
|
||||
// width for 3 columns: 3 buttons + 2 gaps
|
||||
S32 min_width_required = 3 * BUTTON_WIDTH + 2 * (2 * HPAD);
|
||||
if (min_width_required > button_panel_width)
|
||||
{
|
||||
button_panel_width = min_width_required;
|
||||
S32 width_increase = button_panel_width - mControlPanel->getRect().getWidth();
|
||||
reshape(getRect().getWidth() + width_increase, getRect().getHeight());
|
||||
mInfoPanel->reshape(mInfoPanel->getRect().getWidth() + width_increase, mInfoPanel->getRect().getHeight());
|
||||
mTextBox->reshape(mTextBox->getRect().getWidth() + width_increase, mTextBox->getRect().getHeight());
|
||||
}
|
||||
|
||||
//try get an average h_pad to spread out buttons
|
||||
S32 h_pad = (button_panel_width - buttons_width) / (S32(buttons.size()));
|
||||
if(h_pad < 2*HPAD)
|
||||
|
||||
+103
-60
@@ -529,6 +529,73 @@ static bool paths_are_equal(const std::wstring& path1, const std::wstring& path2
|
||||
}
|
||||
}
|
||||
|
||||
static void update_taskbar_shortcut(const std::string& nsis_folder_path, const std::wstring& appdata_path, const std::wstring& app_name, const std::wstring& link_name)
|
||||
{
|
||||
std::wstring taskbar_path = appdata_path;
|
||||
taskbar_path += L"\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar\\";
|
||||
taskbar_path += link_name;
|
||||
|
||||
if (!PathFileExistsW(taskbar_path.c_str()))
|
||||
{
|
||||
// User didn't create one
|
||||
return;
|
||||
}
|
||||
|
||||
// Verify we are removing or updating the right thing.
|
||||
// It is not warranteed that the shortcut points to NSIS.
|
||||
std::wstring target_path;
|
||||
if (get_shortcut_target(taskbar_path, target_path))
|
||||
{
|
||||
// Strip the filename part to get just the folder path
|
||||
std::filesystem::path trim_path(target_path);
|
||||
if (trim_path.has_filename())
|
||||
{
|
||||
target_path = trim_path.parent_path().wstring();
|
||||
}
|
||||
std::wstring nsis_path_w = ll_convert<std::wstring>(nsis_folder_path);
|
||||
if (!paths_are_equal(nsis_path_w, target_path))
|
||||
{
|
||||
// Shortcut points to something else, don't mess with it
|
||||
LL_INFOS("Velopack") << "Found a matching shortcut, but it points to a different channel. Expected: "
|
||||
<< ll_convert_wide_to_string(nsis_path_w)
|
||||
<< ", actual: " << ll_convert_wide_to_string(target_path)
|
||||
<< LL_ENDL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// First try to overwrite shortcut
|
||||
std::wstring current_exe = ll_convert<std::wstring>(gDirUtilp->getExecutablePathAndName());
|
||||
HRESULT hr = create_shortcut(taskbar_path, current_exe, L"", app_name, current_exe);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
LL_INFOS("Velopack") << "Successfully updated taskbar shortcut to point to current exe" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// Try deleting and if possible, recreating separately. We should not leave hanging shortcuts behind.
|
||||
if (!DeleteFileW(taskbar_path.c_str()))
|
||||
{
|
||||
DWORD error = GetLastError();
|
||||
if (error != ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
LL_WARNS("Velopack") << "Failed to delete NSIS taskbar shortcut: "
|
||||
<< ll_convert_wide_to_string(taskbar_path)
|
||||
<< " (error: " << error << ")" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deleted user created link, recreate it with new target if possible.
|
||||
LL_INFOS("Velopack") << "Updating taskbar shortcut to point to current exe" << LL_ENDL;
|
||||
HRESULT hr = create_shortcut(taskbar_path, current_exe, L"", app_name, current_exe);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LL_WARNS("Velopack") << "Failed to re-create taskbar shortcut, error: " << std::hex << hr << ", NSIS shortcut was removed" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear_nsis_links(const std::string& nsis_folder_path)
|
||||
{
|
||||
wchar_t path[MAX_PATH];
|
||||
@@ -573,68 +640,17 @@ void clear_nsis_links(const std::string& nsis_folder_path)
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Taskbar link, which is user-specific and located at:
|
||||
// %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Second Life.lnk
|
||||
// Note that it can be a link to velopack already, but since
|
||||
// we aren't removing, but recreating, it shouldn't be an issue.
|
||||
// 3. Taskbar links, which are user-specific and located at:
|
||||
// %AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\
|
||||
// Note that it can be a link to velopack already or to a different NSIS viewer.
|
||||
// Name might also be different based on method of creation.
|
||||
if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, path)))
|
||||
{
|
||||
std::wstring taskbar_path = path;
|
||||
// Hardcoded, because this name is the default window name and isn't going to change in NSIS
|
||||
taskbar_path += L"\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar\\Second Life.lnk";
|
||||
|
||||
if (PathFileExistsW(taskbar_path.c_str()))
|
||||
{
|
||||
// First try to overwrite shortcut
|
||||
std::wstring current_exe = ll_convert<std::wstring>(gDirUtilp->getExecutablePathAndName());
|
||||
|
||||
HRESULT hr = create_shortcut(taskbar_path, current_exe, L"", app_name, current_exe);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LL_WARNS("Velopack") << "Failed to update taskbar shortcut, error " << std::hex << hr << LL_ENDL;
|
||||
// Try deleting and if possible recreating separately. We should not leave hanging shortcuts behind.
|
||||
// It is not warranted that the shortcut points to NSIS, so check the destination first.
|
||||
std::wstring target_path;
|
||||
if (get_shortcut_target(taskbar_path, target_path))
|
||||
{
|
||||
// Strip the filename part to get just the folder path
|
||||
std::filesystem::path trim_path(target_path);
|
||||
if (trim_path.has_filename())
|
||||
{
|
||||
target_path = trim_path.parent_path().wstring();
|
||||
}
|
||||
std::wstring nsis_path_w = ll_convert<std::wstring>(nsis_folder_path);
|
||||
if (paths_are_equal(nsis_path_w, target_path))
|
||||
{
|
||||
if (!DeleteFileW(taskbar_path.c_str()))
|
||||
{
|
||||
DWORD error = GetLastError();
|
||||
if (error != ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
LL_WARNS("Velopack") << "Failed to delete NSIS taskbar shortcut: "
|
||||
<< ll_convert_wide_to_string(taskbar_path)
|
||||
<< " (error: " << error << ")" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Deleted user created link, recreate it with new target if possible.
|
||||
LL_INFOS("Velopack") << "Updating taskbar shortcut to point to current exe" << LL_ENDL;
|
||||
HRESULT hr = create_shortcut(taskbar_path, current_exe, L"", app_name, current_exe);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LL_WARNS("Velopack") << "Failed to re-create taskbar shortcut, error: " << std::hex << hr << ", NSIS shortcut was removed" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS("Velopack") << "Successfully updated taskbar shortcut to point to current exe" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
// else user didn't create a taskbar shortcut.
|
||||
update_taskbar_shortcut(nsis_folder_path, path, app_name, L"Second Life.lnk"); // Window class name
|
||||
update_taskbar_shortcut(nsis_folder_path, path, app_name, L"Second Life(1).lnk"); // Just in case user somehow did it twice and removed first
|
||||
update_taskbar_shortcut(nsis_folder_path, path, app_name, L"SecondLifeViewer.lnk"); // Executable name
|
||||
update_taskbar_shortcut(nsis_folder_path, path, app_name, L"secondlife-bin.lnk"); // Debug builds
|
||||
update_taskbar_shortcut(nsis_folder_path, path, app_name, app_name + L".lnk"); // Default name
|
||||
}
|
||||
}
|
||||
|
||||
@@ -858,6 +874,33 @@ static void on_first_run(void* p_user_data, const char* app_version)
|
||||
MultiByteToWideChar(CP_UTF8, 0, app_version, -1, &version[0], len);
|
||||
|
||||
register_uninstall_info(install_dir, app_name, version);
|
||||
|
||||
// Drop install related settings
|
||||
// Unfortunately gDirUtilp is not initialized yet and it's shouldn't
|
||||
// be possible to change location of the settings. For now it's simpler
|
||||
// to hardcode the location.
|
||||
std::optional<std::string> app_data = LLStringUtil::getoptenv("APPDATA");
|
||||
if (app_data)
|
||||
{
|
||||
// Strip trailing delimiter if present
|
||||
std::string app_data_path = *app_data;
|
||||
if (!app_data_path.empty() && (app_data_path.back() == '\\' || app_data_path.back() == '/'))
|
||||
{
|
||||
app_data_path.pop_back();
|
||||
}
|
||||
|
||||
std::string user_settings_path = app_data_path + "\\SecondLife\\user_settings\\settings.xml";
|
||||
LLControlGroup settings("global");
|
||||
if (settings.loadFromFile(user_settings_path))
|
||||
{
|
||||
// If user reinstalls or updates, we want to recheck for nsis leftovers.
|
||||
if (settings.controlExists("PreviousInstallChecked"))
|
||||
{
|
||||
settings.setBOOL("PreviousInstallChecked", false);
|
||||
}
|
||||
settings.saveToFile(user_settings_path, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void on_after_install(void* user_data, const char* app_version)
|
||||
|
||||
@@ -275,7 +275,7 @@ LLFontGL* LLViewerChat::getChatFont()
|
||||
break;
|
||||
default:
|
||||
case 1:
|
||||
fontp = LLFontGL::getFontSansSerif();
|
||||
fontp = LLFontGL::getFontSansSerifMedium();
|
||||
break;
|
||||
case 2:
|
||||
fontp = LLFontGL::getFontSansSerifBig();
|
||||
|
||||
@@ -67,12 +67,12 @@ LLViewerParcelOverlay::update_signal_t* LLViewerParcelOverlay::mUpdateSignal = N
|
||||
// [/SL:KB]
|
||||
|
||||
LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters)
|
||||
: mRegion(region),
|
||||
mParcelGridsPerEdge(S32(region_width_meters / PARCEL_GRID_STEP_METERS)),
|
||||
: mRegion( region ),
|
||||
mParcelGridsPerEdge( S32( region_width_meters / PARCEL_GRID_STEP_METERS ) ),
|
||||
// <FS:CR> Aurora Sim
|
||||
mRegionSize(S32(region_width_meters)),
|
||||
// </FS:CR> Aurora Sim
|
||||
mDirty(false),
|
||||
mDirty( false ),
|
||||
mTimeSinceLastUpdate(),
|
||||
mOverlayTextureIdx(-1)
|
||||
{
|
||||
@@ -479,9 +479,9 @@ void LLViewerParcelOverlay::updatePropertyLines()
|
||||
{
|
||||
for (S32 col = 0; col < GRIDS_PER_EDGE; col++)
|
||||
{
|
||||
U8 overlay = mOwnership[row * GRIDS_PER_EDGE + col];
|
||||
U8 overlay = mOwnership[row*GRIDS_PER_EDGE+col];
|
||||
S32 colorIndex = overlay & PARCEL_COLOR_MASK;
|
||||
switch (colorIndex)
|
||||
switch(colorIndex)
|
||||
{
|
||||
case PARCEL_SELF:
|
||||
case PARCEL_GROUP:
|
||||
@@ -495,11 +495,11 @@ void LLViewerParcelOverlay::updatePropertyLines()
|
||||
|
||||
const LLColor4U& color = colors[colorIndex];
|
||||
|
||||
F32 left = col * GRID_STEP;
|
||||
F32 right = left + GRID_STEP;
|
||||
F32 left = col*GRID_STEP;
|
||||
F32 right = left+GRID_STEP;
|
||||
|
||||
F32 bottom = row * GRID_STEP;
|
||||
F32 top = bottom + GRID_STEP;
|
||||
F32 bottom = row*GRID_STEP;
|
||||
F32 top = bottom+GRID_STEP;
|
||||
|
||||
// West edge
|
||||
if (overlay & PARCEL_WEST_LINE)
|
||||
@@ -540,121 +540,99 @@ void LLViewerParcelOverlay::addPropertyLine(F32 start_x, F32 start_y, F32 dx, F3
|
||||
Edge& edge = mEdges.back();
|
||||
edge.color = color;
|
||||
|
||||
// Detailized rendering vertices:
|
||||
// A B C D E F G
|
||||
// *-*------*--------*--------*------*-* : 'outside' vertices are placed right on the border
|
||||
// *------*--------*--------*------* : 'inside' vertices are shifted on LINE_WIDTH inside
|
||||
|
||||
// Simplified rendering vertices:
|
||||
// A G
|
||||
// *-----------------------------------*
|
||||
// *-----------------------------------*
|
||||
|
||||
F32 outside_x = start_x;
|
||||
F32 outside_y = start_y;
|
||||
F32 outside_z = land.resolveHeightRegion(outside_x, outside_y);
|
||||
F32 inside_x = start_x + tick_dx;
|
||||
F32 inside_y = start_y + tick_dy;
|
||||
F32 inside_z = land.resolveHeightRegion(inside_x, inside_y);
|
||||
F32 outside_z = 0.f;
|
||||
F32 inside_x = start_x + tick_dx;
|
||||
F32 inside_y = start_y + tick_dy;
|
||||
F32 inside_z = 0.f;
|
||||
|
||||
auto move = [&](F32 distance)
|
||||
auto split = [&](const LLVector3& start, F32 x, F32 y, F32 z, F32 part)
|
||||
{
|
||||
outside_x += dx * distance;
|
||||
outside_y += dy * distance;
|
||||
outside_z = land.resolveHeightRegion(outside_x, outside_y);
|
||||
inside_x += dx * distance;
|
||||
inside_y += dy * distance;
|
||||
inside_z = land.resolveHeightRegion(inside_x, inside_y);
|
||||
F32 new_x = start.mV[VX] + (x - start.mV[VX]) * part;
|
||||
F32 new_y = start.mV[VY] + (y - start.mV[VY]) * part;
|
||||
F32 new_z = start.mV[VZ] + (z - start.mV[VZ]) * part;
|
||||
edge.vertices.emplace_back(new_x, new_y, new_z);
|
||||
};
|
||||
|
||||
auto split = [&](U32 lod, const LLVector4a& start, F32 x, F32 y, F32 z, F32 part)
|
||||
auto checkForSplit = [&]()
|
||||
{
|
||||
F32 new_x = start[VX] + (x - start[VX]) * part;
|
||||
F32 new_y = start[VY] + (y - start[VY]) * part;
|
||||
edge.pushVertex(lod, new_x, new_y, water_z, 0);
|
||||
};
|
||||
|
||||
auto checkForSplit = [&](U32 lod)
|
||||
{
|
||||
const std::vector<LLVector4a>& vertices = edge.verticesUnderWater[lod];
|
||||
const LLVector4a& last_outside = vertices.back();
|
||||
F32 z0 = last_outside[VZ];
|
||||
const LLVector3& last_outside = edge.vertices.back();
|
||||
F32 z0 = last_outside.mV[VZ];
|
||||
F32 z1 = outside_z;
|
||||
if ((z0 >= water_z && z1 >= water_z) || (z0 < water_z && z1 < water_z))
|
||||
return;
|
||||
F32 part = (water_z - z0) / (z1 - z0);
|
||||
const LLVector4a& last_inside = vertices[vertices.size() - 2];
|
||||
split(lod, last_inside, inside_x, inside_y, inside_z, part);
|
||||
split(lod, last_outside, outside_x, outside_y, outside_z, part);
|
||||
const LLVector3& last_inside = edge.vertices[edge.vertices.size() - 2];
|
||||
split(last_inside, inside_x, inside_y, inside_z, part);
|
||||
split(last_outside, outside_x, outside_y, outside_z, part);
|
||||
};
|
||||
|
||||
auto pushTwoVertices = [&](U32 lod)
|
||||
{
|
||||
LLVector3 out(outside_x, outside_y, outside_z);
|
||||
LLVector3 in(inside_x, inside_y, inside_z);
|
||||
if (fabs(inside_z - outside_z) < LINE_WIDTH / 5)
|
||||
{
|
||||
edge.pushVertex(lod, inside_x, inside_y, inside_z, water_z);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make the line thinner if heights differ too much
|
||||
LLVector3 dist(in - out);
|
||||
F32 coef = dist.length() / LINE_WIDTH;
|
||||
LLVector3 new_in(out + dist / coef);
|
||||
edge.pushVertex(lod, new_in[VX], new_in[VY], new_in[VZ], water_z);
|
||||
}
|
||||
edge.pushVertex(lod, outside_x, outside_y, outside_z, water_z);
|
||||
};
|
||||
// First part, only one vertex
|
||||
outside_z = land.resolveHeightRegion( outside_x, outside_y );
|
||||
|
||||
// Point A simplified (first two vertices)
|
||||
pushTwoVertices(1);
|
||||
edge.vertices.emplace_back(outside_x, outside_y, outside_z);
|
||||
|
||||
// Point A detailized (only one vertex)
|
||||
edge.pushVertex(0, outside_x, outside_y, outside_z, water_z);
|
||||
inside_x += dx * LINE_WIDTH;
|
||||
inside_y += dy * LINE_WIDTH;
|
||||
|
||||
// Point B (two vertices)
|
||||
move(LINE_WIDTH);
|
||||
pushTwoVertices(0);
|
||||
outside_x += dx * LINE_WIDTH;
|
||||
outside_y += dy * LINE_WIDTH;
|
||||
|
||||
// Points C, D, E
|
||||
F32 distance = 1.f - LINE_WIDTH;
|
||||
// Then the "actual edge"
|
||||
inside_z = land.resolveHeightRegion( inside_x, inside_y );
|
||||
outside_z = land.resolveHeightRegion( outside_x, outside_y );
|
||||
|
||||
edge.vertices.emplace_back(inside_x, inside_y, inside_z);
|
||||
edge.vertices.emplace_back(outside_x, outside_y, outside_z);
|
||||
|
||||
inside_x += dx * (dx - LINE_WIDTH);
|
||||
inside_y += dy * (dy - LINE_WIDTH);
|
||||
|
||||
outside_x += dx * (dx - LINE_WIDTH);
|
||||
outside_y += dy * (dy - LINE_WIDTH);
|
||||
|
||||
// Middle part, full width
|
||||
constexpr S32 GRID_STEP = (S32)PARCEL_GRID_STEP_METERS;
|
||||
for (U32 i = 1; i < GRID_STEP; ++i)
|
||||
for (S32 i = 1; i < GRID_STEP; i++)
|
||||
{
|
||||
move(distance);
|
||||
checkForSplit(0);
|
||||
pushTwoVertices(0);
|
||||
distance = 1.f;
|
||||
inside_z = land.resolveHeightRegion( inside_x, inside_y );
|
||||
outside_z = land.resolveHeightRegion( outside_x, outside_y );
|
||||
|
||||
checkForSplit();
|
||||
|
||||
edge.vertices.emplace_back(inside_x, inside_y, inside_z);
|
||||
edge.vertices.emplace_back(outside_x, outside_y, outside_z);
|
||||
|
||||
inside_x += dx;
|
||||
inside_y += dy;
|
||||
|
||||
outside_x += dx;
|
||||
outside_y += dy;
|
||||
}
|
||||
|
||||
// Point F (two vertices)
|
||||
move(1.f - LINE_WIDTH);
|
||||
checkForSplit(0);
|
||||
pushTwoVertices(0);
|
||||
// Extra buffer for edge
|
||||
inside_x -= dx * LINE_WIDTH;
|
||||
inside_y -= dy * LINE_WIDTH;
|
||||
|
||||
// Point G simplified (last two vertices)
|
||||
move(LINE_WIDTH);
|
||||
pushTwoVertices(1);
|
||||
outside_x -= dx * LINE_WIDTH;
|
||||
outside_y -= dy * LINE_WIDTH;
|
||||
|
||||
// Point G detailized (only one vertex)
|
||||
edge.pushVertex(0, outside_x, outside_y, outside_z, water_z);
|
||||
}
|
||||
inside_z = land.resolveHeightRegion( inside_x, inside_y );
|
||||
outside_z = land.resolveHeightRegion( outside_x, outside_y );
|
||||
|
||||
void LLViewerParcelOverlay::Edge::pushVertex(U32 lod, F32 x, F32 y, F32 z, F32 water_z)
|
||||
{
|
||||
verticesUnderWater[lod].emplace_back(x, y, z);
|
||||
gGL.transform(verticesUnderWater[lod].back());
|
||||
checkForSplit();
|
||||
|
||||
if (z >= water_z)
|
||||
{
|
||||
verticesAboveWater[lod].push_back(verticesUnderWater[lod].back());
|
||||
}
|
||||
else
|
||||
{
|
||||
verticesAboveWater[lod].emplace_back(x, y, water_z);
|
||||
gGL.transform(verticesAboveWater[lod].back());
|
||||
}
|
||||
edge.vertices.emplace_back(inside_x, inside_y, inside_z);
|
||||
edge.vertices.emplace_back(outside_x, outside_y, outside_z);
|
||||
|
||||
outside_x += dx * LINE_WIDTH;
|
||||
outside_y += dy * LINE_WIDTH;
|
||||
|
||||
// Last edge is not drawn to the edge
|
||||
outside_z = land.resolveHeightRegion( outside_x, outside_y );
|
||||
|
||||
edge.vertices.emplace_back(outside_x, outside_y, outside_z);
|
||||
}
|
||||
|
||||
void LLViewerParcelOverlay::setDirty()
|
||||
@@ -703,9 +681,6 @@ void LLViewerParcelOverlay::renderPropertyLines()
|
||||
if (!show)
|
||||
return;
|
||||
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
LL_PROFILE_GPU_ZONE("Property Lines");
|
||||
|
||||
LLSurface& land = mRegion->getLand();
|
||||
|
||||
bool render_water = gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER);
|
||||
@@ -743,8 +718,6 @@ void LLViewerParcelOverlay::renderPropertyLines()
|
||||
|
||||
// Stomp the camera into two dimensions
|
||||
LLVector3 camera_region = mRegion->getPosRegionFromGlobal( gAgentCamera.getCameraPositionGlobal() );
|
||||
bool draw_underwater = camera_region.mV[VZ] < water_z ||
|
||||
!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER);
|
||||
|
||||
// Set up a cull plane 2 * PARCEL_GRID_STEP_METERS behind
|
||||
// the camera. The cull plane normal is the camera's at axis.
|
||||
@@ -752,23 +725,15 @@ void LLViewerParcelOverlay::renderPropertyLines()
|
||||
cull_plane_point *= -2.f * PARCEL_GRID_STEP_METERS;
|
||||
cull_plane_point += camera_region;
|
||||
|
||||
bool render_hidden = !draw_underwater &&
|
||||
LLSelectMgr::sRenderHiddenSelections &&
|
||||
LLFloaterReg::instanceVisible("build");
|
||||
bool render_hidden = LLSelectMgr::sRenderHiddenSelections && LLFloaterReg::instanceVisible("build");
|
||||
|
||||
constexpr F32 PROPERTY_LINE_CLIP_DIST_SQUARED = 256.f * 256.f;
|
||||
const F32 PROPERTY_LINE_LOD0_DIST_SQUARED = PROPERTY_LINE_CLIP_DIST_SQUARED / 25;
|
||||
|
||||
for (const Edge& edge : mEdges)
|
||||
{
|
||||
const std::vector<LLVector4a>& vertices0 = edge.verticesAboveWater[0];
|
||||
const F32* first = vertices0.front().getF32ptr();
|
||||
const F32* last = vertices0.back().getF32ptr();
|
||||
LLVector3 center((first[VX] + last[VX]) / 2, (first[VY] + last[VY]) / 2, (first[VZ] + last[VZ]) / 2);
|
||||
gGL.untransform(center);
|
||||
LLVector3 center = edge.vertices[edge.vertices.size() >> 1];
|
||||
|
||||
F32 dist_squared = dist_vec_squared(center, camera_region);
|
||||
if (dist_squared > PROPERTY_LINE_CLIP_DIST_SQUARED)
|
||||
if (dist_vec_squared2D(center, camera_region) > PROPERTY_LINE_CLIP_DIST_SQUARED)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -782,33 +747,43 @@ void LLViewerParcelOverlay::renderPropertyLines()
|
||||
continue;
|
||||
}
|
||||
|
||||
U32 lod = dist_squared < PROPERTY_LINE_LOD0_DIST_SQUARED ? 0 : 1;
|
||||
|
||||
gGL.begin(LLRender::TRIANGLE_STRIP);
|
||||
|
||||
gGL.color4ubv(edge.color.mV);
|
||||
|
||||
if (draw_underwater)
|
||||
for (const LLVector3& vertex : edge.vertices)
|
||||
{
|
||||
gGL.vertexBatchPreTransformed(edge.verticesUnderWater[lod]);
|
||||
}
|
||||
else
|
||||
{
|
||||
gGL.vertexBatchPreTransformed(edge.verticesAboveWater[lod]);
|
||||
|
||||
if (render_hidden)
|
||||
if (render_hidden || camera_z < water_z || vertex.mV[2] >= water_z)
|
||||
{
|
||||
LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER);
|
||||
|
||||
LLColor4U color = edge.color;
|
||||
color.mV[VALPHA] /= 4;
|
||||
gGL.color4ubv(color.mV);
|
||||
|
||||
gGL.vertexBatchPreTransformed(edge.verticesUnderWater[lod]);
|
||||
gGL.vertex3fv(vertex.mV);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVector3 visible = vertex;
|
||||
visible.mV[VZ] = water_z;
|
||||
gGL.vertex3fv(visible.mV);
|
||||
}
|
||||
}
|
||||
|
||||
gGL.end();
|
||||
|
||||
if (render_hidden)
|
||||
{
|
||||
LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER);
|
||||
|
||||
gGL.begin(LLRender::TRIANGLE_STRIP);
|
||||
|
||||
LLColor4U color = edge.color;
|
||||
color.mV[VALPHA] /= 4;
|
||||
gGL.color4ubv(color.mV);
|
||||
|
||||
for (const LLVector3& vertex : edge.vertices)
|
||||
{
|
||||
gGL.vertex3fv(vertex.mV);
|
||||
}
|
||||
|
||||
gGL.end();
|
||||
}
|
||||
}
|
||||
|
||||
gGL.popMatrix();
|
||||
|
||||
@@ -127,10 +127,7 @@ private:
|
||||
|
||||
struct Edge
|
||||
{
|
||||
void pushVertex(U32 lod, F32 x, F32 y, F32 z, F32 water_z);
|
||||
// LOD: 0 - detailized, 1 - simplified
|
||||
std::vector<LLVector4a> verticesAboveWater[2];
|
||||
std::vector<LLVector4a> verticesUnderWater[2];
|
||||
std::vector<LLVector3> vertices;
|
||||
LLColor4U color;
|
||||
};
|
||||
|
||||
|
||||
@@ -3194,6 +3194,13 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
|
||||
LL_WARNS("Voice") << "Expected object from data channel:" << data << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
bool is_primary_region = mPrimary;
|
||||
if (!mPrimary && isSpatial() && gAgent.getRegion())
|
||||
{
|
||||
is_primary_region = (mRegionID == gAgent.getRegion()->getRegionID());
|
||||
LL_WARNS() << "mPrimary is false, expected: " << is_primary_region << " connection state: " << getVoiceConnectionState() << LL_ENDL;
|
||||
}
|
||||
boost::json::object voice_data = voice_data_parsed.as_object();
|
||||
boost::json::object mute;
|
||||
boost::json::object user_gain;
|
||||
@@ -3283,7 +3290,7 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
|
||||
if (isSpatial())
|
||||
{
|
||||
// ignore muted flags from non-primary server
|
||||
if (mPrimary || primary)
|
||||
if (is_primary_region || primary)
|
||||
{
|
||||
participant->mIsModeratorMuted = is_moderator_muted;
|
||||
if (gAgentID == agent_id)
|
||||
@@ -3301,11 +3308,15 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isSpatial() && (mPrimary || primary))
|
||||
if (isSpatial() && (is_primary_region || primary))
|
||||
{
|
||||
// mute info message can be received before join message, so try to mute again later
|
||||
if (participant_obj.contains("m") && participant_obj["m"].is_bool())
|
||||
{
|
||||
LL_WARNS() << "Mute info msg received: " << participant_obj["m"].as_bool()
|
||||
<< " but participant " << agent_id
|
||||
<< " was not found in channel " << mChannelID << LL_ENDL;
|
||||
|
||||
bool is_moderator_muted = participant_obj["m"].as_bool();
|
||||
std::string channel_id = mChannelID;
|
||||
F32 delay { 1.5f };
|
||||
@@ -3317,11 +3328,16 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
|
||||
if (participant)
|
||||
{
|
||||
participant->mIsModeratorMuted = is_moderator_muted;
|
||||
LL_WARNS() << "Participant " << agent_id << " is found after delay, is_muted: " << is_moderator_muted << LL_ENDL;
|
||||
if (gAgentID == agent_id)
|
||||
{
|
||||
LLNearbyVoiceModeration::getInstance()->setMutedInfo(channel_id, is_moderator_muted);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Participant " << agent_id << " is still not found in channel " << channel_id << LL_ENDL;
|
||||
}
|
||||
}, delay);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Joystick" title="JOYSTICK OPSÆTNING">
|
||||
<check_box label="Aktiver Joystick:" name="enable_joystick"/>
|
||||
<spinner label="X akse mapping" name="JoystickAxis1"/>
|
||||
<spinner label="Y akse mapping" name="JoystickAxis2"/>
|
||||
<spinner label="Z akse mapping" name="JoystickAxis0"/>
|
||||
<spinner label="Hældning mapping" name="JoystickAxis4"/>
|
||||
<spinner label="Drejning mapping" name="JoystickAxis5"/>
|
||||
<spinner label="Rulning mapping" name="JoystickAxis3"/>
|
||||
<spinner label="Zoom mapping" name="JoystickAxis6"/>
|
||||
<spinner label="X akse mapping" name="JoystickAxis1" label_width="115" width="155"/>
|
||||
<spinner label="Y akse mapping" name="JoystickAxis2" label_width="115" width="155"/>
|
||||
<spinner label="Z akse mapping" name="JoystickAxis0" label_width="115" width="155"/>
|
||||
<spinner label="Hældning mapping" name="JoystickAxis4" label_width="115" width="155"/>
|
||||
<spinner label="Drejning mapping" name="JoystickAxis5" label_width="115" width="155"/>
|
||||
<spinner label="Rulning mapping" name="JoystickAxis3" label_width="115" width="155"/>
|
||||
<spinner label="Zoom mapping" name="JoystickAxis6" label_width="115" width="155"/>
|
||||
<check_box label="Direkte zoom" name="ZoomDirect"/>
|
||||
<check_box label="3D Cursor" name="Cursor3D"/>
|
||||
<check_box label="Auto opret" name="AutoLeveling"/>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<text name="media_label">
|
||||
Indtast en URL eller et URL mønster for at tilføje til listen med godkendte domæner
|
||||
</text>
|
||||
<line_editor name="whitelist_entry" tool_tip="Indtast en URL eller et URL mønster for at godkende side(r)"/>
|
||||
<line_editor name="whitelist_entry" tool_tip="Indtast en URL eller et URL mønster for at godkende side(r)" bottom_delta="25"/>
|
||||
<button label="OK" name="ok_btn"/>
|
||||
<button label="Annullér" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
||||
@@ -1663,7 +1663,7 @@ Only large parcels can be listed in search.
|
||||
left="10"
|
||||
name="with media:"
|
||||
top="10"
|
||||
width="100">
|
||||
width="110">
|
||||
Type:
|
||||
</text>
|
||||
<combo_box
|
||||
@@ -1689,7 +1689,7 @@ Only large parcels can be listed in search.
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="at URL:"
|
||||
width="100"
|
||||
width="110"
|
||||
top_pad="10">
|
||||
Home Page:
|
||||
</text>
|
||||
@@ -1701,7 +1701,7 @@ Only large parcels can be listed in search.
|
||||
max_length_bytes="255"
|
||||
name="media_url"
|
||||
select_on_focus="true"
|
||||
width="300"
|
||||
width="290"
|
||||
top_delta="0"/>
|
||||
<button
|
||||
follows="right|top"
|
||||
@@ -1728,13 +1728,13 @@ Only large parcels can be listed in search.
|
||||
follows="left|top"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="110"
|
||||
left="120"
|
||||
max_length_bytes="255"
|
||||
name="url_description"
|
||||
select_on_focus="true"
|
||||
tool_tip="Text displayed next to play/load button"
|
||||
top_delta="0"
|
||||
width="300" />
|
||||
width="290" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
@@ -1754,7 +1754,7 @@ Only large parcels can be listed in search.
|
||||
follows="left|top"
|
||||
height="80"
|
||||
layout="topleft"
|
||||
left="110"
|
||||
left="120"
|
||||
name="media texture"
|
||||
tool_tip="Click to choose a picture"
|
||||
top_delta="0"
|
||||
@@ -1767,7 +1767,7 @@ Only large parcels can be listed in search.
|
||||
layout="topleft"
|
||||
left_pad="8"
|
||||
name="replace_texture_help"
|
||||
width="300"
|
||||
width="290"
|
||||
word_wrap="true"
|
||||
top_delta="0">
|
||||
Objects using this texture will show the movie or web page after you click the play arrow. Select the thumbnail to choose a different texture.
|
||||
@@ -1776,7 +1776,7 @@ Only large parcels can be listed in search.
|
||||
height="16"
|
||||
label="Auto scale"
|
||||
layout="topleft"
|
||||
left="107"
|
||||
left="117"
|
||||
name="media_auto_scale"
|
||||
top_pad="-10"
|
||||
tool_tip="Checking this option will scale the content for this parcel automatically. It may be slightly slower and lower quality visually but no other texture scaling or alignment will be required."
|
||||
@@ -1790,7 +1790,7 @@ Only large parcels can be listed in search.
|
||||
left="10"
|
||||
name="media_size"
|
||||
tool_tip="Size to render Web media, leave 0 for default."
|
||||
width="100"
|
||||
width="110"
|
||||
top_pad="10">
|
||||
Size:
|
||||
</text>
|
||||
@@ -1845,7 +1845,7 @@ Only large parcels can be listed in search.
|
||||
left="10"
|
||||
name="Options:"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
width="110">
|
||||
Options:
|
||||
</text>
|
||||
<check_box
|
||||
@@ -1855,7 +1855,7 @@ Only large parcels can be listed in search.
|
||||
left_pad="-3"
|
||||
name="media_loop"
|
||||
tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."
|
||||
top_delta="-1"
|
||||
top_delta="1"
|
||||
width="200" />
|
||||
</panel>
|
||||
<panel
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
follows="top|left|right"
|
||||
height="24"
|
||||
label="Get started"
|
||||
font="SansSerifMedium"
|
||||
layout="topleft"
|
||||
left="320"
|
||||
name="continue_btn"
|
||||
@@ -59,6 +58,7 @@
|
||||
image_hover_unselected="PushButton_Login_Over"
|
||||
label_color="White"
|
||||
top_pad ="15"
|
||||
pad_bottom="1"
|
||||
width="140"/>
|
||||
<button
|
||||
follows="top|left|right"
|
||||
@@ -66,6 +66,7 @@
|
||||
label="Later"
|
||||
layout="topleft"
|
||||
left_pad="9"
|
||||
pad_bottom="1"
|
||||
name="close_btn"
|
||||
width="90"/>
|
||||
<icon
|
||||
@@ -97,7 +98,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
height="75"
|
||||
width="260"
|
||||
@@ -112,7 +112,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
height="75"
|
||||
width="260"
|
||||
@@ -126,7 +125,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
height="75"
|
||||
width="260"
|
||||
|
||||
@@ -47,15 +47,15 @@
|
||||
name="ambient_lbl"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
left="7"
|
||||
top="5"
|
||||
width="80">Ambient:</text>
|
||||
width="80">Ambient</text>
|
||||
<color_swatch can_apply_immediately="true"
|
||||
follows="left|top"
|
||||
height="40"
|
||||
label_height="0"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left_delta="3"
|
||||
name="ambient_light"
|
||||
top_pad="5"
|
||||
width="60"/>
|
||||
@@ -63,15 +63,15 @@
|
||||
name="blue_horizon_lbl"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left="7"
|
||||
top_pad="10"
|
||||
width="80">Blue Horizon:</text>
|
||||
width="80">Blue Horizon</text>
|
||||
<color_swatch can_apply_immediately="true"
|
||||
follows="left|top"
|
||||
height="40"
|
||||
label_height="0"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left_delta="3"
|
||||
name="blue_horizon"
|
||||
top_pad="5"
|
||||
width="60"/>
|
||||
@@ -79,15 +79,15 @@
|
||||
name="blue_density_lbl"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left="7"
|
||||
top_pad="10"
|
||||
width="80">Blue Density:</text>
|
||||
width="80">Blue Density</text>
|
||||
<color_swatch can_apply_immediately="true"
|
||||
follows="left|top"
|
||||
height="40"
|
||||
label_height="0"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left_delta="3"
|
||||
name="blue_density"
|
||||
top_pad="5"
|
||||
width="60"/>
|
||||
@@ -123,7 +123,7 @@
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="5"
|
||||
width="80">Cloud Color:</text>
|
||||
width="80">Cloud Color</text>
|
||||
<color_swatch can_apply_immediately="true"
|
||||
follows="left|top"
|
||||
height="10"
|
||||
@@ -139,7 +139,7 @@
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
name="cloud_map_label"
|
||||
width="80">Cloud Image:</text>
|
||||
width="80">Cloud Image</text>
|
||||
<texture_picker height="63"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
@@ -152,7 +152,7 @@
|
||||
left_delta="0"
|
||||
top_pad="-13"
|
||||
name="water_map_label"
|
||||
width="80">Water Image:</text>
|
||||
width="80">Water Image</text>
|
||||
<texture_picker height="63"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
|
||||
@@ -93,7 +93,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
@@ -105,7 +104,6 @@
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
font="SansSerifMedium"
|
||||
follows="top|left"
|
||||
halign="right"
|
||||
height="16"
|
||||
@@ -128,7 +126,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
@@ -140,7 +137,6 @@
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
font="SansSerifMedium"
|
||||
follows="top|left"
|
||||
halign="right"
|
||||
height="16"
|
||||
@@ -163,7 +159,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
font.style="BOLD"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
@@ -176,7 +171,6 @@
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
font="SansSerifMedium"
|
||||
follows="top|left"
|
||||
halign="right"
|
||||
height="16"
|
||||
@@ -207,7 +201,6 @@
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
font="SansSerifMedium"
|
||||
height="16"
|
||||
top_pad="15"
|
||||
layout="topleft"
|
||||
@@ -217,7 +210,6 @@
|
||||
Choose amount to buy
|
||||
</text>
|
||||
<text
|
||||
font="SansSerifMedium"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
@@ -233,7 +225,6 @@
|
||||
type="string"
|
||||
max_length_bytes="10"
|
||||
halign="right"
|
||||
font="SansSerifMedium"
|
||||
select_on_focus="true"
|
||||
follows="top|left"
|
||||
top_delta="-4"
|
||||
@@ -247,7 +238,6 @@
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
font="SansSerifMedium"
|
||||
text_color="EmphasisColor"
|
||||
follows="top|left"
|
||||
halign="right"
|
||||
@@ -276,7 +266,6 @@
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
font="SansSerifMedium"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
height="16"
|
||||
@@ -290,7 +279,6 @@
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
font="SansSerifMedium"
|
||||
follows="top|left"
|
||||
top_delta="0"
|
||||
height="16"
|
||||
@@ -350,7 +338,6 @@ Re-enter amount to see the latest exchange rate.
|
||||
length="1"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
font="SansSerifMedium"
|
||||
top="10"
|
||||
left="20"
|
||||
width="310"
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
width="110"
|
||||
width="113"
|
||||
label="Clone Track From"
|
||||
left="10"
|
||||
top_pad="10"
|
||||
@@ -298,7 +298,7 @@
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
width="110"
|
||||
width="113"
|
||||
label="Load Track From"
|
||||
top_pad="0"
|
||||
left_delta="0"
|
||||
@@ -306,7 +306,7 @@
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
width="110"
|
||||
width="113"
|
||||
label="Clear Track"
|
||||
top_pad="0"
|
||||
left_delta="0"
|
||||
|
||||
@@ -526,7 +526,7 @@
|
||||
height="16"
|
||||
label="Disable Physics"
|
||||
layout="topleft"
|
||||
left_delta="120"
|
||||
left_delta="136"
|
||||
name="disable physics"
|
||||
tool_tip="Set this to disable all physics in this region"
|
||||
top_delta="0"
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
left_pad="12"
|
||||
top_delta="2"
|
||||
name="multi_folder_txt"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
width="300">
|
||||
Double-click on folder in multi-folder view:
|
||||
@@ -37,7 +36,6 @@
|
||||
follows="left|top"
|
||||
top_pad="8"
|
||||
layout="topleft"
|
||||
font="SansSerifMedium"
|
||||
left="60"
|
||||
width="300"
|
||||
height="66"
|
||||
@@ -90,7 +88,6 @@
|
||||
left_pad="12"
|
||||
top_delta="2"
|
||||
name="single_folder_txt"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
width="300">
|
||||
Double-click on folder in single-folder view:
|
||||
@@ -100,7 +97,6 @@
|
||||
follows="left|top"
|
||||
top_pad="8"
|
||||
layout="topleft"
|
||||
font="SansSerifMedium"
|
||||
left="60"
|
||||
width="300"
|
||||
height="44"
|
||||
@@ -142,7 +138,6 @@
|
||||
layout="topleft"
|
||||
left_pad="13"
|
||||
name="find_original_txt"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
top_delta="1"
|
||||
width="310">
|
||||
@@ -153,7 +148,6 @@
|
||||
follows="left|top"
|
||||
top_pad="8"
|
||||
layout="topleft"
|
||||
font="SansSerifMedium"
|
||||
left="60"
|
||||
width="300"
|
||||
height="44"
|
||||
@@ -196,7 +190,6 @@
|
||||
left_pad="12"
|
||||
top_delta="2"
|
||||
name="favorites_txt"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
width="300">
|
||||
Favorites
|
||||
@@ -206,7 +199,6 @@
|
||||
layout="topleft"
|
||||
follows="left|top"
|
||||
top_pad="8"
|
||||
font="SansSerifMedium"
|
||||
left="60"
|
||||
width="300"
|
||||
height="18"
|
||||
@@ -219,7 +211,6 @@
|
||||
follows="left|top"
|
||||
top_pad="5"
|
||||
layout="topleft"
|
||||
font="SansSerifMedium"
|
||||
left="60"
|
||||
width="150"
|
||||
height="18"
|
||||
@@ -232,7 +223,6 @@
|
||||
follows="left|top"
|
||||
top_pad="5"
|
||||
layout="topleft"
|
||||
font="SansSerifMedium"
|
||||
left="60"
|
||||
width="150"
|
||||
height="18"
|
||||
@@ -276,7 +266,6 @@
|
||||
left_pad="12"
|
||||
top_delta="2"
|
||||
name="attachment_return_txt"
|
||||
font="SansSerifMedium"
|
||||
text_color="White"
|
||||
width="420">
|
||||
Pressing enter or double clicking on an avatar attachment
|
||||
|
||||
@@ -65,10 +65,10 @@
|
||||
text_color="White"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="395"
|
||||
left="392"
|
||||
top="7"
|
||||
name="fps_desc1_lbl"
|
||||
width="150">
|
||||
width="153">
|
||||
Allow 5-10 seconds for
|
||||
</text>
|
||||
<text
|
||||
@@ -78,7 +78,7 @@
|
||||
layout="topleft"
|
||||
top_pad="-3"
|
||||
name="fps_desc2_lbl"
|
||||
width="150">
|
||||
width="153">
|
||||
changes to take full effect.
|
||||
</text>
|
||||
</panel>
|
||||
@@ -265,7 +265,7 @@
|
||||
left="10"
|
||||
name="complexity_info"
|
||||
top_pad="0"
|
||||
width="455">
|
||||
width="490">
|
||||
Reduce the complexity of your avatar if you aren't satisfied with current FPS.
|
||||
</text>
|
||||
<icon
|
||||
|
||||
@@ -664,7 +664,7 @@
|
||||
increment="8"
|
||||
initial_value="160"
|
||||
label="Sky:"
|
||||
label_width="145"
|
||||
label_width="164"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
min_val="16"
|
||||
@@ -750,7 +750,7 @@
|
||||
control_name="RenderShadowDetail"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="ShadowDetail"
|
||||
width="150">
|
||||
@@ -800,7 +800,7 @@
|
||||
control_name="RenderReflectionProbeDetail"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="ReflectionDetail"
|
||||
width="150">
|
||||
@@ -836,7 +836,7 @@
|
||||
control_name="RenderReflectionProbeLevel"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="ReflectionLevel"
|
||||
width="150">
|
||||
@@ -868,7 +868,7 @@
|
||||
name="ReflectionProbeCount"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="22"
|
||||
width="128">
|
||||
width="130">
|
||||
Max Reflection Probes:
|
||||
</text>
|
||||
|
||||
@@ -877,7 +877,7 @@
|
||||
height="18"
|
||||
layout="topleft"
|
||||
label="Max. Reflection Probes:"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="ProbeCount"
|
||||
width="150">
|
||||
@@ -911,7 +911,7 @@
|
||||
increment="0.1"
|
||||
initial_value="160"
|
||||
label="Exposure:"
|
||||
label_width="145"
|
||||
label_width="164"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
min_val="0.5"
|
||||
@@ -955,7 +955,7 @@
|
||||
control_name="RenderHeroProbeResolution"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="MirrorResolution"
|
||||
width="150">
|
||||
@@ -995,7 +995,7 @@
|
||||
control_name="RenderHeroProbeUpdateRate"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="HeroProbeUpdateRate"
|
||||
width="150">
|
||||
@@ -1026,7 +1026,7 @@
|
||||
increment="0.1"
|
||||
initial_value="160"
|
||||
label="Sharpening:"
|
||||
label_width="145"
|
||||
label_width="164"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
min_val="0.0"
|
||||
@@ -1055,7 +1055,7 @@
|
||||
control_name="RenderTonemapType"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
left_delta="175"
|
||||
top_delta="0"
|
||||
name="TonemapType"
|
||||
width="150">
|
||||
@@ -1077,7 +1077,7 @@
|
||||
initial_value="1"
|
||||
label="Tone Mapping Mix:"
|
||||
tool_tip="Mix between linear and tone mapped colors"
|
||||
label_width="145"
|
||||
label_width="164"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
min_val="0.0"
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
follows="left|top|right"
|
||||
height="16"
|
||||
name="trusted_txt"
|
||||
font="SansSerifMedium"
|
||||
text_color="white"
|
||||
layout="topleft"
|
||||
left="16">
|
||||
|
||||
@@ -7,303 +7,234 @@
|
||||
name="floater_test_textbox"
|
||||
help_topic="floater_test_textbox"
|
||||
translate="false"
|
||||
width="875"
|
||||
title="Textbox Tests">
|
||||
width="800">
|
||||
<text
|
||||
clip_partial="true"
|
||||
top_pad="10"
|
||||
left="10"
|
||||
width="267"
|
||||
height="28"
|
||||
layout="topleft"
|
||||
follows="right|left"
|
||||
text_color="white"
|
||||
use_ellipses="true"
|
||||
word_wrap="true"
|
||||
mouse_opaque="false"
|
||||
name="title" >
|
||||
This text has word_wrap set true, use_ellipses set true, and clip_partial set true, so it should wrap around, spilling over to the last line, then clip the last partial line and show ellipses to indicate there is more text
|
||||
</text>
|
||||
|
||||
<text
|
||||
clip_partial="true"
|
||||
top="25"
|
||||
left="10"
|
||||
width="267"
|
||||
height="28"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
text_color="white"
|
||||
use_ellipses="true"
|
||||
word_wrap="true"
|
||||
mouse_opaque="false"
|
||||
name="title" >
|
||||
This text has word_wrap set true, use_ellipses set true, and clip_partial set true, so it should wrap around, spilling over to the last line, then clip the last partial line and show ellipses to indicate there is more text
|
||||
</text>
|
||||
|
||||
<text
|
||||
font="SansSerif"
|
||||
height="30"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="650">
|
||||
SansSerif
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
</text>
|
||||
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="ITALIC"
|
||||
height="30"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="650">
|
||||
SansSerif ITALIC
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
</text>
|
||||
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="UNDERLINE"
|
||||
height="30"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="650">
|
||||
SansSerif UNDERLINE
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
</text>
|
||||
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="BOLD"
|
||||
height="30"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="650">
|
||||
SansSerif BOLD
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
</text>
|
||||
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="BOLD|ITALIC"
|
||||
height="30"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="650">
|
||||
SansSerif BOLD ITALIC
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
</text>
|
||||
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="BOLD|UNDERLINE"
|
||||
height="30"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="650">
|
||||
SansSerif BOLD UNDERLINE
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
</text>
|
||||
|
||||
|
||||
<text
|
||||
top_pad="20"
|
||||
left="10"
|
||||
right="-10"
|
||||
height="30"
|
||||
follows="top|left"
|
||||
font.name="SansSerifSmall"
|
||||
name="test_text10"
|
||||
tool_tip="text">
|
||||
SansSerifSmall
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
right="-10"
|
||||
height="30"
|
||||
follows="top|left"
|
||||
font.name="SansSerifMedium"
|
||||
name="test_text11"
|
||||
tool_tip="text">
|
||||
SansSerif
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
right="-10"
|
||||
follows="top|left"
|
||||
height="40"
|
||||
font.name="SansSerifLarge"
|
||||
name="test_text12"
|
||||
tool_tip="text">
|
||||
SansSerifLarge
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="50"
|
||||
right="-10"
|
||||
follows="top|left"
|
||||
font.name="SansSerifHuge"
|
||||
name="test_text13"
|
||||
tool_tip="text">
|
||||
SansSerifHuge
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
|
||||
|
||||
<!-- next column -->
|
||||
<text
|
||||
top="25"
|
||||
left="400"
|
||||
name="right_aligned_text"
|
||||
width="250"
|
||||
height="20"
|
||||
halign="right"
|
||||
top_pad="10">
|
||||
Right aligned text
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
name="centered_text"
|
||||
width="250"
|
||||
height="20"
|
||||
halign="center">
|
||||
Centered text
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
name="left_aligned_text"
|
||||
width="250"
|
||||
height="20"
|
||||
halign="left">
|
||||
Left aligned text
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
name="v_pad_text"
|
||||
width="250"
|
||||
height="40"
|
||||
halign="left"
|
||||
v_pad="10">
|
||||
v_pad = 10, height = 40
|
||||
</text>
|
||||
|
||||
<text
|
||||
top_pad="10"
|
||||
name="v_pad_text"
|
||||
width="250"
|
||||
height="40"
|
||||
halign="left"
|
||||
h_pad="30">
|
||||
h_pad = 30, height = 40
|
||||
</text>
|
||||
|
||||
|
||||
<!-- next column -->
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|right"
|
||||
right="-10"
|
||||
name="test_text_editor"
|
||||
tool_tip="text editor"
|
||||
top="25"
|
||||
width="200">
|
||||
Text Editor
|
||||
</text_editor>
|
||||
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
left_delta="0"
|
||||
name="long_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="BOLD"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="300">
|
||||
SansSerif BOLD
|
||||
</text>
|
||||
<text
|
||||
font="SansSerif"
|
||||
font.style="BOLD|UNDERLINE"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="10"
|
||||
width="300">
|
||||
SansSerif BOLD UNDERLINE
|
||||
</text>
|
||||
<text
|
||||
bottom="390"
|
||||
left="10"
|
||||
name="right_aligned_text"
|
||||
width="300"
|
||||
halign="right"
|
||||
top_pad="10">
|
||||
Right aligned text
|
||||
</text>
|
||||
<text
|
||||
bottom="390"
|
||||
left="10"
|
||||
name="centered_text"
|
||||
width="300"
|
||||
halign="center"
|
||||
top_pad="10">
|
||||
Centered text
|
||||
</text>
|
||||
<text
|
||||
left="10"
|
||||
name="left_aligned_text"
|
||||
width="300"
|
||||
halign="left"
|
||||
top_pad="10">
|
||||
Left aligned text
|
||||
</text>
|
||||
<text
|
||||
left="10"
|
||||
name="v_pad_text"
|
||||
height="40"
|
||||
width="300"
|
||||
halign="left"
|
||||
top_pad="10"
|
||||
v_pad="10">
|
||||
v_pad = 10, height = 40
|
||||
</text>
|
||||
<text
|
||||
left="10"
|
||||
name="v_pad_text1"
|
||||
height="40"
|
||||
width="300"
|
||||
halign="left"
|
||||
top_pad="10"
|
||||
h_pad="30">
|
||||
h_pad = 30, height = 40
|
||||
</text>
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
right="-10"
|
||||
height="20"
|
||||
follows="top|left"
|
||||
font.name="SansSerifSmall"
|
||||
name="test_text10"
|
||||
tool_tip="text">
|
||||
SansSerif
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
right="-10"
|
||||
height="25"
|
||||
follows="top|left"
|
||||
font.name="SansSerifMedium"
|
||||
name="test_text11"
|
||||
tool_tip="text">
|
||||
SansSerifMedium
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
right="-10"
|
||||
follows="top|left"
|
||||
height="26"
|
||||
font.name="SansSerifLarge"
|
||||
name="test_text12"
|
||||
tool_tip="text">
|
||||
SansSerifLarge
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
<text
|
||||
top_pad="10"
|
||||
left="10"
|
||||
height="35"
|
||||
right="-10"
|
||||
follows="top|left"
|
||||
font.name="SansSerifHuge"
|
||||
name="test_text13"
|
||||
tool_tip="text">
|
||||
SansSerifHuge
|
||||
The 华文细黑 brown fox ヒラキjumped over the lazy dog.
|
||||
</text>
|
||||
|
||||
<!-- next column -->
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
left="400"
|
||||
name="test_text_editor"
|
||||
tool_tip="text editor"
|
||||
top="25"
|
||||
width="200">
|
||||
Text Editor
|
||||
</text_editor>
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
left_delta="0"
|
||||
name="long_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
Text Editor
|
||||
with multiple
|
||||
lines of text
|
||||
and hence a
|
||||
scroll bar
|
||||
</text_editor>
|
||||
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
left_delta="0"
|
||||
max_length="65536"
|
||||
name="blob_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200"
|
||||
word_wrap="true">
|
||||
</text_editor>
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
left_delta="0"
|
||||
max_length="65536"
|
||||
name="blob_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200"
|
||||
word_wrap="true">
|
||||
Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others.
|
||||
</text_editor>
|
||||
|
||||
</text_editor>
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
font="Monospace"
|
||||
left_delta="0"
|
||||
name="monospace_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
font="Monospace"
|
||||
left_delta="0"
|
||||
name="monospace_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
Text Editor
|
||||
with multiple
|
||||
lines of text
|
||||
and hence a
|
||||
scroll bar gjyrrr
|
||||
</text_editor>
|
||||
|
||||
</text_editor>
|
||||
<text_editor
|
||||
border_visible="true"
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
font="Monospace"
|
||||
left_delta="0"
|
||||
name="monospace_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
border_visible="true"
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
font="Monospace"
|
||||
left_delta="0"
|
||||
name="monospace_text_editor1"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
Text Editor
|
||||
with multiple
|
||||
lines of text
|
||||
and hence a
|
||||
scroll bar gjyrrr
|
||||
</text_editor>
|
||||
|
||||
</text_editor>
|
||||
<text_editor
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
font="SansSerif"
|
||||
left_delta="0"
|
||||
name="sansserif_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
height="50"
|
||||
follows="top|left|bottom"
|
||||
font="SansSerif"
|
||||
left_delta="0"
|
||||
name="sansserif_text_editor"
|
||||
tool_tip="text editor"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
Text Editor
|
||||
with multiple
|
||||
lines of text
|
||||
and hence a
|
||||
scroll bar gjyrrr
|
||||
</text_editor>
|
||||
</text_editor>
|
||||
|
||||
<text
|
||||
height="40"
|
||||
follows="top|left|bottom"
|
||||
layout="topleft"
|
||||
name="test_text_box"
|
||||
tool_tip="text box"
|
||||
top_pad="5"
|
||||
width="200">
|
||||
<text
|
||||
height="40"
|
||||
follows="top|left|bottom"
|
||||
layout="topleft"
|
||||
name="test_text_box"
|
||||
tool_tip="text box"
|
||||
top_pad="5"
|
||||
width="200">
|
||||
Text box
|
||||
with
|
||||
multiple lines
|
||||
and too many lines
|
||||
to actually fit
|
||||
</text>
|
||||
|
||||
</text>
|
||||
</floater>
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
width="975">
|
||||
<text
|
||||
follows="left|top"
|
||||
font="SansSerifMedium"
|
||||
valign="top"
|
||||
halign="left"
|
||||
height="20"
|
||||
@@ -31,7 +30,6 @@
|
||||
</text>
|
||||
<text
|
||||
follows="left|top"
|
||||
font="SansSerifMedium"
|
||||
valign="top"
|
||||
halign="left"
|
||||
height="20"
|
||||
@@ -49,7 +47,7 @@
|
||||
button_display_mode="icons_with_text"
|
||||
follows="all"
|
||||
left="20"
|
||||
button_icon_and_text.button_width.max="140"
|
||||
button_icon_and_text.button_width.max="172"
|
||||
button_icon_and_text.button_width.min="70"
|
||||
name="toybox_toolbar"
|
||||
pad_left="5"
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
title="Whitelist Entry"
|
||||
width="390">
|
||||
|
||||
<text type="string" length="1" bottom="20" follows="top|left" height="15" layout="topleft"
|
||||
left="10" name="media_label" top="20">
|
||||
<text type="string" length="1" follows="top|left|right" height="30" layout="topleft"
|
||||
left="10" name="media_label" top="20" right="-10" word_wrap="true">
|
||||
Enter a URL or URL pattern to add to the list of allowed domains
|
||||
</text>
|
||||
|
||||
<line_editor bottom_delta="40" enabled="true" follows="left|top" font="SansSerif"
|
||||
<line_editor bottom_delta="15" enabled="true" follows="left|top" font="SansSerif"
|
||||
height="20" left="10" name="whitelist_entry"
|
||||
tool_tip="Enter a URL or URL pattern to White List"
|
||||
width="350" />
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="5"
|
||||
width="102"
|
||||
width="105"
|
||||
name="roughness_factor_lbl">
|
||||
Roughness Factor
|
||||
</text>
|
||||
|
||||
@@ -301,7 +301,6 @@ Maximum 200 per group daily
|
||||
width="400">
|
||||
<text
|
||||
type="string"
|
||||
font="SansSerifMedium"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
bg_alpha_color="HintBg"
|
||||
height="34">
|
||||
<text name="hint_title"
|
||||
font="SansSerifMedium"
|
||||
left="8"
|
||||
right="180"
|
||||
top="8"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
height="40"
|
||||
layout="topleft">
|
||||
<text name="hint_title"
|
||||
font="SansSerifMedium"
|
||||
left="8"
|
||||
right="290"
|
||||
top="8"
|
||||
|
||||
@@ -271,7 +271,7 @@
|
||||
<combo_box.drop_down_button
|
||||
pad_bottom="1"
|
||||
pad_left="10"
|
||||
font="SansSerif"
|
||||
font="SansSerifLarge"
|
||||
label_color="Black"
|
||||
label_color_selected="Black"
|
||||
draw_focus_border="false"
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
left="2"
|
||||
width="306"
|
||||
halign="center"
|
||||
font="SansSerifMedium"
|
||||
font_shadow="hard"
|
||||
valign="top">
|
||||
Drop folders here to create new listings
|
||||
|
||||
@@ -69,7 +69,6 @@
|
||||
<button
|
||||
control_name="InventoryInboxToggleState"
|
||||
label="Received items"
|
||||
font="SansSerifMedium"
|
||||
name="inbox_btn"
|
||||
height="35"
|
||||
image_unselected="MarketplaceBtn_Off"
|
||||
@@ -100,7 +99,6 @@
|
||||
top="10"
|
||||
right="-58"
|
||||
name="inbox_fresh_new_count"
|
||||
font="SansSerifMedium"
|
||||
halign="right"
|
||||
top_pad="0">
|
||||
[NUM] new
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
width="18" />
|
||||
<panel_camera_item.text
|
||||
follows="top|left|right"
|
||||
font="SansSerifMedium"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left ="38"
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
image_disabled_selected="PushButton_Selected_Disabled"
|
||||
image_disabled="PushButton_Disabled"
|
||||
button_width.min="70"
|
||||
button_width.max="140"
|
||||
button_width.max="172"
|
||||
desired_height="24"
|
||||
pad_left="10"
|
||||
pad_right="10"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<inventory_list_item
|
||||
follows="top|right|left"
|
||||
height="20"
|
||||
height="21"
|
||||
name="inventory_item"
|
||||
tab_stop="false"
|
||||
hover_image="ListItem_Over"
|
||||
@@ -31,7 +31,7 @@
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="item_icon"
|
||||
top="0"
|
||||
top="1"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
|
||||
Reference in New Issue
Block a user