Automated merge up from viewer-development

master
Loren Shih 2010-12-07 14:56:36 -05:00
commit 6a59861bde
66 changed files with 354 additions and 132 deletions

View File

@ -39,3 +39,6 @@ db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3
6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release
dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start
dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
dc6483491b4af559060bccaef8e9045a303212dd 2.4.0-beta1
3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1

View File

@ -359,6 +359,7 @@ Jonathan Yap
STORM-616
STORM-679
STORM-596
STORM-726
Kage Pixel
VWR-11
Ken March

View File

@ -203,7 +203,8 @@ void LLAccordionCtrlTab::LLAccordionCtrlTabHeader::draw()
S32 width = getRect().getWidth();
S32 height = getRect().getHeight();
gl_rect_2d(0,0,width - 1 ,height - 1,mHeaderBGColor.get(),true);
F32 alpha = getCurrentTransparency();
gl_rect_2d(0,0,width - 1 ,height - 1,mHeaderBGColor.get() % alpha,true);
LLAccordionCtrlTab* parent = dynamic_cast<LLAccordionCtrlTab*>(getParent());
bool collapsible = (parent && parent->getCollapsible());

View File

@ -98,7 +98,8 @@ LLButton::Params::Params()
is_toggle("is_toggle", false),
scale_image("scale_image", true),
hover_glow_amount("hover_glow_amount"),
commit_on_return("commit_on_return", true)
commit_on_return("commit_on_return", true),
use_draw_context_alpha("use_draw_context_alpha", true)
{
addSynonym(is_toggle, "toggle");
held_down_delay.seconds = 0.5f;
@ -158,7 +159,8 @@ LLButton::LLButton(const LLButton::Params& p)
mLastDrawCharsCount(0),
mMouseDownSignal(NULL),
mMouseUpSignal(NULL),
mHeldDownSignal(NULL)
mHeldDownSignal(NULL),
mUseDrawContextAlpha(p.use_draw_context_alpha)
{
static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
@ -539,7 +541,7 @@ BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
// virtual
void LLButton::draw()
{
F32 alpha = getDrawContext().mAlpha;
F32 alpha = mUseDrawContextAlpha ? getDrawContext().mAlpha : getCurrentTransparency();
bool flash = FALSE;
static LLUICachedControl<F32> button_flash_rate("ButtonFlashRate", 0);
static LLUICachedControl<S32> button_flash_count("ButtonFlashCount", 0);

View File

@ -124,6 +124,8 @@ public:
Optional<F32> hover_glow_amount;
Optional<TimeIntervalParam> held_down_delay;
Optional<bool> use_draw_context_alpha;
Params();
};
@ -338,6 +340,8 @@ private:
S32 mImageOverlayTopPad;
S32 mImageOverlayBottomPad;
bool mUseDrawContextAlpha;
/*
* Space between image_overlay and label
*/

View File

@ -61,10 +61,6 @@
// use this to control "jumping" behavior when Ctrl-Tabbing
const S32 TABBED_FLOATER_OFFSET = 0;
// static
F32 LLFloater::sActiveFloaterTransparency = 0.0f;
F32 LLFloater::sInactiveFloaterTransparency = 0.0f;
std::string LLFloater::sButtonNames[BUTTON_COUNT] =
{
"llfloater_close_btn", //BUTTON_CLOSE
@ -208,14 +204,14 @@ void LLFloater::initClass()
if (ctrl)
{
ctrl->getSignal()->connect(boost::bind(&LLFloater::updateActiveFloaterTransparency));
sActiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("ActiveFloaterTransparency");
updateActiveFloaterTransparency();
}
ctrl = LLUI::sSettingGroups["config"]->getControl("InactiveFloaterTransparency").get();
if (ctrl)
{
ctrl->getSignal()->connect(boost::bind(&LLFloater::updateInactiveFloaterTransparency));
sInactiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("InactiveFloaterTransparency");
updateInactiveFloaterTransparency();
}
}
@ -225,7 +221,7 @@ static LLWidgetNameRegistry::StaticRegistrar sRegisterFloaterParams(&typeid(LLFl
LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p)
: LLPanel(), // intentionally do not pass params here, see initFromParams
mDragHandle(NULL),
mDragHandle(NULL),
mTitle(p.title),
mShortTitle(p.short_title),
mSingleInstance(p.single_instance),
@ -368,13 +364,13 @@ void LLFloater::layoutDragHandle()
// static
void LLFloater::updateActiveFloaterTransparency()
{
sActiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("ActiveFloaterTransparency");
sActiveControlTransparency = LLUI::sSettingGroups["config"]->getF32("ActiveFloaterTransparency");
}
// static
void LLFloater::updateInactiveFloaterTransparency()
{
sInactiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("InactiveFloaterTransparency");
sInactiveControlTransparency = LLUI::sSettingGroups["config"]->getF32("InactiveFloaterTransparency");
}
void LLFloater::addResizeCtrls()
@ -1193,6 +1189,7 @@ void LLFloater::setFocus( BOOL b )
last_focus->setFocus(TRUE);
}
}
updateTransparency(this, b ? TT_ACTIVE : TT_INACTIVE);
}
// virtual
@ -1652,7 +1649,7 @@ void LLFloater::onClickCloseBtn()
// virtual
void LLFloater::draw()
{
mCurrentTransparency = hasFocus() ? sActiveFloaterTransparency : sInactiveFloaterTransparency;
const F32 alpha = getCurrentTransparency();
// draw background
if( isBackgroundVisible() )
@ -1684,12 +1681,12 @@ void LLFloater::draw()
if (image)
{
// We're using images for this floater's backgrounds
image->draw(getLocalRect(), overlay_color % mCurrentTransparency);
image->draw(getLocalRect(), overlay_color % alpha);
}
else
{
// We're not using images, use old-school flat colors
gl_rect_2d( left, top, right, bottom, color % mCurrentTransparency );
gl_rect_2d( left, top, right, bottom, color % alpha );
// draw highlight on title bar to indicate focus. RDW
if(hasFocus()
@ -1701,7 +1698,7 @@ void LLFloater::draw()
const LLFontGL* font = LLFontGL::getFontSansSerif();
LLRect r = getRect();
gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1,
titlebar_focus_color % mCurrentTransparency, 0, TRUE);
titlebar_focus_color % alpha, 0, TRUE);
}
}
}
@ -1767,10 +1764,32 @@ void LLFloater::drawShadow(LLPanel* panel)
shadow_color.mV[VALPHA] *= 0.5f;
}
gl_drop_shadow(left, top, right, bottom,
shadow_color % mCurrentTransparency,
shadow_color % getCurrentTransparency(),
llround(shadow_offset));
}
void LLFloater::updateTransparency(LLView* view, ETypeTransparency transparency_type)
{
child_list_t children = *view->getChildList();
child_list_t::iterator it = children.begin();
LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(view);
if (ctrl)
{
ctrl->setTransparencyType(transparency_type);
}
for(; it != children.end(); ++it)
{
updateTransparency(*it, transparency_type);
}
}
void LLFloater::updateTransparency(ETypeTransparency transparency_type)
{
updateTransparency(this, transparency_type);
}
void LLFloater::setCanMinimize(BOOL can_minimize)
{
// if removing minimize/restore button programmatically,

View File

@ -284,6 +284,8 @@ public:
static void setFloaterHost(LLMultiFloater* hostp) {sHostp = hostp; }
static LLMultiFloater* getFloaterHost() {return sHostp; }
void updateTransparency(ETypeTransparency transparency_type);
protected:
@ -343,6 +345,7 @@ private:
static void updateActiveFloaterTransparency();
static void updateInactiveFloaterTransparency();
void updateTransparency(LLView* view, ETypeTransparency transparency_type);
public:
// Called when floater is opened, passes mKey
@ -411,11 +414,6 @@ private:
bool mDocked;
bool mTornOff;
F32 mCurrentTransparency;
static F32 sActiveFloaterTransparency;
static F32 sInactiveFloaterTransparency;
static LLMultiFloater* sHostp;
static BOOL sQuitting;
static std::string sButtonNames[BUTTON_COUNT];

View File

@ -41,6 +41,7 @@ static LLDefaultChildRegistry::Register<LLIconCtrl> r("icon");
LLIconCtrl::Params::Params()
: image("image_name"),
color("color"),
use_draw_context_alpha("use_draw_context_alpha", true),
scale_image("scale_image")
{
tab_stop = false;
@ -51,6 +52,7 @@ LLIconCtrl::LLIconCtrl(const LLIconCtrl::Params& p)
: LLUICtrl(p),
mColor(p.color()),
mImagep(p.image),
mUseDrawContextAlpha(p.use_draw_context_alpha),
mPriority(0),
mDrawWidth(0),
mDrawHeight(0)
@ -71,7 +73,8 @@ void LLIconCtrl::draw()
{
if( mImagep.notNull() )
{
mImagep->draw(getLocalRect(), mColor.get() % getDrawContext().mAlpha );
const F32 alpha = mUseDrawContextAlpha ? getDrawContext().mAlpha : getCurrentTransparency();
mImagep->draw(getLocalRect(), mColor.get() % alpha );
}
LLUICtrl::draw();

View File

@ -48,6 +48,7 @@ public:
{
Optional<LLUIImage*> image;
Optional<LLUIColor> color;
Optional<bool> use_draw_context_alpha;
Ignored scale_image;
Params();
};
@ -79,6 +80,10 @@ protected:
S32 mDrawWidth ;
S32 mDrawHeight ;
// If set to true (default), use the draw context transparency.
// If false, will use transparency returned by getCurrentTransparency(). See STORM-698.
bool mUseDrawContextAlpha;
private:
LLUIColor mColor;
LLPointer<LLUIImage> mImagep;

View File

@ -1534,7 +1534,8 @@ void LLLineEditor::drawBackground()
image = mBgImage;
}
F32 alpha = getDrawContext().mAlpha;
F32 alpha = getCurrentTransparency();
// optionally draw programmatic border
if (has_focus)
{

View File

@ -194,6 +194,8 @@ void LLPanel::draw()
// draw background
if( mBgVisible )
{
alpha = getCurrentTransparency();
LLRect local_rect = getLocalRect();
if (mBgOpaque )
{

View File

@ -422,9 +422,10 @@ void LLScrollContainer::draw()
// Draw background
if( mIsOpaque )
{
F32 alpha = getCurrentTransparency();
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4fv( mBackgroundColor.get().mV );
gl_rect_2d( mInnerRect );
gl_rect_2d(mInnerRect, mBackgroundColor.get() % alpha);
}
// Draw mScrolledViews and update scroll bars.

View File

@ -1482,8 +1482,9 @@ void LLScrollListCtrl::draw()
// Draw background
if (mBackgroundVisible)
{
F32 alpha = getCurrentTransparency();
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(background, getEnabled() ? mBgWriteableColor.get() : mBgReadOnlyColor.get() );
gl_rect_2d(background, getEnabled() ? mBgWriteableColor.get() % alpha : mBgReadOnlyColor.get() % alpha );
}
if (mColumnsDirty)

View File

@ -1005,6 +1005,7 @@ void LLTextBase::draw()
if (mBGVisible)
{
F32 alpha = getCurrentTransparency();
// clip background rect against extents, if we support scrolling
LLRect bg_rect = mVisibleTextRect;
if (mScroller)
@ -1016,7 +1017,7 @@ void LLTextBase::draw()
: hasFocus()
? mFocusBgColor.get()
: mWriteableBgColor.get();
gl_rect_2d(doc_rect, bg_color, TRUE);
gl_rect_2d(doc_rect, bg_color % alpha, TRUE);
}
// draw document view

View File

@ -950,7 +950,7 @@ void gl_ring( F32 radius, F32 width, const LLColor4& center_color, const LLColor
}
// Draw gray and white checkerboard with black border
void gl_rect_2d_checkerboard(const LLRect& rect)
void gl_rect_2d_checkerboard(const LLRect& rect, GLfloat alpha)
{
// Initialize the first time this is called.
const S32 PIXELS = 32;
@ -971,11 +971,11 @@ void gl_rect_2d_checkerboard(const LLRect& rect)
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// ...white squares
gGL.color3f( 1.f, 1.f, 1.f );
gGL.color4f( 1.f, 1.f, 1.f, alpha );
gl_rect_2d(rect);
// ...gray squares
gGL.color3f( .7f, .7f, .7f );
gGL.color4f( .7f, .7f, .7f, alpha );
gGL.flush();
glPolygonStipple( checkerboard );

View File

@ -79,7 +79,7 @@ void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, const LL
void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, S32 pixel_offset = 0, BOOL filled = TRUE );
void gl_rect_2d(const LLRect& rect, BOOL filled = TRUE );
void gl_rect_2d(const LLRect& rect, const LLColor4& color, BOOL filled = TRUE );
void gl_rect_2d_checkerboard(const LLRect& rect);
void gl_rect_2d_checkerboard(const LLRect& rect, GLfloat alpha = 1.0f);
void gl_drop_shadow(S32 left, S32 top, S32 right, S32 bottom, const LLColor4 &start_color, S32 lines);

View File

@ -36,6 +36,9 @@
static LLDefaultChildRegistry::Register<LLUICtrl> r("ui_ctrl");
F32 LLUICtrl::sActiveControlTransparency = 1.0f;
F32 LLUICtrl::sInactiveControlTransparency = 1.0f;
// Compiler optimization, generate extern template
template class LLUICtrl* LLView::getChild<class LLUICtrl>(
const std::string& name, BOOL recurse) const;
@ -110,7 +113,8 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)
mMouseUpSignal(NULL),
mRightMouseDownSignal(NULL),
mRightMouseUpSignal(NULL),
mDoubleClickSignal(NULL)
mDoubleClickSignal(NULL),
mTransparencyType(TT_DEFAULT)
{
mUICtrlHandle.bind(this);
}
@ -923,6 +927,37 @@ BOOL LLUICtrl::getTentative() const
void LLUICtrl::setColor(const LLColor4& color)
{ }
F32 LLUICtrl::getCurrentTransparency()
{
F32 alpha = 0;
switch(mTransparencyType)
{
case TT_DEFAULT:
alpha = getDrawContext().mAlpha;
break;
case TT_ACTIVE:
alpha = sActiveControlTransparency;
break;
case TT_INACTIVE:
alpha = sInactiveControlTransparency;
break;
case TT_FADING:
alpha = sInactiveControlTransparency / 2;
break;
}
return alpha;
}
void LLUICtrl::setTransparencyType(ETypeTransparency type)
{
mTransparencyType = type;
}
boost::signals2::connection LLUICtrl::setCommitCallback( const commit_signal_t::slot_type& cb )
{
if (!mCommitSignal) mCommitSignal = new commit_signal_t();

View File

@ -120,6 +120,13 @@ public:
Params();
};
enum ETypeTransparency
{
TT_DEFAULT,
TT_ACTIVE, // focused floater
TT_INACTIVE, // other floaters
TT_FADING, // fading toast
};
/*virtual*/ ~LLUICtrl();
void initFromParams(const Params& p);
@ -202,6 +209,11 @@ public:
virtual void setColor(const LLColor4& color);
F32 getCurrentTransparency();
void setTransparencyType(ETypeTransparency type);
ETypeTransparency getTransparencyType() const {return mTransparencyType;}
BOOL focusNextItem(BOOL text_entry_only);
BOOL focusPrevItem(BOOL text_entry_only);
BOOL focusFirstItem(BOOL prefer_text_fields = FALSE, BOOL focus_flash = TRUE );
@ -283,6 +295,10 @@ protected:
boost::signals2::connection mMakeVisibleControlConnection;
LLControlVariable* mMakeInvisibleControlVariable;
boost::signals2::connection mMakeInvisibleControlConnection;
static F32 sActiveControlTransparency;
static F32 sInactiveControlTransparency;
private:
BOOL mTabStop;
@ -290,6 +306,8 @@ private:
BOOL mTentative;
LLRootHandle<LLUICtrl> mUICtrlHandle;
ETypeTransparency mTransparencyType;
class DefaultTabGroupFirstSorter;
};

View File

@ -456,8 +456,8 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
LLStyle::Params LLUrlEntryAgent::getStyle() const
{
LLStyle::Params style_params = LLUrlEntryBase::getStyle();
style_params.color = LLUIColorTable::instance().getColor("AgentLinkColor");
style_params.readonly_color = LLUIColorTable::instance().getColor("AgentLinkColor");
style_params.color = LLUIColorTable::instance().getColor("HTMLLinkColor");
style_params.readonly_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
return style_params;
}

View File

@ -4066,7 +4066,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.5</real>
<real>0.65</real>
</map>
<key>InBandwidth</key>
<map>

View File

@ -167,6 +167,7 @@ BOOL LLCallFloater::postBuild()
//chrome="true" hides floater caption
if (mDragHandle)
mDragHandle->setTitleVisible(TRUE);
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
updateSession();
@ -205,6 +206,17 @@ void LLCallFloater::draw()
LLTransientDockableFloater::draw();
}
// virtual
void LLCallFloater::setFocus( BOOL b )
{
LLTransientDockableFloater::setFocus(b);
// Force using active floater transparency (STORM-730).
// We have to override setFocus() for LLCallFloater because selecting an item
// of the voice morphing combobox causes the floater to lose focus and thus become transparent.
updateTransparency(TT_ACTIVE);
}
// virtual
void LLCallFloater::onParticipantsChanged()
{

View File

@ -64,6 +64,7 @@ public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void draw();
/*virtual*/ void setFocus( BOOL b );
/**
* Is called by LLVoiceClient::notifyParticipantObservers when voice participant list is changed.

View File

@ -789,24 +789,22 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
// set the link for the object name to be the objectim SLapp
// (don't let object names with hyperlinks override our objectim Url)
LLStyle::Params link_params(style_params);
link_params.color.control = "HTMLLinkColor";
LLColor4 link_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
link_params.color = link_color;
link_params.readonly_color = link_color;
link_params.is_link = true;
link_params.link_href = url;
mEditor->appendText(chat.mFromName + delimiter,
false, link_params);
}
else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() && !message_from_log)
{
LLStyle::Params link_params(style_params);
// Setting is_link = true for agent SLURL to avoid applying default style to it.
// See LLTextBase::appendTextImpl().
link_params.is_link = true;
link_params.link_href = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString();
link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
// Add link to avatar's inspector and delimiter to message.
mEditor->appendText(chat.mFromName, false, link_params);
mEditor->appendText(delimiter, false, style_params);
mEditor->appendText(std::string(link_params.link_href) + delimiter, false, link_params);
}
else
{

View File

@ -195,7 +195,9 @@ BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
// assumes GL state is set for 2D
void LLColorSwatchCtrl::draw()
{
F32 alpha = getDrawContext().mAlpha;
// If we're in a focused floater, don't apply the floater's alpha to the color swatch (STORM-676).
F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
mBorder->setKeyboardFocusHighlight(hasFocus());
// Draw border
LLRect border( 0, getRect().getHeight(), getRect().getWidth(), mLabelHeight );
@ -207,19 +209,29 @@ void LLColorSwatchCtrl::draw()
// Check state
if ( mValid )
{
// Draw the color swatch
gl_rect_2d_checkerboard( interior );
gl_rect_2d(interior, mColor, TRUE);
LLColor4 opaque_color = mColor;
opaque_color.mV[VALPHA] = 1.f;
gGL.color4fv(opaque_color.mV);
if (mAlphaGradientImage.notNull())
if (!mColor.isOpaque())
{
gGL.pushMatrix();
// Draw checker board.
gl_rect_2d_checkerboard(interior, alpha);
}
// Draw the color swatch
gl_rect_2d(interior, mColor % alpha, TRUE);
if (!mColor.isOpaque())
{
// Draw semi-transparent center area in filled with mColor.
LLColor4 opaque_color = mColor;
opaque_color.mV[VALPHA] = alpha;
gGL.color4fv(opaque_color.mV);
if (mAlphaGradientImage.notNull())
{
mAlphaGradientImage->draw(interior, mColor);
gGL.pushMatrix();
{
mAlphaGradientImage->draw(interior, mColor % alpha);
}
gGL.popMatrix();
}
gGL.popMatrix();
}
}
else

View File

@ -343,6 +343,7 @@ BOOL LLFloaterCamera::postBuild()
{
setIsChrome(TRUE);
setTitleVisible(TRUE); // restore title visibility after chrome applying
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
mZoom = findChild<LLPanelCameraZoom>(ZOOM);

View File

@ -472,6 +472,12 @@ void LLFloaterColorPicker::onMouseCaptureLost()
setMouseDownInLumRegion(FALSE);
}
F32 LLFloaterColorPicker::getSwatchTransparency()
{
// If the floater is focused, don't apply its alpha to the color swatch (STORM-676).
return getTransparencyType() == TT_ACTIVE ? 1.f : LLFloater::getCurrentTransparency();
}
//////////////////////////////////////////////////////////////////////////////
//
void LLFloaterColorPicker::draw()
@ -533,8 +539,10 @@ void LLFloaterColorPicker::draw()
// base floater stuff
LLFloater::draw ();
const F32 alpha = getSwatchTransparency();
// draw image for RGB area (not really RGB but you'll see what I mean...
gl_draw_image ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBImage, LLColor4::white );
gl_draw_image ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, mRGBImage, LLColor4::white % alpha);
// update 'cursor' into RGB Section
S32 xPos = ( S32 ) ( ( F32 )mRGBViewerImageWidth * getCurH () ) - 8;
@ -556,7 +564,7 @@ void LLFloaterColorPicker::draw()
mRGBViewerImageTop - mRGBViewerImageHeight,
mRGBViewerImageLeft + mRGBViewerImageWidth + 1,
mRGBViewerImageTop,
LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ),
LLColor4 ( 0.0f, 0.0f, 0.0f, alpha ),
FALSE );
// draw luminance slider
@ -569,7 +577,7 @@ void LLFloaterColorPicker::draw()
mLumRegionTop - mLumRegionHeight + y,
mLumRegionLeft + mLumRegionWidth,
mLumRegionTop - mLumRegionHeight + y - 1,
LLColor4 ( rValSlider, gValSlider, bValSlider, 1.0f ) );
LLColor4 ( rValSlider, gValSlider, bValSlider, alpha ) );
}
@ -594,7 +602,7 @@ void LLFloaterColorPicker::draw()
mSwatchRegionTop - mSwatchRegionHeight,
mSwatchRegionLeft + mSwatchRegionWidth,
mSwatchRegionTop,
LLColor4 ( getCurR (), getCurG (), getCurB (), 1.0f ),
LLColor4 ( getCurR (), getCurG (), getCurB (), alpha ),
TRUE );
// draw selected color swatch outline
@ -634,6 +642,7 @@ const LLColor4& LLFloaterColorPicker::getComplimentaryColor ( const LLColor4& ba
void LLFloaterColorPicker::drawPalette ()
{
S32 curEntry = 0;
const F32 alpha = getSwatchTransparency();
for ( S32 y = 0; y < numPaletteRows; ++y )
{
@ -648,7 +657,7 @@ void LLFloaterColorPicker::drawPalette ()
// draw palette entry color
if ( mPalette [ curEntry ] )
{
gl_rect_2d ( x1 + 2, y1 - 2, x2 - 2, y2 + 2, *mPalette [ curEntry++ ], TRUE );
gl_rect_2d ( x1 + 2, y1 - 2, x2 - 2, y2 + 2, *mPalette [ curEntry++ ] % alpha, TRUE );
gl_rect_2d ( x1 + 1, y1 - 1, x2 - 1, y2 + 1, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE );
}
}

View File

@ -55,6 +55,7 @@ class LLFloaterColorPicker
virtual BOOL handleMouseUp ( S32 x, S32 y, MASK mask );
virtual BOOL handleHover ( S32 x, S32 y, MASK mask );
virtual void onMouseCaptureLost();
virtual F32 getSwatchTransparency();
// implicit methods
void createUI ();

View File

@ -117,8 +117,3 @@ void LLFloaterEvent::setEventID(const U32 event_id)
}
}
void LLFloaterEvent::draw()
{
LLPanel::draw();
}

View File

@ -43,7 +43,6 @@ public:
/*virtual*/ ~LLFloaterEvent();
/*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
void setEventID(const U32 event_id);

View File

@ -128,6 +128,8 @@ void LLFloaterPostcard::draw()
if(!isMinimized() && mViewerImage.notNull() && mJPEGImage.notNull())
{
// Force the texture to be 100% opaque when the floater is focused.
F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
LLRect rect(getRect());
// first set the max extents of our preview
@ -149,7 +151,7 @@ void LLFloaterPostcard::draw()
}
{
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f));
gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f) % alpha);
rect.stretch(-1);
}
{
@ -164,7 +166,7 @@ void LLFloaterPostcard::draw()
rect.getWidth(),
rect.getHeight(),
mViewerImage.get(),
LLColor4::white);
LLColor4::white % alpha);
}
glMatrixMode(GL_TEXTURE);
glPopMatrix();

View File

@ -908,6 +908,8 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal();
previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame
}
gViewerWindow->playSnapshotAnimAndSound();
}
previewp->getWindow()->decBusyCount();
// only show fullscreen preview when in freeze frame mode
@ -1533,8 +1535,6 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
if (previewp && view)
{
previewp->updateSnapshot(TRUE);
gViewerWindow->playSnapshotAnimAndSound();
}
}
@ -2184,9 +2184,11 @@ void LLFloaterSnapshot::draw()
S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ;
glMatrixMode(GL_MODELVIEW);
// Apply floater transparency to the texture unless the floater is focused.
F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
gl_draw_scaled_image(offset_x, offset_y,
previewp->getThumbnailWidth(), previewp->getThumbnailHeight(),
previewp->getThumbnailImage(), LLColor4::white);
previewp->getThumbnailImage(), LLColor4::white % alpha);
previewp->drawPreviewRect(offset_x, offset_y) ;
}
@ -2204,8 +2206,6 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
gSnapshotFloaterView->setEnabled(TRUE);
gSnapshotFloaterView->setVisible(TRUE);
gSnapshotFloaterView->adjustToFitScreen(this, FALSE);
gViewerWindow->playSnapshotAnimAndSound();
}
void LLFloaterSnapshot::onClose(bool app_quitting)

View File

@ -97,7 +97,8 @@ void LLPanelInventoryListItemBase::draw()
LLRect separator_rect = getLocalRect();
separator_rect.mTop = separator_rect.mBottom;
separator_rect.mBottom -= mSeparatorImage->getHeight();
mSeparatorImage->draw(separator_rect);
F32 alpha = getCurrentTransparency();
mSeparatorImage->draw(separator_rect, UI_VERTEX_COLOR % alpha);
}
LLPanel::draw();

View File

@ -94,6 +94,7 @@ BOOL LLFloaterMove::postBuild()
{
setIsChrome(TRUE);
setTitleVisible(TRUE); // restore title visibility after chrome applying
updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
LLDockableFloater::postBuild();

View File

@ -365,3 +365,16 @@ BOOL LLNearbyChat::handleMouseDown(S32 x, S32 y, MASK mask)
mChatHistory->setFocus(TRUE);
return LLDockableFloater::handleMouseDown(x, y, mask);
}
void LLNearbyChat::draw()
{
// *HACK: Update transparency type depending on whether our children have focus.
// This is needed because this floater is chrome and thus cannot accept focus, so
// the transparency type setting code from LLFloater::setFocus() isn't reached.
if (getTransparencyType() != TT_DEFAULT)
{
setTransparencyType(hasFocus() ? TT_ACTIVE : TT_INACTIVE);
}
LLDockableFloater::draw();
}

View File

@ -48,6 +48,7 @@ public:
bool onNearbyChatCheckContextMenuItem(const LLSD& userdata);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual void draw();
// focus overrides
/*virtual*/ void onFocusLost();

View File

@ -165,11 +165,20 @@ public:
: LLToast(p),
mNearbyChatScreenChannelp(nc_channelp)
{
updateTransparency();
setMouseEnterCallback(boost::bind(&LLNearbyChatToast::updateTransparency, this));
setMouseLeaveCallback(boost::bind(&LLNearbyChatToast::updateTransparency, this));
}
/*virtual*/ void onClose(bool app_quitting);
/*virtual*/ void setBackgroundOpaque(BOOL b);
protected:
/*virtual*/ void setTransparentState(bool transparent);
private:
void updateTransparency();
LLNearbyChatScreenChannel* mNearbyChatScreenChannelp;
};
@ -597,4 +606,34 @@ void LLNearbyChatToast::onClose(bool app_quitting)
mNearbyChatScreenChannelp->onToastDestroyed(this, app_quitting);
}
// virtual
void LLNearbyChatToast::setBackgroundOpaque(BOOL b)
{
// We don't want background changes: transparency is handled differently.
LLToast::setBackgroundOpaque(TRUE);
}
// virtual
void LLNearbyChatToast::setTransparentState(bool transparent)
{
LLToast::setTransparentState(transparent);
updateTransparency();
}
void LLNearbyChatToast::updateTransparency()
{
ETypeTransparency transparency_type;
if (isHovered())
{
transparency_type = TT_ACTIVE;
}
else
{
transparency_type = getTransparentState() ? TT_FADING : TT_INACTIVE;
}
LLFloater::updateTransparency(transparency_type);
}
// EOF

View File

@ -180,6 +180,9 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)
populateFoldersList();
// Prevent the floater from losing focus (if the sidepanel is undocked).
setFocus(TRUE);
LLPanelPlaceInfo::setInfoType(type);
}
@ -330,6 +333,9 @@ void LLPanelLandmarkInfo::toggleLandmarkEditMode(BOOL enabled)
// when it was enabled/disabled we set the text once again.
mNotesEditor->setText(mNotesEditor->getText());
}
// Prevent the floater from losing focus (if the sidepanel is undocked).
setFocus(TRUE);
}
const std::string& LLPanelLandmarkInfo::getLandmarkTitle() const

