From 18e8d57b210fd5a7ca1bb8fc114a3e4faf8bf537 Mon Sep 17 00:00:00 2001
From: Leslie Linden <none@none>
Date: Mon, 11 Jul 2011 17:45:29 -0700
Subject: [PATCH] EXP-995 FIX -- New icon scrolls into Received Items panel
 heading EXP-903 FIX -- Newness/Freshness number does not decrease as items
 are opened in Inbox

* Brought back freshness with the freshness
* New badge and label color from Gibson
* Inventory Panel now allows display of badges with proper clipping

Reviewed by Richard.
---
 indra/llui/CMakeLists.txt                     |   2 +
 indra/llui/llbadge.cpp                        |  24 +++++++-
 indra/llui/llbadge.h                          |  10 +++-
 indra/llui/llbadgeholder.cpp                  |  45 ++++++++++++++
 indra/llui/llbadgeholder.h                    |  56 ++++++++++++++++++
 indra/llui/llbadgeowner.cpp                   |  25 ++++----
 indra/llui/llbadgeowner.h                     |   2 +-
 indra/llui/llpanel.cpp                        |   6 +-
 indra/llui/llpanel.h                          |   6 +-
 indra/newview/llinventorypanel.cpp            |  12 ++++
 indra/newview/llinventorypanel.h              |   3 +
 indra/newview/llpanelmarketplaceinbox.cpp     |   9 +--
 .../llpanelmarketplaceinboxinventory.cpp      |  20 +++++--
 .../llpanelmarketplaceinboxinventory.h        |   4 ++
 indra/newview/skins/default/colors.xml        |   2 +-
 .../textures/widgets/Badge_Background_New.png | Bin 0 -> 1369 bytes
 .../skins/default/xui/en/widgets/badge.xml    |   3 +
 .../en/widgets/inbox_folder_view_folder.xml   |  11 +++-
 18 files changed, 208 insertions(+), 32 deletions(-)
 create mode 100644 indra/llui/llbadgeholder.cpp
 create mode 100644 indra/llui/llbadgeholder.h
 create mode 100644 indra/newview/skins/default/textures/widgets/Badge_Background_New.png

diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 0bbdcfd6ffe..673494820f9 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -29,6 +29,7 @@ set(llui_SOURCE_FILES
     llaccordionctrl.cpp
     llaccordionctrltab.cpp
     llbadge.cpp
+	llbadgeholder.cpp
     llbadgeowner.cpp
     llbutton.cpp
     llcheckboxctrl.cpp
@@ -123,6 +124,7 @@ set(llui_HEADER_FILES
     llaccordionctrl.h
     llaccordionctrltab.h
     llbadge.h
+	llbadgeholder.h
     llbadgeowner.h
     llbutton.h
     llcallbackmap.h
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
index c28a947a7fa..fde3c53a651 100644
--- a/indra/llui/llbadge.cpp
+++ b/indra/llui/llbadge.cpp
@@ -43,6 +43,8 @@ LLBadge::Params::Params()
 	, image_color("image_color")
 	, label("label")
 	, label_color("label_color")
+	, label_offset_horiz("label_offset_horiz")
+	, label_offset_vert("label_offset_vert")
 	, location("location", LLRelPos::TOP_LEFT)
 	, location_percent_hcenter("location_percent_hcenter")
 	, location_percent_vcenter("location_percent_vcenter")
@@ -65,6 +67,8 @@ bool LLBadge::Params::equals(const Params& a) const
 	comp &= (image_color() == a.image_color());
 	comp &= (label() == a.label());
 	comp &= (label_color() == a.label_color());
+	comp &= (label_offset_horiz() == a.label_offset_horiz());
+	comp &= (label_offset_vert() == a.label_offset_vert());
 	comp &= (location() == a.location());
 	comp &= (location_percent_hcenter() == a.location_percent_hcenter());
 	comp &= (location_percent_vcenter() == a.location_percent_vcenter());
@@ -84,6 +88,8 @@ LLBadge::LLBadge(const LLBadge::Params& p)
 	, mImageColor(p.image_color)
 	, mLabel(p.label)
 	, mLabelColor(p.label_color)
+	, mLabelOffsetHoriz(p.label_offset_horiz)
+	, mLabelOffsetVert(p.label_offset_vert)
 	, mLocation(p.location)
 	, mLocationPercentHCenter(0.5f)
 	, mLocationPercentVCenter(0.5f)
@@ -131,6 +137,18 @@ LLBadge::~LLBadge()
 {
 }
 
+bool LLBadge::addToView(LLView * view)
+{
+	bool child_added = view->addChild(this);
+
+	if (child_added)
+	{
+		setShape(view->getLocalRect());
+	}
+
+	return child_added;
+}
+
 void LLBadge::setLabel(const LLStringExplicit& label)
 {
 	mLabel = label;
@@ -241,8 +259,10 @@ void LLBadge::draw()
 			// Draw the label
 			//
 
-			mGLFont->render(badge_label_wstring, badge_label_begin_offset,
-							badge_center_x, badge_center_y,
+			mGLFont->render(badge_label_wstring,
+							badge_label_begin_offset,
+							badge_center_x + mLabelOffsetHoriz,
+							badge_center_y + mLabelOffsetVert,
 							mLabelColor % alpha,
 							LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position
 							LLFontGL::NORMAL, // normal text (not bold, italics, etc.)
diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h
index 0f923ef01b7..f81ccdf0cd1 100644
--- a/indra/llui/llbadge.h
+++ b/indra/llui/llbadge.h
@@ -104,6 +104,9 @@ class LLBadge
 		Optional< std::string >			label;
 		Optional< LLUIColor >			label_color;
 
+		Optional< S32 >					label_offset_horiz;
+		Optional< S32 >					label_offset_vert;
+
 		Optional< LLRelPos::Location >	location;
 		Optional< U32 >					location_percent_hcenter;
 		Optional< U32 >					location_percent_vcenter;
@@ -123,7 +126,9 @@ class LLBadge
 public:
 
 	~LLBadge();
-	
+
+	bool				addToView(LLView * view);
+
 	virtual void		draw();
 
 	const std::string	getLabel() const { return wstring_to_utf8str(mLabel); }
@@ -141,6 +146,9 @@ class LLBadge
 	LLUIString				mLabel;
 	LLUIColor				mLabelColor;
 
+	S32						mLabelOffsetHoriz;
+	S32						mLabelOffsetVert;
+
 	LLRelPos::Location		mLocation;
 	F32						mLocationPercentHCenter;
 	F32						mLocationPercentVCenter;
diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp
new file mode 100644
index 00000000000..1f786f36ae4
--- /dev/null
+++ b/indra/llui/llbadgeholder.cpp
@@ -0,0 +1,45 @@
+/** 
+ * @file llbadgeholder.cpp
+ * @brief Source for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llbadgeholder.h"
+
+#include "llbadge.h"
+#include "llview.h"
+
+
+bool LLBadgeHolder::addBadge(LLBadge * badge)
+{
+	bool badge_added = false;
+
+	LLView * this_view = dynamic_cast<LLView *>(this);
+
+	if (this_view && mAcceptsBadge)
+	{
+		badge_added = badge->addToView(this_view);
+	}
+
+	return badge_added;
+}
diff --git a/indra/llui/llbadgeholder.h b/indra/llui/llbadgeholder.h
new file mode 100644
index 00000000000..2538eaae91c
--- /dev/null
+++ b/indra/llui/llbadgeholder.h
@@ -0,0 +1,56 @@
+/** 
+ * @file llbadgeholder.h
+ * @brief Header for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBADGEHOLDER_H
+#define LL_LLBADGEHOLDER_H
+
+//
+// Classes
+//
+
+class LLBadge;
+
+class LLBadgeHolder
+{
+public:
+
+	LLBadgeHolder(bool acceptsBadge)
+		: mAcceptsBadge(acceptsBadge)
+	{
+	}
+
+	void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; }
+	bool acceptsBadge() const { return mAcceptsBadge; }
+
+	virtual bool addBadge(LLBadge * badge);
+
+private:
+
+	bool		mAcceptsBadge;
+
+};
+
+#endif  // LL_LLBADGEHOLDER_H
diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp
index 77f15567bf6..1860a05eddc 100644
--- a/indra/llui/llbadgeowner.cpp
+++ b/indra/llui/llbadgeowner.cpp
@@ -26,6 +26,7 @@
 
 #include "linden_common.h"
 
+#include "llbadgeholder.h"
 #include "llbadgeowner.h"
 #include "llpanel.h"
 
@@ -81,40 +82,44 @@ void LLBadgeOwner::setBadgeVisibility(bool visible)
 	}
 }
 
-void LLBadgeOwner::addBadgeToParentPanel()
+bool LLBadgeOwner::addBadgeToParentPanel()
 {
+	bool badge_added = false;
+
 	LLView * owner_view = mBadgeOwnerView.get();
 	
 	if (mBadge && owner_view)
 	{
-		// Badge parent is badge owner by default
-		LLView * badge_parent = owner_view;
+		LLBadgeHolder * badge_holder = NULL;
 
-		// Find the appropriate parent for the badge
+		// Find the appropriate holder for the badge
 		LLView * parent = owner_view->getParent();
 
 		while (parent)
 		{
-			LLPanel * parent_panel = dynamic_cast<LLPanel *>(parent);
+			LLBadgeHolder * badge_holder_panel = dynamic_cast<LLBadgeHolder *>(parent);
 
-			if (parent_panel && parent_panel->acceptsBadge())
+			if (badge_holder_panel && badge_holder_panel->acceptsBadge())
 			{
-				badge_parent = parent;
+				badge_holder = badge_holder_panel;
 				break;
 			}
 
 			parent = parent->getParent();
 		}
 
-		if (badge_parent)
+		if (badge_holder)
 		{
-			badge_parent->addChild(mBadge);
+			badge_added = badge_holder->addBadge(mBadge);
 		}
 		else
 		{
-			llwarns << "Unable to find parent panel for badge " << mBadge->getName() << " on " << owner_view->getName() << llendl;
+			// Badge parent is fallback badge owner if no valid holder exists in the hierarchy
+			badge_added = mBadge->addToView(owner_view);
 		}
 	}
+
+	return badge_added;
 }
 
 LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p)
diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h
index a2399189a55..8d03e306450 100644
--- a/indra/llui/llbadgeowner.h
+++ b/indra/llui/llbadgeowner.h
@@ -41,7 +41,7 @@ class LLBadgeOwner
 	LLBadgeOwner(LLHandle< LLView > viewHandle);
 
 	void initBadgeParams(const LLBadge::Params& p);
-	void addBadgeToParentPanel();
+	bool addBadgeToParentPanel();
 	
 	bool badgeHasParent() const { return (mBadge && mBadge->getParent()); }
 
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index 1dcdd79efae..775db6bc9d0 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -99,6 +99,7 @@ LLPanel::Params::Params()
 
 LLPanel::LLPanel(const LLPanel::Params& p)
 :	LLUICtrl(p),
+	LLBadgeHolder(p.accepts_badge),
 	mBgVisible(p.background_visible),
 	mBgOpaque(p.background_opaque),
 	mBgOpaqueColor(p.bg_opaque_color()),
@@ -114,8 +115,7 @@ LLPanel::LLPanel(const LLPanel::Params& p)
 	mCommitCallbackRegistrar(false),
 	mEnableCallbackRegistrar(false),
 	mXMLFilename(p.filename),
-	mVisibleSignal(NULL),
-	mAcceptsBadge(p.accepts_badge)
+	mVisibleSignal(NULL)
 	// *NOTE: Be sure to also change LLPanel::initFromParams().  We have too
 	// many classes derived from LLPanel to retrofit them all to pass in params.
 {
@@ -488,7 +488,7 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
 	mBgOpaqueImageOverlay = p.bg_opaque_image_overlay;
 	mBgAlphaImageOverlay = p.bg_alpha_image_overlay;
 
-	mAcceptsBadge = p.accepts_badge;
+	setAcceptsBadge(p.accepts_badge);
 }
 
 static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 67674fab7e9..1b777ee1cb6 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -35,6 +35,7 @@
 #include "lluiimage.h"
 #include "lluistring.h"
 #include "v4color.h"
+#include "llbadgeholder.h"
 #include <list>
 #include <queue>
 
@@ -51,7 +52,7 @@ class LLUIImage;
  * With or without border,
  * Can contain LLUICtrls.
  */
-class LLPanel : public LLUICtrl
+class LLPanel : public LLUICtrl, public LLBadgeHolder
 {
 public:
 	struct LocalizedString : public LLInitParam::Block<LocalizedString>
@@ -252,8 +253,6 @@ class LLPanel : public LLUICtrl
 	
 	boost::signals2::connection setVisibleCallback( const commit_signal_t::slot_type& cb );
 
-	bool acceptsBadge() const { return mAcceptsBadge; }
-
 protected:
 	// Override to set not found list
 	LLButton*		getDefaultButton() { return mDefaultBtn; }
@@ -268,7 +267,6 @@ class LLPanel : public LLUICtrl
 	static factory_stack_t	sFactoryStack;
 	
 private:
-	bool			mAcceptsBadge;
 	BOOL			mBgVisible;				// any background at all?
 	BOOL			mBgOpaque;				// use opaque color or image
 	LLUIColor		mBgOpaqueColor;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 702e8d5a1f1..d5d40ca65d3 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -902,6 +902,18 @@ void LLInventoryPanel::onFocusReceived()
 	LLPanel::onFocusReceived();
 }
 
+bool LLInventoryPanel::addBadge(LLBadge * badge)
+{
+	bool badge_added = false;
+
+	if (acceptsBadge())
+	{
+		badge_added = badge->addToView(mFolderRoot);
+	}
+
+	return badge_added;
+}
+
 void LLInventoryPanel::openAllFolders()
 {
 	mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index a4287a438e7..7676bbb6d7e 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -125,6 +125,9 @@ class LLInventoryPanel : public LLPanel
 	 /*virtual*/ void onFocusLost();
 	 /*virtual*/ void onFocusReceived();
 
+	// LLBadgeHolder methods
+	bool addBadge(LLBadge * badge);
+
 	// Call this method to set the selection.
 	void openAllFolders();
 	void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
index 28025f58d43..3accc43ab67 100644
--- a/indra/newview/llpanelmarketplaceinbox.cpp
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 
 #include "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceinboxinventory.h"
 
 #include "llappviewer.h"
 #include "llbutton.h"
@@ -36,7 +37,7 @@
 #include "llviewercontrol.h"
 
 
-#define SUPPORTING_FRESH_ITEM_COUNT	0
+#define SUPPORTING_FRESH_ITEM_COUNT	1
 
 
 static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
@@ -159,10 +160,10 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
 
 			for (; folders_it != folders_end; ++folders_it)
 			{
-				const LLFolderViewFolder * folder = *folders_it;
+				const LLFolderViewFolder * folder_view = *folders_it;
+				const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast<const LLInboxFolderViewFolder*>(folder_view);
 
-				// TODO: Replace this check with new "fresh" flag
-				if (folder->getCreationDate() > 1500)
+				if (inbox_folder_view && inbox_folder_view->isFresh())
 				{
 					fresh_item_count++;
 				}
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index 5dff73ee6a7..8542ea2ae4f 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -141,7 +141,7 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge
 LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
 	: LLFolderViewFolder(p)
 	, LLBadgeOwner(getHandle())
-	, mFresh(false)
+	, mFresh(true)
 {
 	initBadgeParams(p.new_badge());
 }
@@ -150,6 +150,19 @@ LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
 {
 }
 
+// virtual
+time_t LLInboxFolderViewFolder::getCreationDate() const
+{
+	time_t ret_val = LLFolderViewFolder::getCreationDate();
+
+	if (!mCreationDate)
+	{
+		updateFlag();
+	}
+
+	return ret_val;
+}
+
 // virtual
 void LLInboxFolderViewFolder::draw()
 {
@@ -166,10 +179,7 @@ void LLInboxFolderViewFolder::draw()
 void LLInboxFolderViewFolder::updateFlag() const
 {
 	LLDate saved_freshness_date = LLDate(gSavedSettings.getString("InboxFreshnessDate"));
-	if (getCreationDate() > saved_freshness_date.secondsSinceEpoch())
-	{
-		mFresh = true;
-	}
+	mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch());
 }
 
 void LLInboxFolderViewFolder::selectItem()
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
index 7b124fdccc9..899e459896a 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.h
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -66,12 +66,16 @@ class LLInboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
 	
 	LLInboxFolderViewFolder(const Params& p);
 	~LLInboxFolderViewFolder();
+
+	time_t getCreationDate() const;
 	
 	void draw();
 	
 	void updateFlag() const;
 	void selectItem();
 	void toggleOpen();
+
+	bool isFresh() const { return mFresh; }
 	
 protected:
 	void setCreationDate(time_t creation_date_utc) const;
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 76965ad14ba..31b6fc77f58 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -134,7 +134,7 @@
      reference="AvatarListItemIconOfflineColor" />
     <color
      name="BadgeImageColor"
-     value="0.44 0.69 0.56 1.0" />
+     value="1.0 0.40 0.0 1.0" />
     <color
      name="BadgeBorderColor"
      value="0.9 0.9 0.9 1.0" />
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f114f2e4aa0d0529e67af3d779dd9748488e6dd
GIT binary patch
literal 1369
zcmbVMZA=?w9DgVVa0pv;Zet;OJ21`-de2>7uD#Jg+iO{YGFBR8!{DyhgWjNb-St=t
zSrp*|E^~zGbR(K=zH1CykU-oT2ALnGQG<pkIz>pv)H!u8I@vPAd=4o3f$W3#;qL!`
z?*IG!-=BR|m8DtB)-D48WO=r*J^)gX2v%pLq4)IH2d|+|j_RsWtL1t%#wh}@2jzf(
zdBR+S;1jrD%kEEvA^=kBMSqQ2<E>zLIjrY28+|++(YQcSaXiBDje?2=ga%Qv;a3vF
zI3@;d_!A~C^hTUQNZit@2-U5Xe!jJlw+8Xz%~(;KK?Gqz<*<0TNs2OY8$QR&AXz&m
zaBR**ZM5O@LDhJxFsG~tm`M){d1!{1nbea8BTdr<7zIg4K#Cx#LXu_-6ayi)@ZiXs
z60B!@tb4&1(rkE0RU-^R#9}dh%%GQ*27<I&tr`bK6(WnmXp5wB@j@w@mt<gtD6fbS
zRg@)6W8?yIvueXpr1L3+BVO+!u@qe>6e<}J=OP5DheSB6<uzv=Rei$0VJvAK^|wR>
z!Y4%KW`#%nsLxA+QSI*TNHavyFk2N7HHB+pWxhEqNUDdm;pmS(C<Ym~3$hNHHn{8*
zWwwx{#Yr0NR>(rq;&!<0Fv+nL*37ygWn^7;NV-YV1+BCbI!rFR37W06!Qe__JyKNV
zBwk4R6_MWsEPGch<5UDrl@-4%Hzg;aDkQ6NG$cnbXSE6Qa=a*My4IfgY*|4O_Xt6^
zB8RcL`ZD4Y{-MDFNs=}~nu1#14wkhzDAGdFMu*exaN-Nt;Qy%^fr25l;rP$6B#+Pp
zYU1MPBV}=U1PN`7f>uL%a{Cdqr~5pt-5)>y>-VE&x@{}ZT{C2N+*xHWcV(OvR!pBh
ze>2VI{4jg<z^(@ex*x(q;~&u7tNLdgwf1`t4R-7gUL6h1RJd&)4NWf3E$vFA{zP|8
zWlfLv^lq$ubnqA5i0Rni^S!0DedhLw^zq)uFQ1u^%HR01d)L5*?|yrEcS=`Ad&!S~
zoT_-I`qIp8YR!F8)9rQNOx&7m9jbe`e7L3{|5Hi_A_d?qJQV0VGJIuEq9=T;^RJ6<
zja|z1Z+L0%E&7$LF<tJPiJ=|6*Bkr4Em*^6XAVB&fB&oCP@Q4jNb2d!H(F;6lYMC;
zN1uKKOpWI~`}>)+lG)Fek32lQ>8YJ7+lDhh8vrE$U;wNDAOnDV0MKdo*T_L|bBF$L
zh3@Kevm3uCGl3t@T_7JwDWcXM_%mPx(gE^?w;!ucDLS4wvFT*uWP1DFe9!%#*Y}V4
z-pjwJY=3=ypscN9e{oMmeixsU-5DFa@%J69EwlFU_2~MaH($`b`r^l<uN~hySeKJN
cbxKZ21D&qeMDEdTndq(q9#<uM!m+dcA7m!nb^rhX

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
index f77c4b71787..2d4c02b0929 100644
--- a/indra/newview/skins/default/xui/en/widgets/badge.xml
+++ b/indra/newview/skins/default/xui/en/widgets/badge.xml
@@ -7,11 +7,14 @@
        image="Badge_Background"
        image_color="BadgeImageColor"
        label_color="BadgeLabelColor"
+       label_offset_horiz="0"
+       label_offset_vert="0"
        location="top_left"
        location_percent_hcenter="85"
        location_percent_vcenter="85"
        padding_horiz="7"
        padding_vert="4"
        requests_front="true"
+       mouse_opaque="false"
        >
 </badge>
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
index c34aec1bf02..95f5cf2ecd0 100644
--- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
@@ -6,5 +6,14 @@
   item_top_pad="4"
   selection_image="Rounded_Square"
   >
-	<new_badge label="New" location="right" padding_horiz="4" padding_vert="2" location_percent_hcenter="70" />
+	<new_badge 
+        label="New" 
+        label_offset_horiz="-1"
+        location="right" 
+        padding_horiz="4" 
+        padding_vert="1" 
+        location_percent_hcenter="70"
+        border_image=""
+        image="Badge_Background_New"
+        />
 </inbox_folder_view_folder>
-- 
GitLab