summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs')
-rw-r--r--Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs249
1 files changed, 249 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs
new file mode 100644
index 00000000..a1994638
--- /dev/null
+++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs
@@ -0,0 +1,249 @@
+// Amplify Shader Editor - Visual Shader Editing Tool
+// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
+
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+
+namespace AmplifyShaderEditor
+{
+ public sealed class ToolsMenuButton : ToolsMenuButtonParent
+ {
+ public delegate void ToolButtonPressed( ToolButtonType type );
+ public event ToolButtonPressed ToolButtonPressedEvt;
+
+ private Rect m_buttonArea;
+ private List<Texture2D> m_buttonTexture;
+ private string m_buttonTexturePath;
+ private ToolButtonType m_buttonType;
+ private GUIStyle m_style;
+ private bool m_enabled = true;
+ private bool m_drawOnFunction = true;
+
+ private List<string> m_cachedStates;
+ private int m_bufferedState = -1;
+ private string m_bufferedTooltip = string.Empty;
+
+ public ToolsMenuButton( AmplifyShaderEditorWindow parentWindow, ToolButtonType type, float x, float y, float width, float height, string texturePath, string text, string tooltip, float buttonSpacing = -1, bool drawOnFunction = true ) : base( parentWindow, text, tooltip, buttonSpacing )
+ {
+ m_buttonArea = new Rect( x, y, width, height );
+ m_buttonType = type;
+
+ m_buttonTexturePath = texturePath;
+ m_cachedStates = new List<string>();
+ m_drawOnFunction = drawOnFunction;
+ }
+
+ public void AddState( string state )
+ {
+ m_cachedStates.Add( state );
+ }
+
+ public override void Destroy()
+ {
+ ToolButtonPressedEvt = null;
+ if ( m_buttonTexture != null )
+ {
+ for ( int i = 0; i < m_buttonTexture.Count; i++ )
+ {
+ Resources.UnloadAsset( m_buttonTexture[ i ] );
+ }
+ m_buttonTexture.Clear();
+ }
+ m_buttonTexture = null;
+ }
+ protected override void Init()
+ {
+ base.Init();
+ if ( m_buttonTexture == null )
+ {
+ m_buttonTexturePath = AssetDatabase.GUIDToAssetPath( m_buttonTexturePath );
+ m_buttonTexture = new List<Texture2D>();
+ m_buttonTexture.Add( AssetDatabase.LoadAssetAtPath( m_buttonTexturePath, typeof( Texture2D ) ) as Texture2D );
+ }
+
+ if ( m_cachedStates.Count > 0 )
+ {
+ for ( int i = 0; i < m_cachedStates.Count; i++ )
+ {
+ m_cachedStates[ i ] = AssetDatabase.GUIDToAssetPath( m_cachedStates[ i ] );
+ m_buttonTexture.Add( AssetDatabase.LoadAssetAtPath( m_cachedStates[ i ], typeof( Texture2D ) ) as Texture2D );
+ }
+ m_cachedStates.Clear();
+ }
+
+ if ( m_style == null )
+ {
+ m_style = new GUIStyle( /*UIUtils.Button*/ GUIStyle.none );
+ m_style.normal.background = m_buttonTexture[ 0 ];
+
+ m_style.hover.background = m_buttonTexture[ 0 ];
+ m_style.hover.textColor = m_style.normal.textColor;
+
+ m_style.active.background = m_buttonTexture[ 0 ];
+ m_style.active.textColor = m_style.normal.textColor;
+
+ m_style.onNormal.background = m_buttonTexture[ 0 ];
+ m_style.onNormal.textColor = m_style.normal.textColor;
+
+ m_style.onHover.background = m_buttonTexture[ 0 ];
+ m_style.onHover.textColor = m_style.normal.textColor;
+
+ m_style.onActive.background = m_buttonTexture[ 0 ];
+ m_style.onActive.textColor = m_style.normal.textColor;
+
+ m_style.clipping = TextClipping.Overflow;
+ m_style.fontStyle = FontStyle.Bold;
+ m_style.alignment = TextAnchor.LowerCenter;
+ m_style.contentOffset = new Vector2( 0, 15 );
+ m_style.fontSize = 10;
+ bool resizeFromTexture = false;
+ if ( m_buttonArea.width > 0 )
+ {
+ m_style.fixedWidth = m_buttonArea.width;
+ }
+ else
+ {
+ resizeFromTexture = true;
+ }
+
+ if ( m_buttonArea.height > 0 )
+ {
+ m_style.fixedHeight = m_buttonArea.height;
+ }
+ else
+ {
+ resizeFromTexture = true;
+ }
+
+ if ( resizeFromTexture )
+ {
+ m_buttonArea.width = m_style.fixedWidth = m_buttonTexture[ 0 ].width;
+ m_buttonArea.height = m_style.fixedHeight = m_buttonTexture[ 0 ].height;
+ }
+ }
+
+ }
+ public override void Draw()
+ {
+ base.Draw();
+ bool guiEnabledBuffer = GUI.enabled;
+ GUI.enabled = m_enabled;
+
+ if ( GUILayout.Button( m_content, m_style ) && ToolButtonPressedEvt != null )
+ {
+ ToolButtonPressedEvt( m_buttonType );
+ }
+ GUI.enabled = guiEnabledBuffer;
+ }
+
+ public override void Draw( float x, float y )
+ {
+ if ( !(m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.MouseDown || m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.Repaint ) )
+ return;
+
+ if ( m_parentWindow.CurrentGraph.CurrentMasterNode == null && !m_drawOnFunction)
+ return;
+
+
+ base.Draw( x, y );
+
+ if ( m_bufferedState > -1 )
+ {
+ if ( string.IsNullOrEmpty( m_bufferedTooltip ) )
+ {
+ SetStateOnButton( m_bufferedState );
+ }
+ else
+ {
+ SetStateOnButton( m_bufferedState, m_bufferedTooltip );
+ }
+
+ m_bufferedState = -1;
+ m_bufferedTooltip = string.Empty;
+ }
+
+
+ m_buttonArea.x = x;
+ m_buttonArea.y = y;
+
+ if ( m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.MouseDown && m_buttonArea.Contains( m_parentWindow.CameraDrawInfo.MousePosition ) && ToolButtonPressedEvt != null )
+ {
+ ToolButtonPressedEvt( m_buttonType );
+ Event.current.Use();
+ m_parentWindow.CameraDrawInfo.CurrentEventType = EventType.Used;
+ }
+ else if ( m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.Repaint )
+ {
+ GUI.Label( m_buttonArea, m_content, m_style );
+ }
+
+ //if ( GUI.Button( m_buttonArea, m_content, m_style ) && ToolButtonPressedEvt != null )
+ //{
+ // ToolButtonPressedEvt( m_buttonType );
+ //}
+ }
+
+ public override void Draw( Vector2 pos )
+ {
+ Draw( pos.x, pos.y );
+ }
+
+ public override void SetStateOnButton( int state, string tooltip )
+ {
+
+ if ( m_buttonTexture == null || m_style == null )
+ {
+ m_bufferedState = state;
+ m_bufferedTooltip = tooltip;
+ return;
+ }
+
+
+ if ( state < 0 || state >= m_buttonTexture.Count )
+ {
+ return;
+ }
+
+ base.SetStateOnButton( state, tooltip );
+ m_style.normal.background = m_buttonTexture[ state ];
+ m_style.hover.background = m_buttonTexture[ state ];
+ m_style.active.background = m_buttonTexture[ state ];
+ m_style.onNormal.background = m_buttonTexture[ state ];
+ m_style.onHover.background = m_buttonTexture[ state ];
+ m_style.onActive.background = m_buttonTexture[ state ];
+ }
+
+ public override void SetStateOnButton( int state )
+ {
+ if ( m_buttonTexture == null || m_style == null )
+ {
+ m_bufferedState = state;
+ return;
+ }
+
+ if ( state < 0 || state >= m_buttonTexture.Count )
+ {
+ return;
+ }
+ base.SetStateOnButton( state );
+ m_style.normal.background = m_buttonTexture[ state ];
+ m_style.hover.background = m_buttonTexture[ state ];
+ m_style.active.background = m_buttonTexture[ state ];
+ m_style.onNormal.background = m_buttonTexture[ state ];
+ m_style.onHover.background = m_buttonTexture[ state ];
+ m_style.onActive.background = m_buttonTexture[ state ];
+ }
+
+ public bool IsInside( Vector2 pos )
+ {
+ return m_buttonArea.Contains( pos );
+ }
+
+ public bool Enabled
+ {
+ get { return m_enabled; }
+ set { m_enabled = value; }
+ }
+ }
+}