View File

@ -212,7 +212,8 @@ void LLPanelPicks::updateData()
mNoPicks = false;
mNoClassifieds = false;
getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
mNoItemsLabel->setValue(LLTrans::getString("PicksClassifiedsLoadingText"));
mNoItemsLabel->setVisible(TRUE);
mPicksList->clear();
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId());
@ -314,15 +315,17 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
mNoClassifieds = !mClassifiedsList->size();
}
if (mNoPicks && mNoClassifieds)
bool no_data = mNoPicks && mNoClassifieds;
mNoItemsLabel->setVisible(no_data);
if (no_data)
{
if(getAvatarId() == gAgentID)
{
getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoPicksClassifiedsText"));
mNoItemsLabel->setValue(LLTrans::getString("NoPicksClassifiedsText"));
}
else
{
getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
mNoItemsLabel->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
}
}
}
@ -359,6 +362,8 @@ BOOL LLPanelPicks::postBuild()
mPicksList->setNoItemsCommentText(getString("no_picks"));
mClassifiedsList->setNoItemsCommentText(getString("no_classifieds"));
mNoItemsLabel = getChild<LLUICtrl>("picks_panel_text");
childSetAction(XML_BTN_NEW, boost::bind(&LLPanelPicks::onClickPlusBtn, this));
childSetAction(XML_BTN_DELETE, boost::bind(&LLPanelPicks::onClickDelete, this));
childSetAction(XML_BTN_TELEPORT, boost::bind(&LLPanelPicks::onClickTeleport, this));
@ -781,7 +786,7 @@ void LLPanelPicks::showAccordion(const std::string& name, bool show)
void LLPanelPicks::onPanelPickClose(LLPanel* panel)
{
panel->setVisible(FALSE);
getProfilePanel()->closePanel(panel);
}
void LLPanelPicks::onPanelPickSave(LLPanel* panel)

