From 34398aac4b269a8c5d531fd45e48ece366f58b07 Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 27 Oct 2009 15:00:36 -0700 Subject: Use consistent LLPointer return values for buttons. Reviewed with Richard. --- indra/llui/llbutton.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 7fc4997133..5e2aea2b74 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -241,8 +241,8 @@ public: void setForcePressedState(BOOL b) { mForcePressedState = b; } protected: - const LLPointer& getImageUnselected() const { return mImageUnselected; } - const LLPointer& getImageSelected() const { return mImageSelected; } + LLPointer getImageUnselected() const { return mImageUnselected; } + LLPointer getImageSelected() const { return mImageSelected; } LLFrameTimer mMouseDownTimer; -- cgit v1.2.3 From e018ecf4696aa17c7696c2b8f8bed2ac2d149eae Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 27 Oct 2009 15:01:09 -0700 Subject: EXT-1352 First pass background images for floaters and panels, including pretty header. Reviewed with Leyla. --- indra/llui/lldraghandle.cpp | 9 ++-- indra/llui/llfloater.cpp | 52 +++++++++++---------- indra/llui/llpanel.cpp | 40 +++++++++++----- indra/llui/llpanel.h | 30 +++++++----- indra/newview/app_settings/settings.xml | 14 +++--- indra/newview/skins/default/textures/textures.xml | 6 ++- .../default/textures/windows/Window_Background.png | Bin 950 -> 509 bytes .../default/textures/windows/Window_Foreground.png | Bin 959 -> 508 bytes .../skins/default/xui/en/widgets/floater.xml | 3 ++ .../newview/skins/default/xui/en/widgets/panel.xml | 6 ++- 10 files changed, 99 insertions(+), 61 deletions(-) diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp index 8eccd709ce..d9b98b1c28 100644 --- a/indra/llui/lldraghandle.cpp +++ b/indra/llui/lldraghandle.cpp @@ -49,9 +49,9 @@ #include "lluictrlfactory.h" const S32 LEADING_PAD = 5; -const S32 TITLE_PAD = 8; +const S32 TITLE_HPAD = 8; const S32 BORDER_PAD = 1; -const S32 LEFT_PAD = BORDER_PAD + TITLE_PAD + LEADING_PAD; +const S32 LEFT_PAD = BORDER_PAD + TITLE_HPAD + LEADING_PAD; const S32 RIGHT_PAD = BORDER_PAD + 32; // HACK: space for close btn and minimize btn S32 LLDragHandle::sSnapMargin = 5; @@ -240,19 +240,20 @@ void LLDragHandleLeft::draw() void LLDragHandleTop::reshapeTitleBox() { + static LLUICachedControl title_vpad("UIFloaterTitleVPad", 0); if( ! mTitleBox) { return; } const LLFontGL* font = LLFontGL::getFontSansSerif(); - S32 title_width = font->getWidth( mTitleBox->getText() ) + TITLE_PAD; + S32 title_width = font->getWidth( mTitleBox->getText() ) + TITLE_HPAD; if (getMaxTitleWidth() > 0) title_width = llmin(title_width, getMaxTitleWidth()); S32 title_height = llround(font->getLineHeight()); LLRect title_rect; title_rect.setLeftTopAndSize( LEFT_PAD, - getRect().getHeight() - BORDER_PAD, + getRect().getHeight() - title_vpad, getRect().getWidth() - LEFT_PAD - RIGHT_PAD, title_height); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 021e2e94ac..f80e8df79f 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -219,7 +219,7 @@ void LLFloater::initClass() static LLWidgetNameRegistry::StaticRegistrar sRegisterFloaterParams(&typeid(LLFloater::Params), "floater"); LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p) -: LLPanel(), +: LLPanel(p), mDragHandle(NULL), mTitle(p.title), mShortTitle(p.short_title), @@ -1548,26 +1548,42 @@ void LLFloater::draw() shadow_color % alpha, llround(shadow_offset)); - // No transparent windows in simple UI + LLUIImage* image = NULL; + LLColor4 color; if (isBackgroundOpaque()) { - gl_rect_2d( left, top, right, bottom, getBackgroundColor() % alpha ); + // NOTE: image may not be set + image = getBackgroundImage(); + color = getBackgroundColor(); } else { - gl_rect_2d( left, top, right, bottom, getTransparentColor() % alpha ); + image = getTransparentImage(); + color = getTransparentColor(); } - if(hasFocus() - && !getIsChrome() - && !getCurrentTitle().empty()) + if (image) { - static LLUIColor titlebar_focus_color = LLUIColorTable::instance().getColor("TitleBarFocusColor"); + // We're using images for this floater's backgrounds + image->draw(getLocalRect(), UI_VERTEX_COLOR % alpha); + } + else + { + // We're not using images, use old-school flat colors + gl_rect_2d( left, top, right, bottom, color % alpha ); + // draw highlight on title bar to indicate focus. RDW - 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 % alpha, 0, TRUE); + if(hasFocus() + && !getIsChrome() + && !getCurrentTitle().empty()) + { + static LLUIColor titlebar_focus_color = LLUIColorTable::instance().getColor("TitleBarFocusColor"); + + 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 % alpha, 0, TRUE); + } } } @@ -1617,18 +1633,6 @@ void LLFloater::draw() drawChild(focused_child); } - if( isBackgroundVisible() ) - { - // add in a border to improve spacialized visual aclarity ;) - // use lines instead of gl_rect_2d so we can round the edges as per james' recommendation - static LLUIColor focus_border_color = LLUIColorTable::instance().getColor("FloaterFocusBorderColor"); - static LLUIColor unfocus_border_color = LLUIColorTable::instance().getColor("FloaterUnfocusBorderColor"); - LLUI::setLineWidth(1.5f); - LLColor4 outlineColor = gFocusMgr.childHasKeyboardFocus(this) ? focus_border_color : unfocus_border_color; - gl_rect_2d_offset_local(0, getRect().getHeight() + 1, getRect().getWidth() + 1, 0, outlineColor % alpha, -LLPANEL_BORDER_WIDTH, FALSE); - LLUI::setLineWidth(1.f); - } - // update tearoff button for torn off floaters // when last host goes away if (mCanTearOff && !getHost()) diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 095200ddc3..b53f7801cf 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -71,10 +71,12 @@ const LLPanel::Params& LLPanel::getDefaultParams() LLPanel::Params::Params() : has_border("border", false), border(""), - bg_opaque_color("bg_opaque_color"), - bg_alpha_color("bg_alpha_color"), background_visible("background_visible", false), background_opaque("background_opaque", false), + bg_opaque_color("bg_opaque_color"), + bg_alpha_color("bg_alpha_color"), + bg_opaque_image("bg_opaque_image"), + bg_alpha_image("bg_alpha_image"), min_width("min_width", 100), min_height("min_height", 100), strings("string"), @@ -92,10 +94,12 @@ LLPanel::Params::Params() LLPanel::LLPanel(const LLPanel::Params& p) : LLUICtrl(p), - mBgColorAlpha(p.bg_alpha_color()), - mBgColorOpaque(p.bg_opaque_color()), mBgVisible(p.background_visible), mBgOpaque(p.background_opaque), + mBgOpaqueColor(p.bg_opaque_color()), + mBgAlphaColor(p.bg_alpha_color()), + mBgOpaqueImage(p.bg_opaque_image()), + mBgAlphaImage(p.bg_alpha_image()), mDefaultBtn(NULL), mBorder(NULL), mLabel(p.label), @@ -178,19 +182,31 @@ void LLPanel::draw() // draw background if( mBgVisible ) { - //RN: I don't see the point of this - S32 left = 0;//LLPANEL_BORDER_WIDTH; - S32 top = getRect().getHeight();// - LLPANEL_BORDER_WIDTH; - S32 right = getRect().getWidth();// - LLPANEL_BORDER_WIDTH; - S32 bottom = 0;//LLPANEL_BORDER_WIDTH; - + LLRect local_rect = getLocalRect(); if (mBgOpaque ) { - gl_rect_2d( left, top, right, bottom, mBgColorOpaque.get() % alpha); + // opaque, in-front look + if (mBgOpaqueImage.notNull()) + { + mBgOpaqueImage->draw( local_rect, UI_VERTEX_COLOR % alpha ); + } + else + { + // fallback to flat colors when there are no images + gl_rect_2d( local_rect, mBgOpaqueColor.get() % alpha); + } } else { - gl_rect_2d( left, top, right, bottom, mBgColorAlpha.get() % alpha); + // transparent, in-back look + if (mBgAlphaImage.notNull()) + { + mBgAlphaImage->draw( local_rect, UI_VERTEX_COLOR % alpha ); + } + else + { + gl_rect_2d( local_rect, mBgAlphaColor.get() % alpha ); + } } } diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index e8db68ffbb..c213809d68 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -48,6 +48,7 @@ const BOOL BORDER_YES = TRUE; const BOOL BORDER_NO = FALSE; class LLButton; +class LLUIImage; /* * General purpose concrete view base class. @@ -72,12 +73,15 @@ public: Optional has_border; Optional border; - Optional bg_opaque_color, - bg_alpha_color; - Optional background_visible, background_opaque; + Optional bg_opaque_color, + bg_alpha_color; + // opaque image is for "panel in foreground" look + Optional bg_opaque_image, + bg_alpha_image; + Optional min_width, min_height; @@ -127,10 +131,12 @@ public: BOOL hasBorder() const { return mBorder != NULL; } void setBorderVisible( BOOL b ); - void setBackgroundColor( const LLColor4& color ) { mBgColorOpaque = color; } - const LLColor4& getBackgroundColor() const { return mBgColorOpaque; } - void setTransparentColor(const LLColor4& color) { mBgColorAlpha = color; } - const LLColor4& getTransparentColor() const { return mBgColorAlpha; } + void setBackgroundColor( const LLColor4& color ) { mBgOpaqueColor = color; } + const LLColor4& getBackgroundColor() const { return mBgOpaqueColor; } + void setTransparentColor(const LLColor4& color) { mBgAlphaColor = color; } + const LLColor4& getTransparentColor() const { return mBgAlphaColor; } + LLPointer getBackgroundImage() const { return mBgOpaqueImage; } + LLPointer getTransparentImage() const { return mBgAlphaImage; } void setBackgroundVisible( BOOL b ) { mBgVisible = b; } BOOL isBackgroundVisible() const { return mBgVisible; } void setBackgroundOpaque(BOOL b) { mBgOpaque = b; } @@ -248,10 +254,12 @@ protected: std::string mHelpTopic; // the name of this panel's help topic to display in the Help Viewer private: - LLUIColor mBgColorAlpha; - LLUIColor mBgColorOpaque; - BOOL mBgVisible; - BOOL mBgOpaque; + BOOL mBgVisible; // any background at all? + BOOL mBgOpaque; // use opaque color or image + LLUIColor mBgOpaqueColor; + LLUIColor mBgAlphaColor; + LLPointer mBgOpaqueImage; // "panel in front" look + LLPointer mBgAlphaImage; // "panel in back" look LLViewBorder* mBorder; LLButton* mDefaultBtn; LLUIString mLabel; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3682d48577..7219944fd7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8779,13 +8779,13 @@ UICloseBoxFromTop Comment - Size of UI floater close box from top + Distance from top of floater to top of close box icon, pixels Persist 1 Type S32 Value - 1 + 5 UIExtraTriangleHeight @@ -8823,13 +8823,13 @@ UIFloaterHeaderSize Comment - Size of UI floater header size + UI floater header height in pixels Persist 1 Type S32 Value - 18 + 25 UIFloaterHPad @@ -8853,16 +8853,16 @@ Value 0 - UIFloaterVPad + UIFloaterTitleVPad Comment - Size of UI floater vertical pad + Distance from top of floater to top of title string, pixels Persist 1 Type S32 Value - 6 + 7 UIImgDefaultEyesUUID diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 4d54838225..f9842526dd 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -471,8 +471,10 @@ - - + + diff --git a/indra/newview/skins/default/textures/windows/Window_Background.png b/indra/newview/skins/default/textures/windows/Window_Background.png index e9f15e76b9..db253900af 100644 Binary files a/indra/newview/skins/default/textures/windows/Window_Background.png and b/indra/newview/skins/default/textures/windows/Window_Background.png differ diff --git a/indra/newview/skins/default/textures/windows/Window_Foreground.png b/indra/newview/skins/default/textures/windows/Window_Foreground.png index e76e9f3c79..b81ec5b43c 100644 Binary files a/indra/newview/skins/default/textures/windows/Window_Foreground.png and b/indra/newview/skins/default/textures/windows/Window_Foreground.png differ diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml index 4a866c2eb2..ece6373166 100644 --- a/indra/newview/skins/default/xui/en/widgets/floater.xml +++ b/indra/newview/skins/default/xui/en/widgets/floater.xml @@ -1,6 +1,9 @@ + diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml index b81a70b845..127f0f40e8 100644 --- a/indra/newview/skins/default/xui/en/widgets/panel.xml +++ b/indra/newview/skins/default/xui/en/widgets/panel.xml @@ -1,5 +1,9 @@ + \ No newline at end of file + background_opaque="false"/> -- cgit v1.2.3 From c3571b61fa8493b4298a6b1dc1f595a4077d1716 Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 27 Oct 2009 15:04:04 -0700 Subject: Renamed Toast.png to Toast_Background.png for consistency with Window and Inspector background images. --- indra/newview/skins/default/textures/textures.xml | 2 +- .../skins/default/textures/windows/Toast_Background.png | Bin 0 -> 414 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 indra/newview/skins/default/textures/windows/Toast_Background.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index f9842526dd..f33121b163 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -437,7 +437,7 @@ - + diff --git a/indra/newview/skins/default/textures/windows/Toast_Background.png b/indra/newview/skins/default/textures/windows/Toast_Background.png new file mode 100644 index 0000000000..feeee78033 Binary files /dev/null and b/indra/newview/skins/default/textures/windows/Toast_Background.png differ -- cgit v1.2.3 From f80a3e268ad96de935c886adc2009ff5b2c880fc Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 27 Oct 2009 16:26:49 -0700 Subject: Revert change: Floater constructor CANNOT call LLPanel(p) with params, must set bg images in initFromParams, because we have too many LLPanels to retrofit them all to call LLPanel() with params. Discussed with Richard. --- indra/llui/llfloater.cpp | 5 ++++- indra/llui/llpanel.cpp | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index f80e8df79f..ae5dd5a1ce 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -219,7 +219,7 @@ void LLFloater::initClass() static LLWidgetNameRegistry::StaticRegistrar sRegisterFloaterParams(&typeid(LLFloater::Params), "floater"); LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p) -: LLPanel(p), +: LLPanel(), // intentionally do not pass params here, see initFromParams mDragHandle(NULL), mTitle(p.title), mShortTitle(p.short_title), @@ -2532,6 +2532,9 @@ void LLFloater::setupParamsForExport(Params& p, LLView* parent) void LLFloater::initFromParams(const LLFloater::Params& p) { + // *NOTE: We have too many classes derived from LLPanel to retrofit them + // all to pass in params via constructors. So we use this method. + // control_name, tab_stop, focus_lost_callback, initial_value, rect, enabled, visible LLPanel::initFromParams(p); diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index b53f7801cf..0d340699c5 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -107,6 +107,8 @@ LLPanel::LLPanel(const LLPanel::Params& p) mCommitCallbackRegistrar(false), mEnableCallbackRegistrar(false), mXMLFilename(p.filename) + // *NOTE: Be sure to also change LLPanel::initFromParams(). We have too + // many classes derived from LLPanel to retrofit them all to pass in params. { setIsChrome(FALSE); @@ -459,7 +461,8 @@ void LLPanel::initFromParams(const LLPanel::Params& p) setBackgroundOpaque(p.background_opaque); setBackgroundColor(p.bg_opaque_color().get()); setTransparentColor(p.bg_alpha_color().get()); - + mBgOpaqueImage = p.bg_opaque_image(); + mBgAlphaImage = p.bg_alpha_image(); } static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup"); -- cgit v1.2.3 From 7f4d3266382b29d9dcba9dee2c1e279aa4639b9e Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 27 Oct 2009 16:27:26 -0700 Subject: EXT-1352 Use image backgrounds for inspectors and toasts. Art only, not reviewed. --- indra/newview/skins/default/textures/textures.xml | 6 ++++-- .../default/textures/windows/Inspector_Background.png | Bin 400 -> 348 bytes .../skins/default/textures/windows/Toast_Background.png | Bin 414 -> 349 bytes indra/newview/skins/default/xui/en/inspect_avatar.xml | 2 +- indra/newview/skins/default/xui/en/inspect_group.xml | 2 +- indra/newview/skins/default/xui/en/inspect_object.xml | 2 +- indra/newview/skins/default/xui/en/panel_toast.xml | 2 ++ 7 files changed, 9 insertions(+), 5 deletions(-) diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index f33121b163..b6215982e2 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -147,7 +147,8 @@ - + @@ -437,7 +438,8 @@ - + diff --git a/indra/newview/skins/default/textures/windows/Inspector_Background.png b/indra/newview/skins/default/textures/windows/Inspector_Background.png index 807e8e553c..4c2a728ac5 100644 Binary files a/indra/newview/skins/default/textures/windows/Inspector_Background.png and b/indra/newview/skins/default/textures/windows/Inspector_Background.png differ diff --git a/indra/newview/skins/default/textures/windows/Toast_Background.png b/indra/newview/skins/default/textures/windows/Toast_Background.png index feeee78033..f27d1a12ec 100644 Binary files a/indra/newview/skins/default/textures/windows/Toast_Background.png and b/indra/newview/skins/default/textures/windows/Toast_Background.png differ diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml index 181c80ebc7..1e44032b97 100644 --- a/indra/newview/skins/default/xui/en/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml @@ -5,7 +5,7 @@ --> Date: Thu, 29 Oct 2009 10:02:54 -0700 Subject: EXT-384 Fix warning about "GrapicsCardTextureMemory" when opening preferences. Trivial misspelling, not reviewed. --- indra/newview/skins/default/xui/en/floater_hardware_settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml index fe04d1f627..d47c726aa9 100644 --- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml @@ -131,7 +131,7 @@ layout="topleft" left="10" max_val="4096" - name="GrapicsCardTextureMemory" + name="GraphicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry." top_pad="10" width="300" /> -- cgit v1.2.3 From 432e243e1aca565ea19091d39f1ff33056ce4075 Mon Sep 17 00:00:00 2001 From: James Cook Date: Thu, 29 Oct 2009 15:37:25 -0700 Subject: EXT-1352 Add image art to floater backgrounds. Implemented "legacy_header_height" hack to account for new art being 25 pixels tall instead of legacy 18 pixels -- it auto-sizes the floaters to be taller. Made all floaters have resize handles, just disable and make invisible if unused. This simplifies the floater construction logic. Floater header height now lives in floater.xml, not as a global saved setting. Reviewed with Richard. --- indra/llui/llfloater.cpp | 139 ++++++++++++++------- indra/llui/llfloater.h | 8 ++ indra/llui/llmenugl.cpp | 3 +- indra/llui/llmultifloater.cpp | 9 +- indra/newview/app_settings/settings.xml | 11 -- indra/newview/llfloatercamera.cpp | 4 +- indra/newview/llfloatergroupinvite.cpp | 5 +- indra/newview/llfloaternotificationsconsole.cpp | 3 +- indra/newview/llfloateruipreview.cpp | 3 +- indra/newview/lltexturectrl.cpp | 2 +- indra/newview/skins/default/textures/textures.xml | 8 +- .../textures/windows/Window_NoTitle_Background.png | Bin 0 -> 289 bytes .../textures/windows/Window_NoTitle_Foreground.png | Bin 0 -> 290 bytes .../newview/skins/default/xui/en/floater_tools.xml | 2 + .../skins/default/xui/en/widgets/floater.xml | 4 +- 15 files changed, 127 insertions(+), 74 deletions(-) create mode 100644 indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png create mode 100644 indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index ae5dd5a1ce..c8e26ecaea 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -191,9 +191,11 @@ LLFloater::Params::Params() can_tear_off("can_tear_off", true), save_rect("save_rect", false), save_visibility("save_visibility", false), + can_dock("can_dock", false), + header_height("header_height", 0), + legacy_header_height("legacy_header_height", 0), open_callback("open_callback"), - close_callback("close_callback"), - can_dock("can_dock", false) + close_callback("close_callback") { visible = false; } @@ -233,6 +235,8 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p) mResizable(p.can_resize), mMinWidth(p.min_width), mMinHeight(p.min_height), + mHeaderHeight(p.header_height), + mLegacyHeaderHeight(p.legacy_header_height), mMinimized(FALSE), mForeground(FALSE), mFirstLook(TRUE), @@ -274,16 +278,16 @@ LLFloater::LLFloater(const LLSD& key, const LLFloater::Params& p) // chrome floaters don't take focus at all setFocusRoot(!getIsChrome()); + addDragHandle(); + addResizeCtrls(); + enableResizeCtrls(mResizable); + initFloater(); } // Note: Floaters constructed from XML call init() twice! void LLFloater::initFloater() { - addDragHandle(); - - addResizeCtrls(); - // Close button. if (mCanClose) { @@ -323,9 +327,6 @@ void LLFloater::initFloater() void LLFloater::addDragHandle() { - static LLUICachedControl floater_close_box_size ("UIFloaterCloseBoxSize", 0); - S32 close_box_size = mCanClose ? floater_close_box_size : 0; - if (!mDragHandle) { if (mDragOnLeft) @@ -346,6 +347,14 @@ void LLFloater::addDragHandle() } addChild(mDragHandle); } + layoutDragHandle(); +} + +void LLFloater::layoutDragHandle() +{ + static LLUICachedControl floater_close_box_size ("UIFloaterCloseBoxSize", 0); + S32 close_box_size = mCanClose ? floater_close_box_size : 0; + LLRect rect; if (mDragOnLeft) { @@ -361,40 +370,17 @@ void LLFloater::addDragHandle() } void LLFloater::addResizeCtrls() -{ - for (S32 i = 0; i < 4; i++) - { - if (mResizeBar[i]) - { - removeChild(mResizeBar[i]); - delete mResizeBar[i]; - mResizeBar[i] = NULL; - } - if (mResizeHandle[i]) - { - removeChild(mResizeHandle[i]); - delete mResizeHandle[i]; - mResizeHandle[i] = NULL; - } - } - if( !mResizable ) - { - return; - } - +{ // Resize bars (sides) - const S32 RESIZE_BAR_THICKNESS = 3; LLResizeBar::Params p; p.name("resizebar_left"); p.resizing_view(this); - p.rect(LLRect( 0, getRect().getHeight(), RESIZE_BAR_THICKNESS, 0)); p.min_size(mMinWidth); p.side(LLResizeBar::LEFT); mResizeBar[LLResizeBar::LEFT] = LLUICtrlFactory::create(p); addChild( mResizeBar[LLResizeBar::LEFT] ); p.name("resizebar_top"); - p.rect(LLRect( 0, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_BAR_THICKNESS)); p.min_size(mMinHeight); p.side(LLResizeBar::TOP); @@ -402,15 +388,12 @@ void LLFloater::addResizeCtrls() addChild( mResizeBar[LLResizeBar::TOP] ); p.name("resizebar_right"); - p.rect(LLRect(getRect().getWidth() - RESIZE_BAR_THICKNESS, getRect().getHeight(), getRect().getWidth(), 0)); p.min_size(mMinWidth); - p.side(LLResizeBar::RIGHT); - + p.side(LLResizeBar::RIGHT); mResizeBar[LLResizeBar::RIGHT] = LLUICtrlFactory::create(p); addChild( mResizeBar[LLResizeBar::RIGHT] ); p.name("resizebar_bottom"); - p.rect(LLRect(0, RESIZE_BAR_THICKNESS, getRect().getWidth(), 0)); p.min_size(mMinHeight); p.side(LLResizeBar::BOTTOM); mResizeBar[LLResizeBar::BOTTOM] = LLUICtrlFactory::create(p); @@ -421,27 +404,69 @@ void LLFloater::addResizeCtrls() // handles must not be mouse-opaque, otherwise they block hover events // to other buttons like the close box. JC handle_p.mouse_opaque(false); - handle_p.rect(LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, getRect().getWidth(), 0)); handle_p.min_width(mMinWidth); handle_p.min_height(mMinHeight); handle_p.corner(LLResizeHandle::RIGHT_BOTTOM); mResizeHandle[0] = LLUICtrlFactory::create(handle_p); addChild(mResizeHandle[0]); - handle_p.rect(LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_HANDLE_HEIGHT)); handle_p.corner(LLResizeHandle::RIGHT_TOP); mResizeHandle[1] = LLUICtrlFactory::create(handle_p); addChild(mResizeHandle[1]); - handle_p.rect(LLRect( 0, RESIZE_HANDLE_HEIGHT, RESIZE_HANDLE_WIDTH, 0 )); handle_p.corner(LLResizeHandle::LEFT_BOTTOM); mResizeHandle[2] = LLUICtrlFactory::create(handle_p); addChild(mResizeHandle[2]); - handle_p.rect(LLRect( 0, getRect().getHeight(), RESIZE_HANDLE_WIDTH, getRect().getHeight() - RESIZE_HANDLE_HEIGHT )); handle_p.corner(LLResizeHandle::LEFT_TOP); mResizeHandle[3] = LLUICtrlFactory::create(handle_p); addChild(mResizeHandle[3]); + + layoutResizeCtrls(); +} + +void LLFloater::layoutResizeCtrls() +{ + LLRect rect; + + // Resize bars (sides) + const S32 RESIZE_BAR_THICKNESS = 3; + rect = LLRect( 0, getRect().getHeight(), RESIZE_BAR_THICKNESS, 0); + mResizeBar[LLResizeBar::LEFT]->setRect(rect); + + rect = LLRect( 0, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_BAR_THICKNESS); + mResizeBar[LLResizeBar::TOP]->setRect(rect); + + rect = LLRect(getRect().getWidth() - RESIZE_BAR_THICKNESS, getRect().getHeight(), getRect().getWidth(), 0); + mResizeBar[LLResizeBar::RIGHT]->setRect(rect); + + rect = LLRect(0, RESIZE_BAR_THICKNESS, getRect().getWidth(), 0); + mResizeBar[LLResizeBar::BOTTOM]->setRect(rect); + + // Resize handles (corners) + rect = LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, RESIZE_HANDLE_HEIGHT, getRect().getWidth(), 0); + mResizeHandle[0]->setRect(rect); + + rect = LLRect( getRect().getWidth() - RESIZE_HANDLE_WIDTH, getRect().getHeight(), getRect().getWidth(), getRect().getHeight() - RESIZE_HANDLE_HEIGHT); + mResizeHandle[1]->setRect(rect); + + rect = LLRect( 0, RESIZE_HANDLE_HEIGHT, RESIZE_HANDLE_WIDTH, 0 ); + mResizeHandle[2]->setRect(rect); + + rect = LLRect( 0, getRect().getHeight(), RESIZE_HANDLE_WIDTH, getRect().getHeight() - RESIZE_HANDLE_HEIGHT ); + mResizeHandle[3]->setRect(rect); +} + +void LLFloater::enableResizeCtrls(bool enable) +{ + for (S32 i = 0; i < 4; ++i) + { + mResizeBar[i]->setVisible(enable); + mResizeBar[i]->setEnabled(enable); + + mResizeHandle[i]->setVisible(enable); + mResizeHandle[i]->setEnabled(enable); + } } // virtual @@ -909,7 +934,8 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user) void LLFloater::setMinimized(BOOL minimize) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& default_params = LLFloater::getDefaultParams(); + S32 floater_header_size = default_params.header_height; static LLUICachedControl minimized_width ("UIMinimizedWidth", 0); if (minimize == mMinimized) return; @@ -1082,7 +1108,8 @@ void LLFloater::setFocus( BOOL b ) void LLFloater::setRect(const LLRect &rect) { LLPanel::setRect(rect); - addDragHandle(); // re-add drag handle, sized based on rect + layoutDragHandle(); + layoutResizeCtrls(); } // virtual @@ -1389,9 +1416,9 @@ void LLFloater::onClickMinimize(LLFloater* self) void LLFloater::onClickTearOff(LLFloater* self) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); if (!self) return; + S32 floater_header_size = self->mHeaderHeight; LLMultiFloater* host_floater = self->getHost(); if (host_floater) //Tear off { @@ -1681,7 +1708,7 @@ void LLFloater::setCanTearOff(BOOL can_tear_off) void LLFloater::setCanResize(BOOL can_resize) { mResizable = can_resize; - addResizeCtrls(); + enableResizeCtrls(can_resize); } void LLFloater::setCanDrag(BOOL can_drag) @@ -2117,7 +2144,8 @@ void LLFloaterView::focusFrontFloater() void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& default_params = LLFloater::getDefaultParams(); + S32 floater_header_size = default_params.header_height; static LLUICachedControl minimized_width ("UIMinimizedWidth", 0); S32 col = 0; LLRect snap_rect_local = getLocalSnapRect(); @@ -2551,6 +2579,8 @@ void LLFloater::initFromParams(const LLFloater::Params& p) mResizable = p.can_resize; mMinWidth = p.min_width; mMinHeight = p.min_height; + mHeaderHeight = p.header_height; + mLegacyHeaderHeight = p.legacy_header_height; mSingleInstance = p.single_instance; mAutoTile = p.auto_tile; @@ -2606,6 +2636,23 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o LLFloater::setFloaterHost(last_host); } + // HACK: When we changed the header height to 25 pixels in Viewer 2, rather + // than re-layout all the floaters we use this value in pixels to make the + // whole floater bigger and change the top-left coordinate for widgets. + // The goal is to eventually set mLegacyHeaderHeight to zero, which would + // make the top-left corner for widget layout the same as the top-left + // corner of the window's content area. James + S32 header_stretch = (mHeaderHeight - mLegacyHeaderHeight); + if (header_stretch > 0) + { + // Stretch the floater vertically, don't move widgets + LLRect rect = getRect(); + rect.mTop += header_stretch; + + // This will also update drag handle, title bar, close box, etc. + setRect(rect); + } + BOOL result; { LLFastTimer ft(POST_BUILD); diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 2fdaecf59a..afdc4ccf00 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -125,6 +125,8 @@ public: save_rect, save_visibility, can_dock; + Optional header_height, + legacy_header_height; // HACK see initFromXML() Optional open_callback, close_callback; @@ -209,6 +211,7 @@ public: bool isDragOnLeft() const{ return mDragOnLeft; } S32 getMinWidth() const{ return mMinWidth; } S32 getMinHeight() const{ return mMinHeight; } + S32 getHeaderHeight() const { return mHeaderHeight; } virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); @@ -302,7 +305,10 @@ private: void buildButtons(); BOOL offerClickToButton(S32 x, S32 y, MASK mask, EFloaterButtons index); void addResizeCtrls(); + void layoutResizeCtrls(); + void enableResizeCtrls(bool enable); void addDragHandle(); + void layoutDragHandle(); // repair layout public: // Called when floater is opened, passes mKey @@ -340,6 +346,8 @@ private: S32 mMinWidth; S32 mMinHeight; + S32 mHeaderHeight; // height in pixels of header for title, drag bar + S32 mLegacyHeaderHeight;// HACK see initFloaterXML() BOOL mMinimized; BOOL mForeground; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index cf013efca0..6e058e4c62 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3435,7 +3435,7 @@ void LLMenuHolderGL::setActivatedItem(LLMenuItemGL* item) LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) : LLFloater(LLSD()) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + S32 floater_header_size = getHeaderHeight(); setName(menup->getName()); setTitle(menup->getLabel()); @@ -3479,7 +3479,6 @@ LLTearOffMenu::~LLTearOffMenu() void LLTearOffMenu::draw() { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); mMenu->setBackgroundVisible(isBackgroundOpaque()); mMenu->needsArrange(); diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp index e8ce1a8d97..7d21c7e0c1 100644 --- a/indra/llui/llmultifloater.cpp +++ b/indra/llui/llmultifloater.cpp @@ -54,7 +54,8 @@ LLMultiFloater::LLMultiFloater(const LLSD& key, const LLFloater::Params& params) void LLMultiFloater::buildTabContainer() { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& default_params = LLFloater::getDefaultParams(); + S32 floater_header_size = default_params.header_height; LLTabContainer::Params p; p.name(std::string("Preview Tabs")); @@ -131,7 +132,8 @@ BOOL LLMultiFloater::closeAllFloaters() void LLMultiFloater::growToFit(S32 content_width, S32 content_height) { static LLUICachedControl tabcntr_close_btn_size ("UITabCntrCloseBtnSize", 0); - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& default_params = LLFloater::getDefaultParams(); + S32 floater_header_size = default_params.header_height; S32 tabcntr_header_height = LLPANEL_BORDER_WIDTH + tabcntr_close_btn_size; S32 new_width = llmax(getRect().getWidth(), content_width + LLPANEL_BORDER_WIDTH * 2); S32 new_height = llmax(getRect().getHeight(), content_height + floater_header_size + tabcntr_header_height); @@ -461,7 +463,8 @@ BOOL LLMultiFloater::postBuild() void LLMultiFloater::updateResizeLimits() { static LLUICachedControl tabcntr_close_btn_size ("UITabCntrCloseBtnSize", 0); - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& default_params = LLFloater::getDefaultParams(); + S32 floater_header_size = default_params.header_height; S32 tabcntr_header_height = LLPANEL_BORDER_WIDTH + tabcntr_close_btn_size; // initialize minimum size constraint to the original xml values. S32 new_min_width = mOrigMinWidth; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7219944fd7..5e6678131d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8820,17 +8820,6 @@ Value 16 - UIFloaterHeaderSize - - Comment - UI floater header height in pixels - Persist - 1 - Type - S32 - Value - 25 - UIFloaterHPad Comment diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index dca0773139..d1317f7c36 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -268,8 +268,8 @@ void LLFloaterCamera::updateState() LLRect controls_rect; if (childGetRect(CONTROLS, controls_rect)) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); - static S32 height = controls_rect.getHeight() - floater_header_size; + S32 floater_header_size = getHeaderHeight(); + S32 height = controls_rect.getHeight() - floater_header_size; S32 newHeight = rect.getHeight(); if (showControls) diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp index 3598479305..bf484c6343 100644 --- a/indra/newview/llfloatergroupinvite.cpp +++ b/indra/newview/llfloatergroupinvite.cpp @@ -81,7 +81,7 @@ void LLFloaterGroupInvite::impl::closeFloater(void* data) LLFloaterGroupInvite::LLFloaterGroupInvite(const LLUUID& group_id) : LLFloater(group_id) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + S32 floater_header_size = getHeaderHeight(); LLRect contents; mImpl = new impl(group_id); @@ -114,7 +114,8 @@ LLFloaterGroupInvite::~LLFloaterGroupInvite() // static void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, std::vector *agent_ids) { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); + S32 floater_header_size = floater_params.header_height; LLRect contents; // Make sure group_id isn't null diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index f2dff55044..f20fca1258 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -221,7 +221,8 @@ void LLFloaterNotificationConsole::removeChannel(const std::string& name) //static void LLFloaterNotificationConsole::updateResizeLimits() { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); + S32 floater_header_size = floater_params.header_height; LLLayoutStack& stack = getChildRef("notification_channels"); setResizeLimits(getMinWidth(), floater_header_size + HEADER_PADDING + ((NOTIFICATION_PANEL_HEADER_HEIGHT + 3) * stack.getNumPanels())); diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index ac743df4f1..2fe21f28de 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -865,7 +865,8 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) } else // if it is a panel... { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); + S32 floater_header_size = floater_params.header_height; LLPanel::Params panel_params; LLPanel* panel = LLUICtrlFactory::create(panel_params); // create a new panel diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index b5aec1b80b..4940d9b5bb 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -458,7 +458,7 @@ BOOL LLFloaterTexturePicker::postBuild() // virtual void LLFloaterTexturePicker::draw() { - static LLUICachedControl floater_header_size ("UIFloaterHeaderSize", 0); + S32 floater_header_size = getHeaderHeight(); if (mOwner) { // draw cone of context pointing back to texture swatch diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 4f07d25b25..3d1cb84993 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -477,10 +477,10 @@ scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> - - - - + + diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png new file mode 100644 index 0000000000..a570ac06bd Binary files /dev/null and b/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png differ diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png new file mode 100644 index 0000000000..d573e8c69a Binary files /dev/null and b/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png differ diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 29fe046ed3..4e5c8c3747 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -3,6 +3,8 @@ follows="left|top|right" height="570" layout="topleft" + bg_opaque_image="Window_NoTitle_Foreground" + bg_alpha_image="Window_NoTitle_Background" name="toolbox floater" help_topic="toolbox_floater" save_rect="true" diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml index ece6373166..82f6d44f78 100644 --- a/indra/newview/skins/default/xui/en/widgets/floater.xml +++ b/indra/newview/skins/default/xui/en/widgets/floater.xml @@ -6,4 +6,6 @@ bg_opaque_image="Window_Foreground" bg_alpha_image="Window_Background" background_visible="true" - background_opaque="false"/> + background_opaque="false" + header_height="25" + legacy_header_height="18" /> -- cgit v1.2.3 From 8f8718546a4d9d9a6d70d292814edea889e20e27 Mon Sep 17 00:00:00 2001 From: James Cook Date: Thu, 29 Oct 2009 15:37:45 -0700 Subject: Fixed some outlines being 1 pixel away from color swatches. Not reviewed. --- indra/newview/llfloatercolorpicker.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index 8e385fca78..73b79d8e13 100644 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -561,7 +561,7 @@ void LLFloaterColorPicker::draw() // create rgb area outline gl_rect_2d ( mRGBViewerImageLeft, mRGBViewerImageTop - mRGBViewerImageHeight, - mRGBViewerImageLeft + mRGBViewerImageWidth, + mRGBViewerImageLeft + mRGBViewerImageWidth + 1, mRGBViewerImageTop, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE ); @@ -591,7 +591,7 @@ void LLFloaterColorPicker::draw() // draw luminance slider outline gl_rect_2d ( mLumRegionLeft, mLumRegionTop - mLumRegionHeight, - mLumRegionLeft + mLumRegionWidth, + mLumRegionLeft + mLumRegionWidth + 1, mLumRegionTop, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE ); @@ -607,7 +607,7 @@ void LLFloaterColorPicker::draw() // draw selected color swatch outline gl_rect_2d ( mSwatchRegionLeft, mSwatchRegionTop - mSwatchRegionHeight, - mSwatchRegionLeft + mSwatchRegionWidth, + mSwatchRegionLeft + mSwatchRegionWidth + 1, mSwatchRegionTop, LLColor4 ( 0.0f, 0.0f, 0.0f, 1.0f ), FALSE ); -- cgit v1.2.3