LMQT/Assets/TouchScript/Editor/EditorUI/GUIElements.cs
2024-12-10 09:03:45 +08:00

138 lines
3.6 KiB
C#

/*
* @author Valentin Simonov / http://va.lent.in/
*/
using UnityEngine;
using UnityEditor;
using System.Reflection;
namespace TouchScript.Editor.EditorUI
{
internal static class GUIElements
{
public static GUIStyle Box;
public static GUIStyle BoxLabel;
public static GUIStyle HelpBox;
public static GUIStyle HeaderBox;
public static GUIStyle HeaderCheckbox;
public static GUIStyle HeaderFoldout;
public static GUIStyle SmallText;
public static GUIStyle SmallTextRight;
public static GUIStyle SmallButton;
public static Texture2D PaneOptionsIcon;
static GUIElements()
{
Box = new GUIStyle(GUI.skin.box)
{
margin = new RectOffset(0, 0, 1, 0),
padding = new RectOffset(0, 0, 0, 0),
contentOffset = new Vector2(0, 0),
alignment = TextAnchor.MiddleCenter,
};
Box.normal.textColor = GUI.skin.label.normal.textColor;
BoxLabel = new GUIStyle(GUI.skin.label)
{
fontSize = 9,
padding = new RectOffset(0, 0, 5, 0),
};
HelpBox = new GUIStyle("HelpBox")
{
wordWrap = true,
};
HeaderBox = new GUIStyle("ShurikenModuleTitle")
{
font = (new GUIStyle("Label")).font,
border = new RectOffset(15, 7, 4, 4),
fixedHeight = 22,
contentOffset = new Vector2(20f, -2f),
};
HeaderCheckbox = new GUIStyle("ShurikenCheckMark");
HeaderFoldout = new GUIStyle("Foldout");
SmallText = new GUIStyle("miniLabel")
{
alignment = TextAnchor.UpperLeft,
};
SmallTextRight = new GUIStyle("miniLabel")
{
alignment = TextAnchor.UpperRight,
};
SmallButton = new GUIStyle("Button")
{
fontSize = SmallText.fontSize,
fontStyle = SmallText.fontStyle,
font = SmallText.font,
};
if (EditorGUIUtility.isProSkin)
PaneOptionsIcon = (Texture2D)EditorGUIUtility.LoadRequired("Builtin Skins/DarkSkin/Images/pane options.png");
else
PaneOptionsIcon = (Texture2D)EditorGUIUtility.LoadRequired("Builtin Skins/LightSkin/Images/pane options.png");
}
public static bool Header(GUIContent title, SerializedProperty expanded, SerializedProperty enabled = null, PropertyInfo enabledProp = null)
{
var rect = GUILayoutUtility.GetRect(16f, 22f, HeaderBox);
GUI.Box(rect, title, HeaderBox);
var display = expanded == null || expanded.isExpanded;
var foldoutRect = new Rect(rect.x + 4f, rect.y + 3f, 13f, 13f);
var e = Event.current;
if (e.type == EventType.Repaint)
{
if (enabled == null) HeaderFoldout.Draw(foldoutRect, false, false, display, false);
else HeaderCheckbox.Draw(foldoutRect, false, false, enabled.boolValue, false);
}
if (e.type == EventType.MouseDown)
{
if (enabled != null)
{
const float kOffset = 2f;
foldoutRect.x -= kOffset;
foldoutRect.y -= kOffset;
foldoutRect.width += kOffset * 2f;
foldoutRect.height += kOffset * 2f;
if (foldoutRect.Contains(e.mousePosition))
{
enabled.boolValue = !enabled.boolValue;
if (enabledProp != null) enabledProp.SetValue(enabled.serializedObject.targetObject, enabled.boolValue, null);
e.Use();
return display;
}
}
if (rect.Contains(e.mousePosition))
{
display = !display;
expanded.isExpanded = !expanded.isExpanded;
e.Use();
}
}
return display;
}
public static bool BasicHelpBox(GUIContent text)
{
EditorGUILayout.LabelField(text, HelpBox);
var rect = GUILayoutUtility.GetRect(10, 22, GUILayout.ExpandWidth(true));
rect.x = rect.width - 86;
rect.width = 100;
rect.height = 14;
return GUI.Button(rect, "Switch to Advanced", SmallButton);
}
}
}