diff --git a/Scripts/Editor/NodeEditorGUILayout.cs b/Scripts/Editor/NodeEditorGUILayout.cs
index 3003e1a..f8b4e25 100644
--- a/Scripts/Editor/NodeEditorGUILayout.cs
+++ b/Scripts/Editor/NodeEditorGUILayout.cs
@@ -145,6 +145,34 @@ namespace XNodeEditor {
else NodeEditor.portPositions.Add(port, portPos);
}
+ /// Add a port field to previous layout element.
+ public static void AddPortField(XNode.NodePort port) {
+ if (port == null) return;
+ Rect rect = new Rect();
+
+ // 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) {
+ rect = GUILayoutUtility.GetLastRect();
+ rect.position = rect.position - new Vector2(16, 0);
+ // 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) {
+ rect = GUILayoutUtility.GetLastRect();
+ rect.position = rect.position + new Vector2(rect.width, 0);
+ }
+
+ rect.size = new Vector2(16, 16);
+
+ Color backgroundColor = new Color32(90, 97, 105, 255);
+ if (NodeEditorWindow.nodeTint.ContainsKey(port.node.GetType())) backgroundColor *= NodeEditorWindow.nodeTint[port.node.GetType()];
+ Color col = NodeEditorWindow.current.graphEditor.GetTypeColor(port.ValueType);
+ DrawPortHandle(rect, backgroundColor, col);
+
+ // Register the handle position
+ Vector2 portPos = rect.center;
+ if (NodeEditor.portPositions.ContainsKey(port)) NodeEditor.portPositions[port] = portPos;
+ else NodeEditor.portPositions.Add(port, portPos);
+ }
+
/// Draws an input and an output port on the same line
public static void PortPair(XNode.NodePort input, XNode.NodePort output) {
GUILayout.BeginHorizontal();