diff options
Diffstat (limited to 'Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/NodeUtils.cs')
-rw-r--r-- | Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/NodeUtils.cs | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/NodeUtils.cs b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/NodeUtils.cs new file mode 100644 index 00000000..81219dd4 --- /dev/null +++ b/Assets/ThirdParty/AmplifyShaderEditor/Plugins/Editor/Nodes/NodeUtils.cs @@ -0,0 +1,293 @@ +// Amplify Shader Editor - Visual Shader Editing Tool +// Copyright (c) Amplify Creations, Lda <info@amplify.pt> + +using UnityEngine; +using UnityEditor; + +namespace AmplifyShaderEditor +{ + public class NodeUtils + { + + public delegate void DrawPropertySection(); + + public static void DrawPropertyGroup( string sectionName, DrawPropertySection DrawSection ) + { + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal( UIUtils.MenuItemToolbarStyle ); + GUI.color = cachedColor; + + GUILayout.Label( sectionName, UIUtils.MenuItemToggleStyle ); + + EditorGUILayout.EndHorizontal(); + + + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + GUI.color = cachedColor; + DrawSection(); + EditorGUILayout.Separator(); + EditorGUILayout.EndVertical(); + } + + + public static void DrawNestedPropertyGroup( ref bool foldoutValue, string sectionName, DrawPropertySection DrawSection, int horizontalSpacing = 15 ) + { + GUILayout.BeginHorizontal(); + { + GUILayout.Space( horizontalSpacing ); + EditorGUILayout.BeginVertical( EditorStyles.helpBox ); + { + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal(); + { + GUI.color = cachedColor; + bool value = GUILayout.Toggle( foldoutValue, sectionName, UIUtils.MenuItemToggleStyle ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + } + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel--; + if( foldoutValue ) + { + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + { + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + { + GUI.color = cachedColor; + DrawSection(); + } + EditorGUILayout.EndVertical(); + EditorGUILayout.Separator(); + } + } + EditorGUI.indentLevel++; + } + EditorGUILayout.EndVertical(); + } + GUILayout.EndHorizontal(); + } + + public static void DrawNestedPropertyGroup( ref bool foldoutValue, Rect rect, string sectionName, DrawPropertySection DrawSection, int horizontalSpacing = 15 ) + { + var box = rect; + box.height -= 2; + GUI.Label( box, string.Empty, EditorStyles.helpBox ); + + var tog = rect; +#if UNITY_2019_3_OR_NEWER + tog.y -= ( tog.height - ( EditorGUIUtility.singleLineHeight + 5 ) ) * 0.5f; +#endif + tog.xMin += 2; + tog.xMax -= 2; + tog.yMin += 2; + bool value = GUI.Toggle( tog, foldoutValue, sectionName, UIUtils.MenuItemToggleStyle ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + + if( foldoutValue ) + { + DrawSection(); + } + } + + + public static void DrawNestedPropertyGroup( ref bool foldoutValue, string sectionName, DrawPropertySection DrawSection, DrawPropertySection HeaderSection ) + { + GUILayout.BeginHorizontal(); + { + GUILayout.Space( 15 ); + EditorGUILayout.BeginVertical( EditorStyles.helpBox ); + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal(); + GUI.color = cachedColor; + + bool value = GUILayout.Toggle( foldoutValue, sectionName, UIUtils.MenuItemToggleStyle ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + HeaderSection(); + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel--; + if( foldoutValue ) + { + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + GUI.color = cachedColor; + DrawSection(); + EditorGUILayout.EndVertical(); + EditorGUILayout.Separator(); + } + EditorGUI.indentLevel++; + EditorGUILayout.EndVertical(); + } + GUILayout.EndHorizontal(); + } + + public static void DrawNestedPropertyGroup( UndoParentNode owner, ref bool foldoutValue, ref bool enabledValue, string sectionName, DrawPropertySection DrawSection ) + { + GUILayout.BeginHorizontal(); + { + GUILayout.Space( 15 ); + EditorGUILayout.BeginVertical( EditorStyles.helpBox ); + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal(); + GUI.color = cachedColor; + + bool value = GUILayout.Toggle( foldoutValue, sectionName, UIUtils.MenuItemToggleStyle ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + + value = ( (object)owner != null ) ? owner.GUILayoutToggle( enabledValue, string.Empty,UIUtils.MenuItemEnableStyle, GUILayout.Width( 16 ) ) : + GUILayout.Toggle( enabledValue, string.Empty, UIUtils.MenuItemEnableStyle, GUILayout.Width( 16 ) ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + enabledValue = value; + } + + + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel--; + if( foldoutValue ) + { + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + GUI.color = cachedColor; + DrawSection(); + EditorGUILayout.EndVertical(); + EditorGUILayout.Separator(); + } + EditorGUI.indentLevel++; + EditorGUILayout.EndVertical(); + } + GUILayout.EndHorizontal(); + } + + + public static void DrawPropertyGroup( ref bool foldoutValue, string sectionName, DrawPropertySection DrawSection ) + { + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal( UIUtils.MenuItemToolbarStyle ); + GUI.color = cachedColor; + + bool value = GUILayout.Toggle( foldoutValue, sectionName, UIUtils.MenuItemToggleStyle ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + EditorGUILayout.EndHorizontal(); + + if( foldoutValue ) + { + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + { + GUI.color = cachedColor; + EditorGUI.indentLevel++; + DrawSection(); + EditorGUI.indentLevel--; + EditorGUILayout.Separator(); + } + EditorGUILayout.EndVertical(); + } + } + + public static void DrawPropertyGroup( ref bool foldoutValue, string sectionName, DrawPropertySection DrawSection, DrawPropertySection HeaderSection ) + { + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal( UIUtils.MenuItemToolbarStyle ); + GUI.color = cachedColor; + + bool value = GUILayout.Toggle( foldoutValue, sectionName, UIUtils.MenuItemToggleStyle ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + HeaderSection(); + EditorGUILayout.EndHorizontal(); + + if( foldoutValue ) + { + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + { + GUI.color = cachedColor; + EditorGUI.indentLevel++; + DrawSection(); + EditorGUI.indentLevel--; + EditorGUILayout.Separator(); + } + EditorGUILayout.EndVertical(); + } + } + + + public static bool DrawPropertyGroup( UndoParentNode owner, ref bool foldoutValue, ref bool enabledValue, string sectionName, DrawPropertySection DrawSection ) + { + bool enableChanged = false; + Color cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, 0.5f ); + EditorGUILayout.BeginHorizontal( UIUtils.MenuItemToolbarStyle ); + GUI.color = cachedColor; + bool value = GUILayout.Toggle( foldoutValue, sectionName, UIUtils.MenuItemToggleStyle, GUILayout.ExpandWidth( true ) ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + foldoutValue = value; + } + EditorGUI.BeginChangeCheck(); + value = ( (object)owner != null ) ? owner.EditorGUILayoutToggle( string.Empty, enabledValue, UIUtils.MenuItemEnableStyle, GUILayout.Width( 16 ) ) : + EditorGUILayout.Toggle( string.Empty, enabledValue, UIUtils.MenuItemEnableStyle, GUILayout.Width( 16 ) ); + if( Event.current.button == Constants.FoldoutMouseId ) + { + enabledValue = value; + } + if( EditorGUI.EndChangeCheck() ) + { + enableChanged = true; + } + + EditorGUILayout.EndHorizontal(); + + if( foldoutValue ) + { + cachedColor = GUI.color; + GUI.color = new Color( cachedColor.r, cachedColor.g, cachedColor.b, ( EditorGUIUtility.isProSkin ? 0.5f : 0.25f ) ); + EditorGUILayout.BeginVertical( UIUtils.MenuItemBackgroundStyle ); + GUI.color = cachedColor; + + EditorGUILayout.Separator(); + EditorGUI.BeginDisabledGroup( !enabledValue ); + + EditorGUI.indentLevel += 1; + + DrawSection(); + + EditorGUI.indentLevel -= 1; + EditorGUI.EndDisabledGroup(); + EditorGUILayout.Separator(); + EditorGUILayout.EndVertical(); + } + + return enableChanged; + } + } +} |