mirror of
https://github.com/Siccity/xNode.git
synced 2026-03-26 22:49:02 +08:00
66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
using System.Reflection;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace XNodeEditor {
|
|
public static class EditorStylesHacks {
|
|
private static FieldInfo EditorLabelField;
|
|
private static FieldInfo EditorFoldoutField;
|
|
private static FieldInfo EditorStylesInstanceField;
|
|
private static EditorStyles EditorStylesInstance;
|
|
|
|
private static readonly BindingFlags EditorStylesBindingFlags =
|
|
BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance;
|
|
|
|
public static GUIStyle Label {
|
|
get => EditorStyles.label;
|
|
set {
|
|
CacheEditorStylesInstance();
|
|
if (EditorLabelField == null) {
|
|
EditorLabelField = typeof(EditorStyles).GetField("m_Label", EditorStylesBindingFlags);
|
|
}
|
|
|
|
EditorLabelField.SetValue(EditorStylesInstance, value);
|
|
}
|
|
}
|
|
|
|
public static GUIStyle Foldout {
|
|
get => EditorStyles.foldout;
|
|
set {
|
|
CacheEditorStylesInstance();
|
|
if (EditorFoldoutField == null) {
|
|
EditorFoldoutField = typeof(EditorStyles).GetField("m_Foldout", EditorStylesBindingFlags);
|
|
}
|
|
|
|
EditorFoldoutField.SetValue(EditorStylesInstance, value);
|
|
}
|
|
}
|
|
|
|
private static void CacheEditorStylesInstance() {
|
|
if (EditorStylesInstanceField == null) {
|
|
EditorStylesInstanceField = typeof(EditorStyles).GetField("s_Current", EditorStylesBindingFlags);
|
|
}
|
|
|
|
if (EditorStylesInstance == null) {
|
|
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 });
|
|
}
|
|
}
|
|
} |