138 lines
3.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|