From b82da95b5181ac8bbae38efb13e950d5e88a4caa Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 23 Oct 2020 13:08:43 +0800 Subject: =?UTF-8?q?*=E7=A7=BB=E5=8A=A8amplify=20shader=20editor=E5=88=B0th?= =?UTF-8?q?ird=20party=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Plugins/Editor/Menu/Tools/ToolsMenuButton.cs | 249 ++++++++ .../Editor/Menu/Tools/ToolsMenuButton.cs.meta | 12 + .../Editor/Menu/Tools/ToolsMenuButtonParent.cs | 75 +++ .../Menu/Tools/ToolsMenuButtonParent.cs.meta | 12 + .../Editor/Menu/Tools/ToolsMenuButtonSep.cs | 41 ++ .../Editor/Menu/Tools/ToolsMenuButtonSep.cs.meta | 12 + .../Plugins/Editor/Menu/Tools/ToolsWindow.cs | 632 +++++++++++++++++++++ .../Plugins/Editor/Menu/Tools/ToolsWindow.cs.meta | 12 + 8 files changed, 1045 insertions(+) create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs.meta create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs.meta create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs.meta create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs create mode 100644 Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs.meta (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools') 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 + +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 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 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(); + 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(); + 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; } + } + } +} diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs.meta new file mode 100644 index 00000000..11180c87 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 890f4ed5c9f62af43bda6584705fa0be +timeCreated: 1481126957 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs new file mode 100644 index 00000000..b3136b4c --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs @@ -0,0 +1,75 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda + +using UnityEngine; + +namespace AmplifyShaderEditor +{ + public class ToolsMenuButtonParent + { + protected AmplifyShaderEditorWindow m_parentWindow = null; + private float m_buttonSpacing = 10; + private int m_currentState = 0; + private bool m_isInitialized = false; + protected GUIContent m_content; + public ToolsMenuButtonParent( AmplifyShaderEditorWindow parentWindow, string text, string tooltip, float buttonSpacing ) + { + m_parentWindow = parentWindow; + m_content = new GUIContent( text, tooltip ); + + if ( buttonSpacing > 0 ) + m_buttonSpacing = buttonSpacing; + } + + public virtual void Draw() + { + if ( !m_isInitialized ) + { + Init(); + } + + //GUILayout.Space( m_buttonSpacing ); + } + + public virtual void Draw( Vector2 pos ) + { + Draw( pos.x, pos.y ); + } + + public virtual void Draw( float x ,float y ) + { + if ( !m_isInitialized ) + { + Init(); + } + } + + protected virtual void Init() + { + m_isInitialized = false; + } + + public virtual void SetStateOnButton( int state, string tooltip ) + { + m_currentState = state; + m_content.tooltip = tooltip; + } + + public virtual void SetStateOnButton( int state ) + { + m_currentState = state; + } + + public virtual void Destroy() { } + + public float ButtonSpacing + { + get { return m_buttonSpacing; } + } + + public int CurrentState + { + get { return m_currentState; } + } + } +} diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs.meta new file mode 100644 index 00000000..b14de18d --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonParent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a3bf3644c2c2fbb4fa0dd8b86effc6e1 +timeCreated: 1481126958 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs new file mode 100644 index 00000000..69d11eb1 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs @@ -0,0 +1,41 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda + +using UnityEngine; +using UnityEditor; + +namespace AmplifyShaderEditor +{ + public sealed class ToolsMenuButtonSep : ToolsMenuButtonParent + { + private Color m_splitterColor = EditorGUIUtility.isProSkin ? new Color( 0.157f, 0.157f, 0.157f ) : new Color( 0.5f, 0.5f, 0.5f ); + [SerializeField] + private GUIStyle m_sepStyle; + public ToolsMenuButtonSep( AmplifyShaderEditorWindow parentWindow = null, string text = null, string tooltip = null, float buttonSpacing = -1 ) : base( parentWindow, text, tooltip, buttonSpacing ) { } + + public override void Draw() + { + base.Draw(); + if ( m_sepStyle == null ) + { + m_sepStyle = new GUIStyle(); + m_sepStyle.normal.background = Texture2D.whiteTexture; + m_sepStyle.hover.background = Texture2D.whiteTexture; + m_sepStyle.active.background = Texture2D.whiteTexture; + m_sepStyle.onNormal.background = Texture2D.whiteTexture; + m_sepStyle.onHover.background = Texture2D.whiteTexture; + m_sepStyle.onActive.background = Texture2D.whiteTexture; + m_sepStyle.stretchHeight = true; + } + Color originalColor = GUI.color; + GUI.color = m_splitterColor; + GUILayout.Box( string.Empty, m_sepStyle, GUILayout.MaxWidth( 2 ), GUILayout.ExpandHeight( true ) ); + GUI.color = originalColor; + } + + public override void Destroy() + { + m_sepStyle = null; + } + } +} diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs.meta new file mode 100644 index 00000000..55672938 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsMenuButtonSep.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b4c65a9d96791c34eb587cea9662161f +timeCreated: 1481126958 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs new file mode 100644 index 00000000..ccb0f4b0 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs @@ -0,0 +1,632 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda + +using UnityEngine; +using UnityEditor; +using System; +using System.Collections.Generic; + +namespace AmplifyShaderEditor +{ + public enum ToolButtonType + { + Update = 0, + Live, + OpenSourceCode, + CleanUnusedNodes, + //SelectShader, + New, + Open, + Save, + Library, + Options, + Help, + MasterNode, + FocusOnMasterNode, + FocusOnSelection, + ShowInfoWindow, + ShowTipsWindow, + ShowConsole, + TakeScreenshot, + Share + } + + public enum ToolbarType + { + File, + Help + } + + public class ToolbarMenuTab + { + private Rect m_tabArea; + private GenericMenu m_tabMenu; + public ToolbarMenuTab( float x, float y, float width, float height ) + { + m_tabMenu = new GenericMenu(); + m_tabArea = new Rect( x, y, width, height ); + } + + public void ShowMenu() + { + m_tabMenu.DropDown( m_tabArea ); + } + + public void AddItem( string itemName, GenericMenu.MenuFunction callback ) + { + m_tabMenu.AddItem( new GUIContent( itemName ), false, callback ); + } + } + + [Serializable] + public sealed class ToolsWindow : MenuParent + { + private static readonly Color RightIconsColorOff = new Color( 1f, 1f, 1f, 0.8f ); + private static readonly Color LeftIconsColorOff = new Color( 1f, 1f, 1f, 0.5f ); + + private static readonly Color RightIconsColorOn = new Color( 1f, 1f, 1f, 1.0f ); + private static readonly Color LeftIconsColorOn = new Color( 1f, 1f, 1f, 0.8f ); + + private const float TabY = 9; + private const float TabX = 5; + private const string ShaderFileTitleStr = "Current Shader"; + private const string FileToolbarStr = "File"; + private const string HelpToolbarStr = "Help"; + private const string LiveShaderStr = "Live Shader"; + private const string LoadOnSelectionStr = "Load on selection"; + private const string CurrentObjectStr = "Current Object: "; + + + public ToolsMenuButton.ToolButtonPressed ToolButtonPressedEvt; + //private GUIStyle m_toolbarButtonStyle; + private GUIStyle m_toggleStyle; + private GUIStyle m_borderStyle; + + // left + private ToolsMenuButton m_updateButton; + private ToolsMenuButton m_liveButton; + private ToolsMenuButton m_openSourceCodeButton; + + //middle right + private ToolsMenuButton m_cleanUnusedNodesButton; + private ToolsMenuButton m_focusOnMasterNodeButton; + private ToolsMenuButton m_focusOnSelectionButton; + + // right + private ToolsMenuButton m_shareButton; + private ToolsMenuButton m_takeScreenshotButton; + private ToolsMenuButton m_showInfoWindowButton; + + // hidden + private ToolsMenuButton m_showTipsWindowButton; + private ToolsMenuButton m_showConsoleWindowButton; + + //Used for collision detection to invalidate inputs on graph area + private Rect m_areaLeft = new Rect( 0, 0, 140, 40 ); + private Rect m_areaRight = new Rect( 0, 0, 75, 40 ); + private Rect m_boxRect; + private Rect m_borderRect; + + public const double InactivityRefreshTime = 0.25; + private int m_currentSelected = 0; + + //Search Bar + private const string SearchBarId = "ASE_SEARCH_BAR"; + private bool m_searchBarVisible = false; + private bool m_selectSearchBarTextfield = false; + private bool m_refreshSearchResultList = false; + + private Rect m_searchBarSize; + private string m_searchBarValue = string.Empty; + private List m_searchResultNodes = new List(); + + // width and height are between [0,1] and represent a percentage of the total screen area + public ToolsWindow( AmplifyShaderEditorWindow parentWindow ) : base( parentWindow, 0, 0, 0, 64, "Tools", MenuAnchor.TOP_LEFT, MenuAutoSize.NONE ) + { + m_updateButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.Update, 0, 0, -1, -1, IOUtils.UpdateOutdatedGUID, string.Empty, "Create and apply shader to material.", 5 ); + m_updateButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_updateButton.AddState( IOUtils.UpdateOFFGUID ); + m_updateButton.AddState( IOUtils.UpdateUpToDatedGUID ); + + m_liveButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.Live, 0, 0, -1, -1, IOUtils.LiveOffGUID, string.Empty, "Automatically saves shader when canvas is changed.", 50 ); + m_liveButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_liveButton.AddState( IOUtils.LiveOnGUID ); + m_liveButton.AddState( IOUtils.LivePendingGUID ); + + //ToolsMenuButton cleanUnusedNodesButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.CleanUnusedNodes, 0, 0, -1, -1, IOUtils.CleanupOFFGUID, string.Empty, "Remove all nodes not connected to the master node.", 77 ); + //cleanUnusedNodesButton.ToolButtonPressedEvt += OnButtonPressedEvent; + //cleanUnusedNodesButton.AddState( IOUtils.CleanUpOnGUID ); + //m_list[ ( int ) ToolButtonType.CleanUnusedNodes ] = cleanUnusedNodesButton; + + m_openSourceCodeButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.OpenSourceCode, 0, 0, -1, -1, IOUtils.OpenSourceCodeOFFGUID, string.Empty, "Open shader file in your default shader editor.", 80, false ); + m_openSourceCodeButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_openSourceCodeButton.AddState( IOUtils.OpenSourceCodeONGUID ); + + + // middle right + m_cleanUnusedNodesButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.CleanUnusedNodes, 0, 0, -1, -1, IOUtils.CleanupOFFGUID, string.Empty, "Remove all nodes not connected to the master node.", 77 ); + m_cleanUnusedNodesButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_cleanUnusedNodesButton.AddState( IOUtils.CleanUpOnGUID ); + + m_focusOnMasterNodeButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.FocusOnMasterNode, 0, 0, -1, -1, IOUtils.FocusNodeGUID, string.Empty, "Focus on active master node.", -1, false ); + m_focusOnMasterNodeButton.ToolButtonPressedEvt += OnButtonPressedEvent; + + m_focusOnSelectionButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.FocusOnSelection, 0, 0, -1, -1, IOUtils.FitViewGUID, string.Empty, "Focus on selection or fit to screen if none selected." ); + m_focusOnSelectionButton.ToolButtonPressedEvt += OnButtonPressedEvent; + + + // right + m_shareButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.Share, 0, 0, -1, -1, IOUtils.ShareOFFGUID, string.Empty, "Share selection", 100 ); + m_shareButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_shareButton.AddState( IOUtils.ShareONGUID ); + + m_takeScreenshotButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.TakeScreenshot, 0, 0, -1, -1, IOUtils.TakeScreenshotOFFGUID, string.Empty, "Take ScreenShot (WINDOWS ONLY).", 100 ); + m_takeScreenshotButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_takeScreenshotButton.AddState( IOUtils.TakeScreenshotONGUID ); + + m_showInfoWindowButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.ShowInfoWindow, 0, 0, -1, -1, IOUtils.ShowInfoWindowGUID, string.Empty, "Open Helper Window." ); + m_showInfoWindowButton.ToolButtonPressedEvt += OnButtonPressedEvent; + + + // hidden + m_showTipsWindowButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.ShowTipsWindow, 0, 0, -1, -1, IOUtils.ShowTipsWindowGUID, string.Empty, "Open Quick Tips!" ); + m_showTipsWindowButton.ToolButtonPressedEvt += OnButtonPressedEvent; + + m_showConsoleWindowButton = new ToolsMenuButton( m_parentWindow, ToolButtonType.ShowConsole, 0, 0, -1, -1, IOUtils.ShowConsoleWindowGUID, string.Empty, "Show internal console", 74 ); + m_showConsoleWindowButton.ToolButtonPressedEvt += OnButtonPressedEvent; + m_showConsoleWindowButton.AddState( IOUtils.ShowConsoleWindowGUID ); + + m_searchBarSize = new Rect( 0, TabY + 4, 110, 60 ); + } + + void OnShowPortLegend() + { + ParentWindow.ShowPortInfo(); + } + + override public void Destroy() + { + base.Destroy(); + //for ( int i = 0; i < m_list.Length; i++ ) + //{ + // m_list[ i ].Destroy(); + //} + //m_list = null; + + m_searchResultNodes.Clear(); + m_searchResultNodes = null; + + m_updateButton.Destroy(); + m_updateButton = null; + + m_liveButton.Destroy(); + m_liveButton = null; + + m_openSourceCodeButton.Destroy(); + m_openSourceCodeButton = null; + + m_focusOnMasterNodeButton.Destroy(); + m_focusOnMasterNodeButton = null; + + m_focusOnSelectionButton.Destroy(); + m_focusOnSelectionButton = null; + + m_showInfoWindowButton.Destroy(); + m_showInfoWindowButton = null; + + m_takeScreenshotButton.Destroy(); + m_takeScreenshotButton = null; + + m_shareButton.Destroy(); + m_shareButton = null; + + m_showTipsWindowButton.Destroy(); + m_showTipsWindowButton = null; + + m_cleanUnusedNodesButton.Destroy(); + m_cleanUnusedNodesButton = null; + + m_showConsoleWindowButton.Destroy(); + m_showConsoleWindowButton = null; + } + + void OnButtonPressedEvent( ToolButtonType type ) + { + if ( ToolButtonPressedEvt != null ) + ToolButtonPressedEvt( type ); + } + + public override void Draw( Rect parentPosition, Vector2 mousePosition, int mouseButtonId, bool hasKeyboadFocus ) + { + base.Draw( parentPosition, mousePosition, mouseButtonId, hasKeyboadFocus ); + + Color bufferedColor = GUI.color; + m_areaLeft.x = m_transformedArea.x + TabX; + m_areaRight.x = m_transformedArea.x + m_transformedArea.width - 75 - TabX; + + //if ( m_toolbarButtonStyle == null ) + //{ + // m_toolbarButtonStyle = new GUIStyle( UIUtils.Button ); + // m_toolbarButtonStyle.fixedWidth = 100; + //} + + if ( m_toggleStyle == null ) + { + m_toggleStyle = UIUtils.Toggle; + } + + //for ( int i = 0; i < m_list.Length; i++ ) + //{ + // GUI.color = m_list[ i ].IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff; + // m_list[ i ].Draw( TabX + m_transformedArea.x + m_list[ i ].ButtonSpacing, TabY ); + //} + GUI.color = m_updateButton.IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff; + m_updateButton.Draw( TabX + m_transformedArea.x + m_updateButton.ButtonSpacing, TabY ); + + GUI.color = m_liveButton.IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff; + m_liveButton.Draw( TabX + m_transformedArea.x + m_liveButton.ButtonSpacing, TabY ); + + GUI.color = m_openSourceCodeButton.IsInside( mousePosition ) ? LeftIconsColorOn : LeftIconsColorOff; + m_openSourceCodeButton.Draw( TabX + m_transformedArea.x + m_openSourceCodeButton.ButtonSpacing, TabY ); + + if ( m_searchBarVisible ) + { + m_searchBarSize.x = m_transformedArea.x + m_transformedArea.width - 320 - TabX; + string currentFocus = GUI.GetNameOfFocusedControl(); + + if ( Event.current.type == EventType.KeyDown ) + { + KeyCode keyCode = Event.current.keyCode; + if ( Event.current.shift ) + { + if ( keyCode == KeyCode.F3 || + ( ( keyCode == KeyCode.KeypadEnter || keyCode == KeyCode.Return ) && + ( currentFocus.Equals( SearchBarId ) || string.IsNullOrEmpty( currentFocus ) ) ) ) + SelectPrevious(); + } + else + { + if ( keyCode == KeyCode.F3 || + ( ( keyCode == KeyCode.KeypadEnter || keyCode == KeyCode.Return ) && + ( currentFocus.Equals( SearchBarId ) || string.IsNullOrEmpty( currentFocus ) ) ) ) + SelectNext(); + } + } + + if( currentFocus.Equals( SearchBarId ) || ( m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.MouseDown && m_searchBarSize.Contains( m_parentWindow.CameraDrawInfo.MousePosition ) ) || m_selectSearchBarTextfield ) + { + EditorGUI.BeginChangeCheck(); + { + GUI.SetNextControlName( SearchBarId ); + m_searchBarValue = EditorGUI.TextField( m_searchBarSize, m_searchBarValue, UIUtils.ToolbarSearchTextfield ); + } + if ( EditorGUI.EndChangeCheck() ) + { + m_refreshSearchResultList = true; + } + } else + { + GUI.Label( m_searchBarSize, m_searchBarValue, UIUtils.ToolbarSearchTextfield ); + } + + m_searchBarSize.x += m_searchBarSize.width; + if ( m_parentWindow.CameraDrawInfo.CurrentEventType == EventType.MouseDown && m_searchBarSize.Contains( m_parentWindow.CameraDrawInfo.MousePosition ) ) + { + if ( string.IsNullOrEmpty( m_searchBarValue ) ) + { + m_searchBarVisible = false; + m_refreshSearchResultList = false; + } + else + { + m_searchBarValue = string.Empty; + m_searchResultNodes.Clear(); + m_currentSelected = -1; + } + } + + GUI.Label( m_searchBarSize, string.Empty, UIUtils.ToolbarSearchCancelButton ); + + + + if ( Event.current.isKey && Event.current.keyCode == KeyCode.Escape ) + { + m_searchBarVisible = false; + m_refreshSearchResultList = false; + GUI.FocusControl( null ); + m_selectSearchBarTextfield = false; + } + + if ( m_refreshSearchResultList && ( m_parentWindow.CurrentInactiveTime > InactivityRefreshTime ) ) + { + RefreshList(); + } + } + + if ( m_selectSearchBarTextfield ) + { + m_selectSearchBarTextfield = false; + EditorGUI.FocusTextInControl( SearchBarId ); + //GUI.FocusControl( SearchBarId ); + } + + //if ( Event.current.control && Event.current.isKey && Event.current.keyCode == KeyCode.F && Event.current.type == EventType.KeyDown ) + if( m_parentWindow.CurrentCommandName.Equals("Find") ) + { + if ( !m_searchBarVisible ) + { + m_searchBarVisible = true; + m_refreshSearchResultList = false; + } + m_selectSearchBarTextfield = true; + } + + GUI.color = m_shareButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + m_shareButton.Draw( m_transformedArea.x + m_transformedArea.width - 195 - TabX, TabY ); + + GUI.color = m_takeScreenshotButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + m_takeScreenshotButton.Draw( m_transformedArea.x + m_transformedArea.width - 165 - TabX, TabY ); + + + + GUI.color = m_focusOnSelectionButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + m_focusOnSelectionButton.Draw( m_transformedArea.x + m_transformedArea.width - 120 - TabX, TabY ); + + GUI.color = m_focusOnMasterNodeButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + m_focusOnMasterNodeButton.Draw( m_transformedArea.x + m_transformedArea.width - 85 - TabX, TabY ); + + GUI.color = m_cleanUnusedNodesButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + m_cleanUnusedNodesButton.Draw( m_transformedArea.x + m_transformedArea.width - 50 - TabX, TabY ); + + GUI.color = m_showInfoWindowButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + m_showInfoWindowButton.Draw( m_transformedArea.x + m_transformedArea.width - 25 - TabX, TabY ); + + + //GUI.color = m_showTipsWindowButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + //m_showTipsWindowButton.Draw( m_transformedArea.x + m_transformedArea.width - 190 - TabX, TabY ); + + //GUI.color = m_showConsoleWindowButton.IsInside( mousePosition ) ? RightIconsColorOn : RightIconsColorOff; + //m_showConsoleWindowButton.Draw( m_transformedArea.x + m_transformedArea.width - 195 - TabX, TabY ); + + GUI.color = bufferedColor; + + } + + public void OnNodeRemovedFromGraph( ParentNode node ) + { + m_searchResultNodes.Remove( node ); + } + + int m_previousNodeCount = 0; + + void RefreshList() + { + m_refreshSearchResultList = false; + m_currentSelected = -1; + m_searchResultNodes.Clear(); + if ( !string.IsNullOrEmpty( m_searchBarValue ) ) + { + List nodes = m_parentWindow.CurrentGraph.AllNodes; + int count = nodes.Count; + m_previousNodeCount = count; + for ( int i = 0; i < count; i++ ) + { + if ( nodes[ i ].CheckFindText( m_searchBarValue ) ) + { + m_searchResultNodes.Add( nodes[ i ] ); + } + } + } + } + + void SelectNext() + { + if ( m_refreshSearchResultList || m_parentWindow.CurrentGraph.AllNodes.Count != m_previousNodeCount ) + { + RefreshList(); + } + + if ( m_searchResultNodes.Count > 0 ) + { + m_currentSelected = ( m_currentSelected + 1 ) % m_searchResultNodes.Count; + m_parentWindow.FocusOnNode( m_searchResultNodes[ m_currentSelected ], 1, true ,true); + } + } + + void SelectPrevious() + { + if ( m_refreshSearchResultList || m_parentWindow.CurrentGraph.AllNodes.Count != m_previousNodeCount ) + { + RefreshList(); + } + + if ( m_searchResultNodes.Count > 0 ) + { + m_currentSelected = ( m_currentSelected > 1 ) ? ( m_currentSelected - 1 ) : ( m_searchResultNodes.Count - 1 ); + m_parentWindow.FocusOnNode( m_searchResultNodes[ m_currentSelected ], 1, true ); + } + } + + + public void SetStateOnButton( ToolButtonType button, int state, string tooltip ) + { + switch ( button ) + { + case ToolButtonType.New: + case ToolButtonType.Open: + case ToolButtonType.Save: + case ToolButtonType.Library: + case ToolButtonType.Options: + case ToolButtonType.Help: + case ToolButtonType.MasterNode: break; + case ToolButtonType.OpenSourceCode: + { + m_openSourceCodeButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.Update: + { + m_updateButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.Live: + { + m_liveButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.TakeScreenshot: + { + m_takeScreenshotButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.CleanUnusedNodes: + //case eToolButtonType.SelectShader: + { + m_cleanUnusedNodesButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.FocusOnMasterNode: + { + m_focusOnMasterNodeButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.FocusOnSelection: + { + m_focusOnSelectionButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.Share: + { + m_shareButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.ShowInfoWindow: + { + m_showInfoWindowButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.ShowTipsWindow: + { + m_showTipsWindowButton.SetStateOnButton( state, tooltip ); + } + break; + case ToolButtonType.ShowConsole: + { + m_showConsoleWindowButton.SetStateOnButton( state, tooltip ); + } + break; + } + } + + public void SetStateOnButton( ToolButtonType button, int state ) + { + switch ( button ) + { + case ToolButtonType.New: + case ToolButtonType.Open: + case ToolButtonType.Save: + case ToolButtonType.Library: + case ToolButtonType.Options: + case ToolButtonType.Help: + case ToolButtonType.MasterNode: break; + case ToolButtonType.OpenSourceCode: + { + m_openSourceCodeButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.Update: + { + m_updateButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.Live: + { + m_liveButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.TakeScreenshot: + { + m_takeScreenshotButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.CleanUnusedNodes: + //case eToolButtonType.SelectShader: + { + m_cleanUnusedNodesButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.FocusOnMasterNode: + { + m_focusOnMasterNodeButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.FocusOnSelection: + { + m_focusOnSelectionButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.Share: + { + m_shareButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.ShowInfoWindow: + { + m_showInfoWindowButton.SetStateOnButton( state ); + } + break; + case ToolButtonType.ShowTipsWindow: + { + m_showTipsWindowButton.SetStateOnButton( state ); + }break; + case ToolButtonType.ShowConsole: + { + m_showConsoleWindowButton.SetStateOnButton( state ); + } + break; + } + } + + public void DrawShaderTitle( MenuParent nodeParametersWindow, MenuParent paletteWindow, float availableCanvasWidth, float graphAreaHeight, string shaderName ) + { + float leftAdjust = nodeParametersWindow.IsMaximized ? nodeParametersWindow.RealWidth : 0; + float rightAdjust = paletteWindow.IsMaximized ? 0 : paletteWindow.RealWidth; + + m_boxRect = new Rect( leftAdjust + rightAdjust, 0, availableCanvasWidth, 35 ); + m_boxRect.x += paletteWindow.IsMaximized ? 0 : -paletteWindow.RealWidth; + m_boxRect.width += nodeParametersWindow.IsMaximized ? 0 : nodeParametersWindow.RealWidth; + m_boxRect.width += paletteWindow.IsMaximized ? 0 : paletteWindow.RealWidth; + m_borderRect = new Rect( m_boxRect ); + m_borderRect.height = graphAreaHeight; + + int extra = m_searchBarVisible ? (int)m_searchBarSize.width + 20: 0; + //m_boxRect.xMax -= ( paletteWindow.IsMaximized ? 195 : 230 ) + extra; + //m_boxRect.xMin += nodeParametersWindow.IsMaximized ? 95 : 145; + + UIUtils.ToolbarMainTitle.padding.right = ( paletteWindow.IsMaximized ? 195 : 230 ) + extra; + UIUtils.ToolbarMainTitle.padding.left = nodeParametersWindow.IsMaximized ? 110 : 145; + + if ( m_borderStyle == null ) + { + m_borderStyle = ( ParentWindow.CurrentGraph.CurrentMasterNode == null ) ? UIUtils.GetCustomStyle( CustomStyle.ShaderFunctionBorder ) : UIUtils.GetCustomStyle( CustomStyle.ShaderBorder ); + } + + GUI.Label( m_borderRect, shaderName, m_borderStyle ); + GUI.Label( m_boxRect, shaderName, UIUtils.ToolbarMainTitle ); + } + + public override bool IsInside( Vector2 position ) + { + if ( !m_isActive ) + return false; + + return m_boxRect.Contains( position ) || m_areaLeft.Contains( position ) || m_areaRight.Contains( position ); + } + + public GUIStyle BorderStyle + { + get { return m_borderStyle; } + set { m_borderStyle = value; } + } + } +} diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs.meta b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs.meta new file mode 100644 index 00000000..3bd8f546 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Menu/Tools/ToolsWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b1c1f3bedf849cb41a1648bf895bc0f7 +timeCreated: 1481126958 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- cgit v1.1-26-g67d0