Browse Source

Add ability to set disabled widget alpha

weinand 9 years ago
parent
commit
dd5cb7fb74

+ 16 - 1
Source/ThirdParty/TurboBadger/tb_widgets.cpp

@@ -66,6 +66,7 @@ TBWidget::PaintProps::PaintProps()
 TBWidget::TBWidget()
     : m_parent(nullptr)
     , m_opacity(1.f)
+    , m_disabledOpacity(-1.0f)
     , m_state(WIDGET_STATE_NONE)
     , m_gravity(WIDGET_GRAVITY_DEFAULT)
     , m_layout_params(nullptr)
@@ -259,6 +260,17 @@ void TBWidget::SetOpacity(float opacity)
     Invalidate();
 }
 
+void TBWidget::SetDisabledOpacity(float opacity)
+{
+    opacity = Clamp(opacity, -1.f, 1.f);
+    if (m_disabledOpacity == opacity)
+        return;
+    if (opacity == 0) // Invalidate after setting opacity 0 will do nothing.
+        Invalidate();
+    m_disabledOpacity = opacity;
+    Invalidate();
+}
+
 void TBWidget::SetVisibilility(WIDGET_VISIBILITY vis)
 {
     if (m_packed.visibility == vis)
@@ -1161,7 +1173,10 @@ float TBWidget::CalculateOpacityInternal(WIDGET_STATE state, TBSkinElement *skin
     if (skin_element)
         opacity *= skin_element->opacity;
     if (state & WIDGET_STATE_DISABLED)
-        opacity *= g_tb_skin->GetDefaultDisabledOpacity();
+        if (m_disabledOpacity < 0.0f)
+            opacity *= g_tb_skin->GetDefaultDisabledOpacity();
+        else
+            opacity *= m_disabledOpacity;
     return opacity;
 }
 

+ 7 - 0
Source/ThirdParty/TurboBadger/tb_widgets.h

@@ -461,6 +461,12 @@ public:
     void SetOpacity(float opacity);
     float GetOpacity() const { return m_opacity; }
 
+    /** Set opacity for this widget and its children from 0.0 - 1.0 when in WIDGET_STATE_DISABLED.
+    If disabled opacity is < 0, default skin opacity will be used.
+    If opacity is 0 (invisible), the widget won't receive any input. */
+    void SetDisabledOpacity(float opacity);
+    float GetDisabledOpacity() const { return m_disabledOpacity; }
+
     /** Set visibility for this widget and its children.
         If visibility is not WIDGET_VISIBILITY_VISIBLE, the widget won't receive any input. */
     void SetVisibilility(WIDGET_VISIBILITY vis);
@@ -1020,6 +1026,7 @@ private:
     TBWidgetValueConnection m_connection; ///< TBWidget value connection
     TBLinkListOf<TBWidgetListener> m_listeners;	///< List of listeners
     float m_opacity;				///< Opacity 0-1. See SetOpacity.
+    float m_disabledOpacity;		///< Opacity 0-1. See SetDisabledOpacity.
     WIDGET_STATE m_state;			///< The widget state (excluding any auto states)
     WIDGET_GRAVITY m_gravity;		///< The layout gravity setting.
     TBFontDescription m_font_desc;	///< The font description.

+ 2 - 0
Source/ThirdParty/TurboBadger/tb_widgets_reader.cpp

@@ -42,6 +42,8 @@ void TBWidget::OnInflate(const INFLATE_INFO &info)
 
     SetOpacity(info.node->GetValueFloat("opacity", GetOpacity()));
 
+    SetDisabledOpacity(info.node->GetValueFloat("disabled-Opacity", GetDisabledOpacity()));
+
     if (const char *text = info.node->GetValueString("text", nullptr))
         SetText(text);
 

+ 26 - 25
Source/ThirdParty/TurboBadger/tb_widgets_reader.h

@@ -105,31 +105,32 @@ public:
 
     Resource name:		TBWidget property:			Values:
 
-    id					TBWidget::m_id				TBID (string or int)
-    group-id			TBWidget::m_group_id		TBID (string or int)
-    value				TBWidget::SetValue			integer
-    data				TBWidget::m_data			integer
-    is-group-root		TBWidget::SetIsGroupRoot	boolean
-    is-focusable		TBWidget::SetIsFocusable	boolean
-    want-long-click		TBWidget::SetWantLongClick	boolean
-    ignore-input		TBWidget::SetIgnoreInput	boolean
-    opacity				TBWidget::SetOpacity		float (0 - 1)
-    text				TBWidget::SetText			string
-    connection			TBWidget::Connect			string
-    axis				TBWidget::SetAxis			x or y
-    gravity				TBWidget::SetGravity		string (combination of left, top, right, bottom, or all)
-    visibility			TBWidget::SetVisibility		string (visible, invisible, gone)
-    state				TBWidget::SetState			string (disabled)
-    skin				TBWidget::SetSkinBg			TBID (string or int)
-    rect				TBWidget::SetRect			4 integers (x, y, width, height)
-    lp>width			TBWidget::SetLayoutParams	dimension
-    lp>min-width		TBWidget::SetLayoutParams	dimension
-    lp>max-width		TBWidget::SetLayoutParams	dimension
-    lp>pref-width		TBWidget::SetLayoutParams	dimension
-    lp>height			TBWidget::SetLayoutParams	dimension
-    lp>min-height		TBWidget::SetLayoutParams	dimension
-    lp>max-height		TBWidget::SetLayoutParams	dimension
-    lp>pref-height		TBWidget::SetLayoutParams	dimension
+    id					TBWidget::m_id					TBID (string or int)
+    group-id			TBWidget::m_group_id			TBID (string or int)
+    value				TBWidget::SetValue				integer
+    data				TBWidget::m_data				integer
+    is-group-root		TBWidget::SetIsGroupRoot		boolean
+    is-focusable		TBWidget::SetIsFocusable		boolean
+    want-long-click		TBWidget::SetWantLongClick		boolean
+    ignore-input		TBWidget::SetIgnoreInput		boolean
+    opacity				TBWidget::SetOpacity			float (0 - 1)
+    disabledOpacity		TBWidget::SetDisabledOpacity	float (0 - 1)
+    text				TBWidget::SetText				string
+    connection			TBWidget::Connect				string
+    axis				TBWidget::SetAxis				x or y
+    gravity				TBWidget::SetGravity			string (combination of left, top, right, bottom, or all)
+    visibility			TBWidget::SetVisibility			string (visible, invisible, gone)
+    state				TBWidget::SetState				string (disabled)
+    skin				TBWidget::SetSkinBg				TBID (string or int)
+    rect				TBWidget::SetRect				4 integers (x, y, width, height)
+    lp>width			TBWidget::SetLayoutParams		dimension
+    lp>min-width		TBWidget::SetLayoutParams		dimension
+    lp>max-width		TBWidget::SetLayoutParams		dimension
+    lp>pref-width		TBWidget::SetLayoutParams		dimension
+    lp>height			TBWidget::SetLayoutParams		dimension
+    lp>min-height		TBWidget::SetLayoutParams		dimension
+    lp>max-height		TBWidget::SetLayoutParams		dimension
+    lp>pref-height		TBWidget::SetLayoutParams		dimension
     autofocus			The TBWidget will be focused automatically the first time its TBWindow is activated.
     font>name			Font name
     font>size			Font size