Merge branch 'project/Flat_UI' of https://github.com/secondlife/viewer

# Conflicts:
#	indra/newview/llpanellogin.cpp
#	indra/newview/llviewermenu.cpp
#	indra/newview/llviewernetwork.cpp
#	indra/newview/llviewernetwork.h
#	indra/newview/skins/default/textures/widgets/PushButton_Login.png
#	indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png
This commit is contained in:
Ansariel
2026-03-25 09:46:02 +01:00
24 changed files with 482 additions and 196 deletions
+20 -2
View File
@@ -87,6 +87,7 @@ LLButton::Params::Params()
image_top_pad("image_top_pad"),
image_bottom_pad("image_bottom_pad"),
imgoverlay_label_space("imgoverlay_label_space", 1),
image_overlay_right_delta("image_overlay_right_delta", 0),
label_color("label_color"),
label_color_selected("label_color_selected"), // requires is_toggle true
label_color_disabled("label_color_disabled"),
@@ -113,6 +114,8 @@ LLButton::Params::Params()
commit_on_capture_lost("commit_on_capture_lost", false),
display_pressed_state("display_pressed_state", true),
use_draw_context_alpha("use_draw_context_alpha", true),
draw_focus_border("draw_focus_border", true),
hover_hand_cursor("hover_hand_cursor", false),
badge("badge"),
handle_right_mouse("handle_right_mouse"),
held_down_delay("held_down_delay"),
@@ -168,6 +171,7 @@ LLButton::LLButton(const LLButton::Params& p)
mImageOverlayTopPad(p.image_top_pad),
mImageOverlayBottomPad(p.image_bottom_pad),
mImgOverlayLabelSpace(p.imgoverlay_label_space),
mImageOverlayRightDelta(p.image_overlay_right_delta),
mIsToggle(p.is_toggle),
mScaleImage(p.scale_image),
mDropShadowedText(p.label_shadow),
@@ -189,6 +193,8 @@ LLButton::LLButton(const LLButton::Params& p)
mMouseUpSignal(NULL),
mHeldDownSignal(NULL),
mUseDrawContextAlpha(p.use_draw_context_alpha),
mDrawFocusBorder(p.draw_focus_border),
mHoverHandCursor(p.hover_hand_cursor),
mHandleRightMouse(p.handle_right_mouse),
// <FS:Zi> Add checkbox control toggle
//mFlashingTimer(NULL)
@@ -713,7 +719,7 @@ bool LLButton::handleHover(S32 x, S32 y, MASK mask)
}
// We only handle the click if the click both started and ended within us
getWindow()->setCursor(UI_CURSOR_ARROW);
getWindow()->setCursor(mHoverHandCursor ? UI_CURSOR_HAND : UI_CURSOR_ARROW);
LL_DEBUGS("UserInput") << "hover handled by " << getName() << LL_ENDL;
}
return true;
@@ -910,7 +916,7 @@ void LLButton::draw()
label_color = ll::ui::SearchableControl::getHighlightFontColor();
// overlay with keyboard focus border
if (hasFocus())
if (hasFocus() && mDrawFocusBorder)
{
drawBorder(imagep, gFocusMgr.getFocusColor() % alpha, gFocusMgr.getFocusFlashWidth());
}
@@ -1001,6 +1007,17 @@ void LLButton::draw()
}
overlay_color.mV[VALPHA] *= alpha;
if (mImageOverlayRightDelta > 0)
{
mImageOverlay->draw(getRect().getWidth() - overlay_width - mImageOverlayRightDelta,
center_y - (overlay_height / 2),
overlay_width,
overlay_height,
overlay_color);
}
else
{
switch(mImageOverlayAlignment)
{
case LLFontGL::LEFT:
@@ -1035,6 +1052,7 @@ void LLButton::draw()
// draw nothing
break;
}
}
}
// Draw label
+8 -1
View File
@@ -112,6 +112,7 @@ public:
//image overlay paddings
Optional<S32> image_top_pad;
Optional<S32> image_bottom_pad;
Optional<S32> image_overlay_right_delta;
/**
* Space between image_overlay and label
@@ -134,7 +135,9 @@ public:
Optional<F32> hover_glow_amount;
Optional<TimeIntervalParam> held_down_delay;
Optional<bool> use_draw_context_alpha;
Optional<bool> use_draw_context_alpha,
draw_focus_border,
hover_hand_cursor;
Optional<LLBadge::Params> badge;
@@ -392,12 +395,16 @@ protected:
S32 mImageOverlayBottomPad;
bool mUseDrawContextAlpha;
bool mDrawFocusBorder;
bool mHoverHandCursor;
/*
* Space between image_overlay and label
*/
S32 mImgOverlayLabelSpace;
S32 mImageOverlayRightDelta;
F32 mHoverGlowStrength;
F32 mCurGlowStrength;
+11
View File
@@ -48,17 +48,21 @@ static LLLayoutStack::LayoutStackRegistry::Register<LLLayoutPanel> register_layo
LLLayoutPanel::Params::Params()
: expanded_min_dim("expanded_min_dim", 0),
min_dim("min_dim", -1),
max_dim("max_dim", -1),
user_resize("user_resize", false),
auto_resize("auto_resize", true)
{
addSynonym(min_dim, "min_width");
addSynonym(min_dim, "min_height");
addSynonym(max_dim, "max_width");
addSynonym(max_dim, "max_height");
}
LLLayoutPanel::LLLayoutPanel(const Params& p)
: LLPanel(p),
mExpandedMinDim(p.expanded_min_dim.isProvided() ? p.expanded_min_dim : p.min_dim),
mMinDim(p.min_dim),
mMaxDim(p.max_dim),
mAutoResize(p.auto_resize),
mUserResize(p.user_resize),
mCollapsed(false),
@@ -75,6 +79,7 @@ LLLayoutPanel::LLLayoutPanel(const Params& p)
{
mVisibleAmt = 0.f;
}
setMaxDim(mMaxDim);
}
void LLLayoutPanel::initFromParams(const Params& p)
@@ -113,6 +118,8 @@ S32 LLLayoutPanel::getTargetDim() const
void LLLayoutPanel::setTargetDim(S32 value)
{
value = llmin(value, mMaxDim);
LLRect new_rect(getRect());
if (mOrientation == LLLayoutStack::HORIZONTAL)
{
@@ -145,6 +152,7 @@ void LLLayoutPanel::setOrientation( LLView::EOrientation orientation )
setMinDim(layout_dim);
}
mTargetDim = llmax(layout_dim, getMinDim());
mTargetDim = llmin(mTargetDim, mMaxDim);
}
void LLLayoutPanel::setVisible( bool visible )
@@ -167,6 +175,7 @@ void LLLayoutPanel::reshape( S32 width, S32 height, bool called_from_parent /*=
if (!mIgnoreReshape && !mAutoResize)
{
mTargetDim = (mOrientation == LLLayoutStack::HORIZONTAL) ? width : height;
mTargetDim = llmin(mTargetDim, mMaxDim);
LLLayoutStack* stackp = dynamic_cast<LLLayoutStack*>(getParent());
if (stackp)
{
@@ -496,6 +505,7 @@ void LLLayoutStack::updateLayout()
F32 fraction_to_distribute = (panelp->mFractionalSize * panelp->getAutoResizeFactor()) / (total_visible_fraction);
S32 delta = ll_round((F32)space_to_distribute * fraction_to_distribute);
panelp->mTargetDim += delta;
panelp->mTargetDim = llmin(panelp->mTargetDim, panelp->mMaxDim);
remaining_space -= delta;
}
}
@@ -512,6 +522,7 @@ void LLLayoutStack::updateLayout()
{
S32 space_for_panel = remaining_space > 0 ? 1 : -1;
panelp->mTargetDim += space_for_panel;
panelp->mTargetDim = llmin(panelp->mTargetDim, panelp->mMaxDim);
remaining_space -= space_for_panel;
}
}
+5 -1
View File
@@ -154,7 +154,8 @@ public:
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
Optional<S32> expanded_min_dim,
min_dim;
min_dim,
max_dim;
Optional<bool> user_resize,
auto_resize;
@@ -178,6 +179,8 @@ public:
S32 getMinDim() const { return llmax(0, mMinDim); }
void setMinDim(S32 value) { mMinDim = value; }
void setMaxDim(S32 value) { mMaxDim = value < 0 ? S32_MAX : value; }
S32 getExpandedMinDim() const { return mExpandedMinDim >= 0 ? mExpandedMinDim : getMinDim(); }
void setExpandedMinDim(S32 value) { mExpandedMinDim = value; }
@@ -217,6 +220,7 @@ protected:
S32 mExpandedMinDim;
S32 mMinDim;
S32 mMaxDim;
bool mCollapsed;
F32 mVisibleAmt;
F32 mCollapseAmt;
+3 -1
View File
@@ -97,6 +97,7 @@ LLLineEditor::Params::Params()
ignore_tab("ignore_tab", true),
is_password("is_password", false),
allow_emoji("allow_emoji", true),
draw_focus_border("draw_focus_border", true),
cursor_color("cursor_color"),
use_bg_color("use_bg_color", false),
bg_color("bg_color"),
@@ -148,6 +149,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
mIgnoreTab( p.ignore_tab ),
mDrawAsterixes( p.is_password ),
mAllowEmoji( p.allow_emoji ),
mDrawFocusBorder(p.draw_focus_border),
mSpellCheck( p.spellcheck ),
mSpellCheckStart(-1),
mSpellCheckEnd(-1),
@@ -1879,7 +1881,7 @@ void LLLineEditor::drawBackground()
if (!image) return;
// optionally draw programmatic border
if (has_focus)
if (has_focus && mDrawFocusBorder)
{
LLColor4 tmp_color = gFocusMgr.getFocusColor();
tmp_color.setAlpha(alpha);
+3 -1
View File
@@ -95,7 +95,8 @@ public:
show_label_focused,
is_password,
allow_emoji,
use_bg_color;
use_bg_color,
draw_focus_border;
// colors
Optional<LLUIColor> cursor_color,
@@ -430,6 +431,7 @@ protected:
bool mAllowEmoji;
bool mUseBgColor;
bool mDrawFocusBorder;
LLWString mPreeditWString;
LLWString mPreeditOverwrittenWString;
+35 -7
View File
@@ -176,6 +176,19 @@ public:
};
LLLoginLocationAutoHandler gLoginLocationAutoHandler;
std::string getShortGridLabel(const std::string& slurl_grid)
{
if (slurl_grid == MAINGRID)
{
return LLTrans::getString("AgniGridLabelShort");
}
if (slurl_grid == BETAGRID)
{
return LLTrans::getString("AditiGridLabelShort");
}
return LLGridManager::getInstance()->getGridLabel(slurl_grid);
}
//---------------------------------------------------------------------------
// Public methods
//---------------------------------------------------------------------------
@@ -223,13 +236,16 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, false));
childSetAction("connect_btn", onClickConnect, this);
childSetAction("sign_btn", onClickSignUp, this);
mLoginBtn = getChild<LLButton>("connect_btn");
setDefaultBtn(mLoginBtn);
// change z sort of clickable text to be behind buttons
sendChildToBack(getChildView("forgot_password_text"));
sendChildToBack(getChildView("sign_up_text"));
mLoginStack = getChild<LLLayoutStack>("login_stack");
mGridPanel = getChild<LLLayoutPanel>("grid_panel");
std::string current_grid = LLGridManager::getInstance()->getGrid();
if (!mFirstLoginThisInstall)
@@ -253,13 +269,13 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
if (!grid_choice->first.empty() && current_grid != grid_choice->first)
{
LL_DEBUGS("AppInit") << "adding " << grid_choice->first << LL_ENDL;
server_choice_combo->add(grid_choice->second, grid_choice->first);
server_choice_combo->add(getShortGridLabel(grid_choice->first), grid_choice->first);
}
}
server_choice_combo->sortByName();
LL_DEBUGS("AppInit") << "adding current " << current_grid << LL_ENDL;
server_choice_combo->add(LLGridManager::getInstance()->getGridLabel(),
server_choice_combo->add(getShortGridLabel(current_grid),
current_grid,
ADD_TOP);
server_choice_combo->selectFirstItem();
@@ -310,9 +326,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text");
forgot_password_text->setClickedCallback(onClickForgotPassword, NULL);
LLTextBox* sign_up_text = getChild<LLTextBox>("sign_up_text");
sign_up_text->setClickedCallback(onClickSignUp, NULL);
// get the web browser control
LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
web_browser->addObserver(this);
@@ -754,6 +767,11 @@ void LLPanelLogin::updateLocationSelectorsVisibility()
{
server_combo->setVisible(show_server);
}
if (LLTextBox* grid_txt = sInstance->getChild<LLTextBox>("grid_text"))
{
grid_txt->setVisible(show_server);
}
sInstance->collapseGridPanel(!show_server);
}
}
@@ -789,7 +807,7 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
// update the grid selector to match the slurl
LLComboBox* server_combo = sInstance->getChild<LLComboBox>("server_combo");
std::string server_label(LLGridManager::getInstance()->getGridLabel(slurl_grid));
std::string server_label(getShortGridLabel(slurl_grid));
server_combo->setSimple(server_label);
updateServer(); // to change the links and splash screen
@@ -1389,4 +1407,14 @@ bool LLPanelLogin::onUpdateNotification(const LLSD& notify)
}
return false;
}
void LLPanelLogin::collapseGridPanel(bool collapse)
{
if (mGridPanel->isCollapsed() == collapse)
{
return;
}
mLoginStack->collapsePanel(mGridPanel, collapse);
mLoginStack->updateLayout();
}
#endif
+4
View File
@@ -89,6 +89,8 @@ public:
// extract name from cred in a format apropriate for username field
static std::string getUserName(LLPointer<LLCredential> &cred);
void collapseGridPanel(bool collapse);
private:
friend class LLPanelLoginListener;
void addFavoritesToStartLocation();
@@ -134,6 +136,8 @@ private:
bool mAlertNotif;
LLButton* mLoginBtn;
LLLayoutPanel* mGridPanel;
LLLayoutStack* mLoginStack;
};
#endif
+1 -1
View File
@@ -790,7 +790,7 @@ void init_menus()
menuBarRect.setLeftTopAndSize(0, menu_bar_holder->getRect().getHeight(), menuBarRect.getWidth(), menuBarRect.getHeight());
gLoginMenuBarView->setRect(menuBarRect);
// do not set colors in code, always lat the skin decide. -Zi
// gLoginMenuBarView->setBackgroundColor( color );
// gLoginMenuBarView->setBackgroundColor(LLColor4::black);
menu_bar_holder->addChild(gLoginMenuBarView);
// tooltips are on top of EVERYTHING, including menus
+1 -1
View File
@@ -131,7 +131,7 @@ void LLGridManager::initialize(const std::string& grid_file)
MAIN_GRID_WEB_PROFILE_URL,
"Agni");
addSystemGrid(SECOND_LIFE_BETA_LABEL,
"util.aditi.lindenlab.com",
BETAGRID,
"https://login.aditi.lindenlab.com/cgi-bin/login.cgi",
"https://secondlife.aditi.lindenlab.com/helpers/",
DEFAULT_LOGIN_PAGE,
+1
View File
@@ -37,6 +37,7 @@ const std::string MAINGRID = SINGLEGRID_URI;
#else
const std::string MAINGRID = "util.agni.lindenlab.com";
#endif
#define BETAGRID "util.aditi.lindenlab.com"
// <FS:AW optional opensim support>
#ifdef OPENSIM
+6
View File
@@ -97,6 +97,9 @@
<color
name="DkGray2"
value="0.169 0.169 0.169 1" />
<color
name="DkGrayLogin"
value="0.129 0.133 0.137 1" />
<color
name="MouseGray"
value="0.191 0.191 0.191 1" />
@@ -1303,6 +1306,9 @@
<color
name="PanelGray"
value="0.27 0.27 0.27 1" />
<color
name="PanelDark"
value="0.078 0.078 0.078 1" />
<color
name="PerformanceMid"
value="1 0.8 0 1" />
@@ -138,7 +138,9 @@ with the same filename but different name
<texture name="Checkbox_Off_Disabled" file_name="widgets/Checkbox_Disabled.png" preload="true" />
<texture name="Checkbox_On_Disabled" file_name="widgets/Checkbox_On_Disabled.png" preload="true" />
<texture name="Checkbox_Off" file_name="widgets/Checkbox_Off.png" preload="true" />
<texture name="Checkbox_Slim_Off" file_name="widgets/Checkbox_Slim_Off.png" preload="true" />
<texture name="Checkbox_On" file_name="widgets/Checkbox_On.png" preload="true" />
<texture name="Checkbox_Slim_On" file_name="widgets/Checkbox_Slim_On.png" preload="true" />
<texture name="Checkbox_On_Press" file_name="widgets/Checkbox_On_Press.png" preload="true" />
<texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" />
<texture name="Check_Mark" file_name="icons/check_mark.png" preload="true" />
@@ -194,6 +196,8 @@ with the same filename but different name
<texture name="ComboButton_On" file_name="widgets/ComboButton_On.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Off" file_name="widgets/ComboButton_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Arrow" file_name="widgets/ComboButton_Arrow.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="ComboButton_Transparent" file_name="widgets/ComboButton_Transparent.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="Container" file_name="containers/Container.png" preload="false" />
@@ -682,7 +686,9 @@ with the same filename but different name
<texture name="PushButton_Login" file_name="widgets/PushButton_Login.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Login_Over" file_name="widgets/PushButton_Login_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Login_Pressed" file_name="widgets/PushButton_Login_Pressed.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Sign" file_name="widgets/PushButton_Sign.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Sign_Over" file_name="widgets/PushButton_Sign_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="PushButton_Sign_Pressed" file_name="widgets/PushButton_Sign_Pressed.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" />
<texture name="RadioButton_Press" file_name="widgets/RadioButton_Press.png" preload="true" />
<texture name="RadioButton_On_Press" file_name="widgets/RadioButton_On_Press.png" preload="true" />
@@ -774,6 +780,7 @@ with the same filename but different name
<texture name="login_fs_logo" file_name="windows/login_fs_logo.png" preload="true" />
<texture name="login_sl_logo" file_name="windows/login_sl_logo.png" preload="true" />
<texture name="login_sl_logo_horizontal" file_name="windows/login_sl_logo_horizontal.png" preload="true" />
<texture name="login_sl_logo_small" file_name="windows/login_sl_logo_small.png" preload="true" />
<texture name="first_login_image" file_name="windows/first_login_image.jpg" preload="true" />
@@ -832,6 +839,7 @@ with the same filename but different name
<texture name="TextField_Active" file_name="widgets/TextField_Active.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="TextField_Highlight" file_name="widgets/TextField_Highlight.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="TextField_Search_Highlight" file_name="widgets/TextField_Search_Highlight.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
<texture name="TextField_Transparent" file_name="widgets/TextField_Transparent.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />
<texture name="Thumbnail_Fallback" file_name="icons/thumbnail_fallback_icon.png" preload="true" />
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

+373 -180
View File
@@ -6,7 +6,7 @@
name="panel_login"
focus_root="true"
background_visible="true"
bg_opaque_color="0.16 0.16 0.16 1"
bg_opaque_color="DkGrayLogin"
background_opaque="true"
width="1024">
<panel.string
@@ -18,186 +18,379 @@
https://www.firestormviewer.org/join-secondlife/
</panel.string>
<layout_stack
follows="left|right|top"
height="172"
left="0"
name="ui_stack"
orientation="horizontal"
top="10"
width="1024">
follows="all"
layout="topleft"
orientation="horizontal"
name="main_stack"
border_size="0"
animate="false"
top="0"
left="0"
height="768"
width="1024">
<layout_panel
height="172"
auto_resize="true"
name="ui_elastic_pad_left"
width="32" />
auto_resize="true"
user_resize="false"
layout="topleft"
name="left_spacer"
background_visible="false"
min_width="0"
expanded_min_dim="0"
width="1">
</layout_panel>
<layout_panel
auto_resize="false"
follows="left|right|top"
name="ui_container"
width="1011"
left="0"
top="0"
height="172">
<icon
height="73"
width="165"
image_name="login_sl_logo"
left="0"
top="25"
name="sl_logo_small" />
<combo_box
left_pad="22"
bottom_delta="-7"
allow_text_entry="true"
follows="left|top"
height="32"
label="Username"
combo_editor.font="SansSerifLarge"
max_chars="128"
combo_editor.commit_on_focus_lost="false"
combo_editor.prevalidator="ascii"
tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
name="username_combo"
width="206">
<combo_box.combo_editor
text_pad_left="8"
bg_image_always_focused="true"/>
</combo_box>
<line_editor
follows="left|top"
height="32"
left_pad="15"
max_length_chars="16"
text_pad_left="8"
name="password_edit"
label="Password"
bg_image_always_focused="true"
font="SansSerifLarge"
is_password="true"
select_on_focus="true"
commit_on_focus_lost="false"
bottom_delta="0"
width="165" />
<combo_box
allow_text_entry="true"
control_name="NextLoginLocation"
follows="left|top"
label="My favorite places"
height="32"
max_chars="128"
combo_editor.font="SansSerifLarge"
left_pad="15"
bottom_delta="0"
name="start_location_combo"
width="175"
combo_button.scale_image="true">
<combo_box.combo_editor
bg_image_always_focused="true"
text_pad_left="8"/>
<combo_box.item
label="My last location"
name="MyLastLocation"
value="last" />
<combo_box.item
label="My home"
name="MyHome"
value="home" />
</combo_box>
<button
follows="left|top"
image_unselected="PushButton_Login"
image_pressed="PushButton_Login_Pressed"
image_hover_unselected="PushButton_Login_Over"
label="Log in"
label_color="White"
font="SansSerifMedium"
font.style="BOLD"
name="connect_btn"
enabled="true"
width="120"
height="32"
left_pad="15"
bottom_delta="0"
pad_bottom="1" />
<text
follows="left|top"
font="SansSerifLarge"
font.style="BOLD"
text_color="EmphasisColor"
height="34"
name="sign_up_text"
left_pad="10"
width="200"
valign="center">
Sign up
</text>
<check_box
follows="left|top"
font="SansSerifMedium"
left="185"
bottom_delta="21"
height="24"
label="Remember me"
word_wrap="down"
check_button.bottom="3"
name="remember_name"
tool_tip="Already remembered user can be forgotten from Me &gt; Preferences &gt; Advanced &gt; Remembered Usernames."
width="198" />
<check_box
control_name="RememberPassword"
follows="left|top"
font="SansSerifMedium"
height="24"
left="408"
bottom_delta="0"
label="Remember password"
word_wrap="down"
check_button.bottom="3"
name="remember_password"
width="165" />
<combo_box
allow_text_entry="false"
font="SansSerifTiny"
follows="left|top"
height="26"
left="588"
bottom_delta="8"
max_chars="128"
label="Select grid"
layout="topleft"
name="server_combo"
width="149" >
<combo_box.drop_down_button pad_right="21" />
</combo_box>
<text
follows="left|top"
font="SansSerifMedium"
text_color="EmphasisColor"
height="16"
name="forgot_password_text"
left="778"
bottom_delta="-8"
width="120"
halign="center">
Password help
</text>
</layout_panel>
<layout_panel
height="172"
auto_resize="true"
name="ui_elastic_pad_right"
width="32" />
auto_resize="false"
user_resize="false"
layout="topleft"
name="center_stage"
background_visible="true"
bg_opaque_color="DkGrayLogin"
background_opaque="true"
width="1008"
height="768">
<layout_stack
follows="all"
layout="topleft"
orientation="horizontal"
name="ui_stack"
border_size="0"
animate="false"
top="0"
left="0"
height="768"
width="1008">
<layout_panel
auto_resize="false"
user_resize="false"
layout="topleft"
name="ui_container"
width="300"
height="768"
background_visible="true"
bg_opaque_color="PanelDark"
background_opaque="true">
<icon
height="77"
width="160"
image_name="login_sl_logo_horizontal"
layout="topleft"
follows="left|top"
left="70"
top="39"
name="sl_logo_small" />
<icon
left="40"
top_pad="30"
width="220"
height="28"
image_name="TextField_Active"
layout="topleft"
follows="left|top"
name="text_field_bg1" />
<combo_box
left="40"
top_delta="0"
allow_text_entry="true"
follows="left|top"
layout="topleft"
height="28"
label="Username"
combo_editor.font="SansSerifLarge"
max_chars="128"
combo_editor.commit_on_focus_lost="false"
combo_editor.prevalidator="ascii"
tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
name="username_combo"
width="220">
<combo_box.combo_button
image_overlay="ComboButton_Arrow"
image_overlay_right_delta="10"
image_unselected="ComboButton_Transparent"
hover_glow_amount="0"
image_selected="ComboButton_Transparent"
image_disabled="ComboButton_Transparent" />
<combo_box.combo_editor
background_image="TextField_Transparent"
background_image_disabled="TextField_Transparent"
background_image_focused="TextField_Transparent"
draw_focus_border="false"
text_pad_left="8"
bg_image_always_focused="true"/>
</combo_box>
<check_box
follows="left|top"
font="SansSerifMedium"
label_text.text_color="White"
top_pad="3"
layout="topleft"
height="24"
label="Remember username"
word_wrap="down"
check_button.bottom="3"
name="remember_name"
tool_tip="Already remembered user can be forgotten from Me &gt; Preferences &gt; Advanced &gt; Remembered Usernames."
width="198">
<check_box.label_text left="23"/>
<check_box.check_button
image_selected="Checkbox_Slim_On"
image_unselected="Checkbox_Slim_Off"
image_pressed="Checkbox_Slim_Off"
image_pressed_selected="Checkbox_Slim_Off"/>
</check_box>
<line_editor
follows="left|top"
height="28"
top_pad="20"
max_length_chars="16"
text_pad_left="8"
name="password_edit"
label="Password"
bg_image_always_focused="true"
font="SansSerifLarge"
is_password="true"
select_on_focus="true"
draw_focus_border="false"
commit_on_focus_lost="false"
width="220" />
<check_box
control_name="RememberPassword"
follows="left|top"
font="SansSerifMedium"
label_text.text_color="White"
height="24"
top_pad="3"
label="Remember password"
word_wrap="down"
check_button.bottom="3"
name="remember_password"
width="165">
<check_box.label_text left="23"/>
<check_box.check_button
image_selected="Checkbox_Slim_On"
image_unselected="Checkbox_Slim_Off"
image_pressed="Checkbox_Slim_Off"
image_pressed_selected="Checkbox_Slim_Off"/>
</check_box>
<text
follows="left|top"
font="SansSerif"
text_color="White"
height="12"
name="location_text"
top_pad="18"
width="120"
valign="center">
Start here
</text>
<icon
top_pad="6"
width="220"
height="28"
image_name="TextField_Active"
layout="topleft"
follows="left|top"
name="text_field_bg2" />
<combo_box
allow_text_entry="true"
control_name="NextLoginLocation"
follows="left|top"
label="My favorite places"
height="28"
max_chars="128"
combo_editor.font="SansSerifLarge"
top_delta="0"
name="start_location_combo"
width="220"
combo_button.scale_image="true">
<combo_box.combo_button
image_overlay="ComboButton_Arrow"
hover_glow_amount="0"
image_overlay_right_delta="10"
image_unselected="ComboButton_Transparent"
image_selected="ComboButton_Transparent"
image_disabled="ComboButton_Transparent" />
<combo_box.combo_editor
background_image="TextField_Transparent"
background_image_disabled="TextField_Transparent"
background_image_focused="TextField_Transparent"
draw_focus_border="false"
text_pad_left="8"
bg_image_always_focused="true"/>
<combo_box.item
label="My last location"
name="MyLastLocation"
value="last" />
<combo_box.item
label="My home"
name="MyHome"
value="home" />
</combo_box>
<layout_stack
follows="left|top"
layout="topleft"
orientation="vertical"
name="login_stack"
border_size="0"
animate="false"
top_pad="0"
left="0"
height="218"
width="300">
<layout_panel
auto_resize="false"
user_resize="false"
layout="topleft"
name="grid_panel"
background_visible="false"
height="64"
width="300">
<text
follows="left|top"
font="SansSerif"
text_color="white"
height="12"
name="grid_text"
top="18"
left="40"
width="120"
valign="center">
Grid
</text>
<combo_box
allow_text_entry="false"
font="SansSerifTiny"
follows="left|top"
height="28"
top_pad="6"
left="40"
max_chars="128"
label="Select grid"
layout="topleft"
name="server_combo"
width="220">
<combo_box.drop_down_button
pad_bottom="1"
pad_left="10"
font="SansSerif"
label_color="Black"
label_color_selected="Black"
draw_focus_border="false"
image_overlay="ComboButton_Arrow"
image_overlay_right_delta="10"
image_unselected="TextField_Active"
image_selected="TextField_Active"
image_pressed="TextField_Active"
image_pressed_selected="TextField_Active"/>
</combo_box>
</layout_panel>
<layout_panel
auto_resize="false"
user_resize="false"
layout="topleft"
name="login_panel"
background_visible="false"
height="172"
width="300">
<button
follows="left|top"
image_unselected="PushButton_Login"
image_pressed="PushButton_Login_Pressed"
image_hover_unselected="PushButton_Login_Over"
label="Log in"
label_color="Black"
label_color_disabled="Black"
font="SansSerifLarge"
font.style="BOLD"
name="connect_btn"
draw_focus_border="false"
hover_hand_cursor="true"
enabled="true"
width="220"
height="30"
left="40"
top="25"
pad_bottom="1" />
<text
follows="left|top"
font="SansSerifMedium"
text_color="EmphasisColor"
height="15"
name="forgot_password_text"
left="60"
top_pad="9"
width="180"
halign="center">
Need help logging in?
</text>
<button
follows="left|top"
image_unselected="PushButton_Sign"
image_pressed="PushButton_Sign_Pressed"
image_hover_unselected="PushButton_Sign_Over"
label="Create account"
label_color="White"
label_color_disabled="Black"
font="SansSerifMedium"
font.style="BOLD"
name="sign_btn"
draw_focus_border="false"
hover_hand_cursor="true"
width="220"
height="35"
left="40"
top_pad="25"
pad_bottom="1" />
</layout_panel>
</layout_stack>
</layout_panel>
<layout_panel
auto_resize="false"
user_resize="false"
layout="topleft"
name="middle_gutter"
min_width="18"
max_width="18"
expanded_min_dim="18"
width="18"
height="768"
background_visible="true"
bg_opaque_color="DkGrayLogin"
background_opaque="true">
</layout_panel>
<layout_panel
auto_resize="false"
user_resize="false"
layout="topleft"
name="web_container"
width="690"
height="768"
background_visible="true"
bg_opaque_color="DkGrayLogin"
background_opaque="true">
<web_browser
tab_stop="false"
trusted_content="true"
bg_opaque_color="DkGrayLogin"
border_visible="false"
follows="all"
left="0"
top="0"
right="-1"
bottom="-1"
name="login_html"
start_url="" />
</layout_panel>
</layout_stack>
</layout_panel>
<layout_panel
auto_resize="true"
user_resize="false"
layout="topleft"
name="right_spacer"
background_visible="false"
min_width="0"
expanded_min_dim="0"
width="1">
</layout_panel>
</layout_stack>
<web_browser
tab_stop="false"
trusted_content="true"
bg_opaque_color="Black"
border_visible="false"
follows="all"
left="0"
name="login_html"
start_url=""
top="154"
height="600"
width="1024" />
</panel>
@@ -139,6 +139,8 @@ Voice Server Version: [VOICE_VERSION]
<string name="AgniGridLabel">Second Life Main Grid (Agni)</string>
<string name="AditiGridLabel">Second Life Beta Test Grid (Aditi)</string>
<string name="AgniGridLabelShort">Agni (production)</string>
<string name="AditiGridLabelShort">Aditi (beta)</string>
<string name="ViewerDownloadURL">https://www.firestormviewer.org/choose-your-platform/</string>
<string name="LoginFailedViewerNotPermitted">