View File

@ -149,6 +149,7 @@ private:
LLPanelClassifiedInfo* mPanelClassifiedInfo;
LLPanelPickEdit* mPanelPickEdit;
LLToggleableMenu* mPlusMenu;
LLUICtrl* mNoItemsLabel;
// <classified_id, edit_panel>
typedef std::map<LLUUID, LLPanelClassifiedEdit*> panel_classified_edit_map_t;

View File

@ -217,6 +217,10 @@ void LLPanelProfile::setAllChildrenVisible(BOOL visible)
void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
{
// Hide currently visible panel (STORM-690).
setAllChildrenVisible(FALSE);
// Add the panel or bring it to front.
if (panel->getParent() != this)
{
addChild(panel);
@ -243,6 +247,18 @@ void LLPanelProfile::closePanel(LLPanel* panel)
if (panel->getParent() == this)
{
removeChild(panel);
// Make the underlying panel visible.
const child_list_t* child_list = getChildList();
if (child_list->size() > 0)
{
child_list->front()->setVisible(TRUE);
child_list->front()->setFocus(TRUE); // prevent losing focus by the floater
}
else
{
llwarns << "No underlying panel to make visible." << llendl;
}
}
}

View File

@ -118,7 +118,7 @@ public:
protected:
LLSideTrayTab(const Params& params);
void dock();
void dock(LLFloater* floater_tab);
void undock(LLFloater* floater_tab);
LLSideTray* getSideTray();
@ -259,7 +259,7 @@ void LLSideTrayTab::toggleTabDocked()
if (docking)
{
dock();
dock(floater_tab);
}
else
{
@ -271,11 +271,14 @@ void LLSideTrayTab::toggleTabDocked()
LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
}
void LLSideTrayTab::dock()
void LLSideTrayTab::dock(LLFloater* floater_tab)
{
LLSideTray* side_tray = getSideTray();
if (!side_tray) return;
// Before docking the tab, reset its (and its children's) transparency to default (STORM-688).
floater_tab->updateTransparency(TT_DEFAULT);
if (!side_tray->addTab(this))
{
llwarns << "Failed to add tab " << getName() << " to side tray" << llendl;

View File

@ -566,25 +566,27 @@ void LLFloaterTexturePicker::draw()
LLRect interior = border;
interior.stretch( -1 );
// If the floater is focused, don't apply its alpha to the texture (STORM-677).
const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
if( mTexturep )
{
if( mTexturep->getComponents() == 4 )
{
gl_rect_2d_checkerboard( interior );
gl_rect_2d_checkerboard( interior, alpha );
}
gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep );
gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha );
// Pump the priority
mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );
}
else if (!mFallbackImage.isNull())
{
mFallbackImage->draw(interior);
mFallbackImage->draw(interior, UI_VERTEX_COLOR % alpha);
}
else
{
gl_rect_2d( interior, LLColor4::grey, TRUE );
gl_rect_2d( interior, LLColor4::grey % alpha, TRUE );
// Draw X
gl_draw_x(interior, LLColor4::black );
@ -1269,23 +1271,25 @@ void LLTextureCtrl::draw()
LLRect interior = border;
interior.stretch( -1 );
// If we're in a focused floater, don't apply the floater's alpha to the texture (STORM-677).
const F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
if( mTexturep )
{
if( mTexturep->getComponents() == 4 )
{
gl_rect_2d_checkerboard( interior );
gl_rect_2d_checkerboard( interior, alpha );
}
gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep);
gl_draw_scaled_image( interior.mLeft, interior.mBottom, interior.getWidth(), interior.getHeight(), mTexturep, UI_VERTEX_COLOR % alpha);
mTexturep->addTextureStats( (F32)(interior.getWidth() * interior.getHeight()) );
}
else if (!mFallbackImage.isNull())
{
mFallbackImage->draw(interior);
mFallbackImage->draw(interior, UI_VERTEX_COLOR % alpha);
}
else
{
gl_rect_2d( interior, LLColor4::grey, TRUE );
gl_rect_2d( interior, LLColor4::grey % alpha, TRUE );
// Draw X
gl_draw_x( interior, LLColor4::black );

View File

@ -141,10 +141,6 @@ LLToast::LLToast(const LLToast::Params& p)
// init callbacks if present
if(!p.on_delete_toast().empty())
mOnDeleteToastSignal.connect(p.on_delete_toast());
// *TODO: This signal doesn't seem to be used at all.
if(!p.on_mouse_enter().empty())
mOnMouseEnterSignal.connect(p.on_mouse_enter());
}
void LLToast::reshape(S32 width, S32 height, BOOL called_from_parent)
@ -402,7 +398,6 @@ void LLToast::onToastMouseEnter()
{
mHideBtn->setVisible(TRUE);
}
mOnMouseEnterSignal(this);
mToastMouseEnterSignal(this, getValue());
}
}

