From 491383e031bafedf4621e6f13a55235e3bc9c2c1 Mon Sep 17 00:00:00 2001 From: Woland Date: Sun, 14 Apr 2019 13:09:03 +0200 Subject: [PATCH] Experimental: Apply custom GUISkin --- Scripts/Editor/EditorStylesHacks.cs | 17 +++++++++++++++++ Scripts/Editor/NodeEditorGUILayout.cs | 11 ++++------- Scripts/Editor/NodeEditorResources.cs | 15 ++++++++++++++- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Scripts/Editor/EditorStylesHacks.cs b/Scripts/Editor/EditorStylesHacks.cs index 9c99bf5..aac3906 100644 --- a/Scripts/Editor/EditorStylesHacks.cs +++ b/Scripts/Editor/EditorStylesHacks.cs @@ -45,5 +45,22 @@ namespace XNodeEditor { EditorStylesInstance = EditorStylesInstanceField.GetValue(null) as EditorStyles; } } + + public static void SetSkin(GUISkin skin) + { + InvalidateCache(); + GUI.skin = skin; + } + + private static void InvalidateCache() + { + var field = typeof(EditorStyles).GetField("s_CachedStyles", EditorStylesBindingFlags); + if (field == null) + { + Debug.LogError("No CachedStyles!"); + return; + } + field.SetValue(null, new EditorStyles[] { null, null }); + } } } \ No newline at end of file diff --git a/Scripts/Editor/NodeEditorGUILayout.cs b/Scripts/Editor/NodeEditorGUILayout.cs index 7e8c960..dd0103f 100644 --- a/Scripts/Editor/NodeEditorGUILayout.cs +++ b/Scripts/Editor/NodeEditorGUILayout.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using System.Reflection; using UnityEditor; using UnityEditorInternal; using UnityEngine; @@ -301,11 +302,8 @@ namespace XNodeEditor { private static void DrawStyledPropertyField(SerializedProperty property, GUIContent label, GUIStyle style, bool showBacking = true, bool includeChildren = false) { label = label != null ? label : new GUIContent(property.displayName); - GUIStyle oldFoldout = EditorStylesHacks.Foldout; - GUIStyle oldLabel = EditorStylesHacks.Label; - - EditorStylesHacks.Label = style; - EditorStylesHacks.Foldout = NodeEditorResources.styles.foldout; + var oldSkin = GUI.skin; + EditorStylesHacks.SetSkin(NodeEditorResources.styles.skin); EditorGUILayout.BeginHorizontal(); @@ -317,8 +315,7 @@ namespace XNodeEditor { EditorGUILayout.EndHorizontal(); - EditorStylesHacks.Label = oldLabel; - EditorStylesHacks.Foldout = oldFoldout; + EditorStylesHacks.SetSkin(oldSkin); } private static ReorderableList CreateReorderableList(string fieldName, List instancePorts, SerializedProperty arrayData, Type type, SerializedObject serializedObject, XNode.NodePort.IO io, XNode.Node.ConnectionType connectionType, XNode.Node.TypeConstraint typeConstraint, Action onCreation) { diff --git a/Scripts/Editor/NodeEditorResources.cs b/Scripts/Editor/NodeEditorResources.cs index a0ef453..839fa0b 100644 --- a/Scripts/Editor/NodeEditorResources.cs +++ b/Scripts/Editor/NodeEditorResources.cs @@ -1,4 +1,6 @@ -using UnityEditor; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; using UnityEngine; namespace XNodeEditor { @@ -19,6 +21,7 @@ namespace XNodeEditor { public static GUIStyle OutputPort { get { return styles.outputPort;} } public class Styles { public GUIStyle inputPort, nodeHeader, nodeBody, tooltip, nodeHighlight, nodeProperty, outputPort, foldout; + public GUISkin skin; public Styles() { GUIStyle baseStyle = new GUIStyle(EditorStyles.label); @@ -53,6 +56,16 @@ namespace XNodeEditor { tooltip = new GUIStyle("helpBox"); tooltip.alignment = TextAnchor.MiddleCenter; + + skin = GUISkin.Instantiate(EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector)); + List custom = skin.customStyles == null ? new List() : skin.customStyles.ToList(); + + GUIStyle controlLabel = new GUIStyle(baseStyle); + controlLabel.name = "ControlLabel"; + custom.Add(controlLabel); + custom.Add(foldout); + skin.customStyles = custom.ToArray(); + } }