From 984fe730c0c5e0b66f07617261a1fefae53e0843 Mon Sep 17 00:00:00 2001 From: Simon Rodriguez Date: Fri, 8 Nov 2019 09:57:54 +0100 Subject: [PATCH] Added support for [Header] attribute --- Scripts/Editor/NodeEditorGUILayout.cs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/Scripts/Editor/NodeEditorGUILayout.cs b/Scripts/Editor/NodeEditorGUILayout.cs index ec93cc1..b6c18e9 100644 --- a/Scripts/Editor/NodeEditorGUILayout.cs +++ b/Scripts/Editor/NodeEditorGUILayout.cs @@ -45,6 +45,11 @@ namespace XNodeEditor { SpaceAttribute spaceAttribute; if (NodeEditorUtilities.GetCachedAttrib(port.node.GetType(), property.name, out spaceAttribute)) spacePadding = spaceAttribute.height; + //GUI Values are from https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/ScriptAttributeGUI/Implementations/DecoratorDrawers.cs + float headerPadding = 0; + HeaderAttribute headerAttribute; + if (NodeEditorUtilities.GetCachedAttrib(port.node.GetType(), property.name, out headerAttribute)) headerPadding = EditorGUIUtility.singleLineHeight * 1.5f; + // If property is an input, display a regular property field and put a port handle on the left side if (port.direction == XNode.NodePort.IO.Input) { // Get data from [Input] attribute @@ -64,6 +69,14 @@ namespace XNodeEditor { GUILayout.Space(spacePadding); spacePadding = 0; } + if (headerPadding > 0 && useLayoutSpace) + { + Rect position = GUILayoutUtility.GetRect(0, EditorGUIUtility.singleLineHeight * 1.5f); + position.yMin += (EditorGUIUtility.singleLineHeight * 0.5f) + EditorGUIUtility.standardVerticalSpacing; + position = EditorGUI.IndentedRect(position); + GUI.Label(position, headerAttribute.header, EditorStyles.boldLabel); + headerPadding = 0; + } if (dynamicPortList) { Type type = GetType(property); @@ -89,7 +102,7 @@ namespace XNodeEditor { } rect = GUILayoutUtility.GetLastRect(); - rect.position = rect.position - new Vector2(16, -spacePadding); + rect.position = rect.position - new Vector2(16, -(spacePadding + headerPadding)); // If property is an output, display a text label and put a port handle on the right side } else if (port.direction == XNode.NodePort.IO.Output) { // Get data from [Output] attribute @@ -109,6 +122,14 @@ namespace XNodeEditor { GUILayout.Space(spacePadding); spacePadding = 0; } + if (headerPadding > 0 && useLayoutSpace) + { + Rect position = GUILayoutUtility.GetRect(0, EditorGUIUtility.singleLineHeight * 1.5f); + position.yMin += (EditorGUIUtility.singleLineHeight * 0.5f) + EditorGUIUtility.standardVerticalSpacing; + position = EditorGUI.IndentedRect(position); + GUI.Label(position, headerAttribute.header, EditorStyles.boldLabel); + headerPadding = 0; + } if (dynamicPortList) { Type type = GetType(property); @@ -134,7 +155,7 @@ namespace XNodeEditor { } rect = GUILayoutUtility.GetLastRect(); - rect.position = rect.position + new Vector2(rect.width, spacePadding); + rect.position = rect.position + new Vector2(rect.width, spacePadding + headerPadding); } rect.size = new Vector2(16, 16);