View File

@ -90,8 +90,7 @@ public:
fading_time_secs; // Number of seconds while a toast is transparent
Optional<toast_callback_t> on_delete_toast,
on_mouse_enter;
Optional<toast_callback_t> on_delete_toast;
Optional<bool> can_fade,
can_be_stored,
enable_hide_btn,
@ -142,7 +141,7 @@ public:
//
virtual void setVisible(BOOL show);
/*virtual*/ void setBackgroundOpaque(BOOL b);
virtual void setBackgroundOpaque(BOOL b);
//
virtual void hide();
@ -182,7 +181,6 @@ public:
// Registers signals/callbacks for events
toast_signal_t mOnFadeSignal;
toast_signal_t mOnMouseEnterSignal;
toast_signal_t mOnDeleteToastSignal;
toast_signal_t mOnToastDestroyedSignal;
boost::signals2::connection setOnFadeCallback(toast_callback_t cb) { return mOnFadeSignal.connect(cb); }
@ -200,6 +198,10 @@ public:
LLHandle<LLToast> getHandle() { mHandle.bind(this); return mHandle; }
bool getTransparentState() const { return mIsTransparent; }
virtual void setTransparentState(bool transparent);
private:
void onToastMouseEnter();
@ -208,8 +210,6 @@ private:
void expire();
void setTransparentState(bool transparent);
LLUUID mNotificationID;
LLUUID mSessionID;
LLNotificationPtr mNotification;

