From b9fa0e9bbe0db5ecdfb5fbdd88474e0d3bb8eed2 Mon Sep 17 00:00:00 2001
From: Vadim ProductEngine <vsavchuk@productengine.com>
Date: Sat, 4 Dec 2010 13:07:51 +0200
Subject: [PATCH] STORM-717 FIXED Made nearby chat toasts respect transparency
 settings:

* Normally toasts are as opaque as specified by "inactive floater opacity" setting.
* When mouse is hovering a toast, the toast uses "active floater opacity" setting.
* Fading toasts have 1/2 of "inactive floater opacity".
---
 indra/llui/lluictrl.cpp               |  4 +++
 indra/llui/lluictrl.h                 |  5 ++--
 indra/newview/llnearbychathandler.cpp | 39 +++++++++++++++++++++++++++
 indra/newview/lltoast.h               |  8 +++---
 4 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index 7e4cb78d805..afd60cbb3ee 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -944,6 +944,10 @@ F32 LLUICtrl::getCurrentTransparency()
 	case TT_INACTIVE:
 		alpha = sInactiveControlTransparency;
 		break;
+
+	case TT_FADING:
+		alpha = sInactiveControlTransparency / 2;
+		break;
 	}
 
 	return alpha;
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index a78f98ac76b..b37e9f6b1b4 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -123,8 +123,9 @@ class LLUICtrl
 	enum ETypeTransparency
 	{
 		TT_DEFAULT,
-		TT_ACTIVE,
-		TT_INACTIVE
+		TT_ACTIVE,		// focused floater
+		TT_INACTIVE,	// other floaters
+		TT_FADING,		// fading toast
 	};
 	/*virtual*/ ~LLUICtrl();
 
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index d2ad78f140c..dfbbaa09410 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -165,11 +165,20 @@ class LLNearbyChatToast : public LLToast
 	:	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
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index f88c6286316..d23e858c5c1 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -141,7 +141,7 @@ class LLToast : public LLModalDialog
 	//
 	virtual void setVisible(BOOL show);
 
-	/*virtual*/ void setBackgroundOpaque(BOOL b);
+	virtual void setBackgroundOpaque(BOOL b);
 	//
 	virtual void hide();
 
@@ -198,6 +198,10 @@ class LLToast : public LLModalDialog
 
 	LLHandle<LLToast> getHandle() { mHandle.bind(this); return mHandle; }
 
+	bool			getTransparentState() const { return mIsTransparent; }
+	virtual void	setTransparentState(bool transparent);
+
+
 private:
 
 	void onToastMouseEnter();
@@ -206,8 +210,6 @@ class LLToast : public LLModalDialog
 
 	void expire();
 
-	void setTransparentState(bool transparent);
-
 	LLUUID				mNotificationID;
 	LLUUID				mSessionID;
 	LLNotificationPtr	mNotification;
-- 
GitLab