View File

@ -3056,7 +3056,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
std::deque<LLChat>::iterator chat_iter = mChats.begin();
mNameText->clearString();
LLColor4 new_chat = LLUIColorTable::instance().getColor( "NameTagChat" );
LLColor4 new_chat = LLUIColorTable::instance().getColor( isSelf() ? "UserChatColor" : "AgentChatColor" );
LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES)

View File

@ -138,9 +138,6 @@
<color
name="AvatarListItemIconVoiceLeftColor"
reference="AvatarListItemIconOfflineColor" />
<color
name="BackgroundChatColor"
reference="White" />
<color
name="ButtonBorderColor"
reference="Unused?" />

View File

@ -20,6 +20,7 @@
left="0"
name="normal_background"
top="17"
use_draw_context_alpha="false"
width="350" />
<text
type="string"
@ -292,6 +293,7 @@ Re-enter amount to see the latest exchange rate.
left="0"
name="error_background"
top="15"
use_draw_context_alpha="false"
width="350"/>
<text
type="string"

View File

@ -2,9 +2,6 @@
<floater
border_visible="false"
border="false"
bg_opaque_image="Window_Foreground"
bg_alpha_image="Window_Background"
bg_alpha_image_overlay="DkGray_66"
legacy_header_height="18"
can_minimize="true"
can_tear_off="false"

View File

@ -49,7 +49,8 @@
left="10"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -33,7 +33,8 @@
left="10"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
type="string"
length="1"

View File

@ -27,7 +27,8 @@
left="10"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
type="string"
length="1"

View File

@ -147,7 +147,8 @@
pad_left="24"
tool_tip="Return to Edit Outfit"
top="3"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -45,7 +45,8 @@ background_visible="true"
left="7"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text_editor
allow_scroll="false"
bg_visible="false"

View File

@ -68,7 +68,8 @@
tool_tip="Back"
tab_stop="false"
top="4"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -127,7 +127,7 @@ top="20"
</text>
<combo_box
allow_text_entry="true"
control_name="LoginLocation"
control_name="NextLoginLocation"
follows="left|bottom"
height="23"
max_chars="128"

View File

@ -70,7 +70,8 @@
left="5"
tab_stop="false"
top="1"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -21,7 +21,8 @@
left="10"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -165,7 +165,8 @@
tool_tip="Back"
tab_stop="false"
top="4"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -275,14 +275,14 @@
height="12"
name="bubble_chat"
top_pad="20"
width="120"
width="140"
>
Bubble chat:
Bubble chat background:
</text>
<color_swatch
can_apply_immediately="true"
color="0 0 0 1"
control_name="BackgroundChatColor"
control_name="NameTagBackground"
follows="left|top"
height="24"
label_height="0"
@ -294,10 +294,10 @@
width="44">
<color_swatch.init_callback
function="Pref.getUIColor"
parameter="BackgroundChatColor" />
parameter="NameTagBackground" />
<color_swatch.commit_callback
function="Pref.applyUIColor"
parameter="BackgroundChatColor" />
parameter="NameTagBackground" />
</color_swatch>
<slider
control_name="ChatBubbleOpacity"
@ -333,7 +333,7 @@
initial_value="0.8"
layout="topleft"
label_width="115"
label="Active :"
label="Active:"
left="50"
max_val="1.00"
min_val="0.00"
@ -351,7 +351,7 @@
initial_value="0.5"
layout="topleft"
label_width="115"
label="Inctive :"
label="Inactive:"
left="50"
max_val="1.00"
min_val="0.00"

View File

@ -185,7 +185,7 @@
layout="topleft"
left_pad="10"
mouse_opaque="false"
name="cache_size_label_l"
name="block_list_label"
top_delta="3"
text_color="LtGray_50"
width="300">

View File

@ -27,7 +27,8 @@
left="10"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
top="10"
follows="top|left"

View File

@ -56,7 +56,8 @@
name="back_btn"
tab_stop="false"
top="2"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHugeBold"

View File

@ -65,7 +65,8 @@
name="back_btn"
tab_stop="false"
top="0"
width="30" />
width="30"
use_draw_context_alpha="false" />
<text
follows="top|left|right"
font="SansSerifHuge"

View File

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<avatar_icon default_icon_name="Generic_Person_Large">
<avatar_icon
default_icon_name="Generic_Person_Large"
use_draw_context_alpha="false">
</avatar_icon>

View File

@ -24,5 +24,6 @@
halign="center"
pad_bottom="3"
height="23"
scale_image="true">
scale_image="true"
use_draw_context_alpha="true">
</button>

View File

@ -3,5 +3,6 @@
tab_stop="false"
mouse_opaque="false"
name="icon"
use_draw_context_alpha="true"
follows="left|top">
</icon>