WXMC/.svn/pristine/83/83a812a0969f470abef17624b03868e2cf0eac33.svn-base
2024-12-04 16:18:46 +08:00

86 lines
3.1 KiB
Plaintext

using UnityEngine;
using UnityEditor;
using System.Collections;
using UnityEditorInternal;
using System.Reflection;
using System;
static class XUIUtils {
/////////////////////////////////////////////////////////////////////////////
/*
* This section makes an EditorGUILayout.Foldout, except you can actually click anywhere on the word to open it
* instead of having to click on the teeny-tiny triangle.
*
* ... what the bananas, Unity
*/
private static GUIStyle openFoldoutStyle;
private static GUIStyle closedFoldoutStyle;
private static bool initted;
private static void Init()
{
openFoldoutStyle = new GUIStyle(GUI.skin.FindStyle("Label"));
openFoldoutStyle.fontStyle = (FontStyle)8;
openFoldoutStyle.alignment = TextAnchor.MiddleLeft;
openFoldoutStyle.stretchHeight = true;
closedFoldoutStyle = new GUIStyle(openFoldoutStyle);
openFoldoutStyle.normal = openFoldoutStyle.onNormal;
openFoldoutStyle.active = openFoldoutStyle.onActive;
initted = true;
}
public static bool Foldout(bool open, ref bool toggled, string text) { return Foldout(open, ref toggled, new GUIContent(text)); }
public static bool Foldout(bool open, ref bool toggled, GUIContent text)
{
if (!initted) Init();
if (open) {
GUILayout.BeginHorizontal(EditorStyles.miniButton, GUILayout.Height(15));
toggled = GUILayout.Toggle(toggled, "", GUILayout.Width(10));
if (toggled) {
openFoldoutStyle.normal.textColor = new Vector4 (0.8f, 0.8f, 0.8f, 1.0f);
} else {
openFoldoutStyle.normal.textColor = new Vector4 (0.8f, 0.8f, 0.8f, 0.5f);
}
if (GUILayout.Button(text, openFoldoutStyle, GUILayout.Height(15))) {
GUI.FocusControl("");
GUI.changed = false; // force change-checking group to take notice
GUI.changed = true;
return false;
}
GUILayout.EndHorizontal();
}
else {
GUILayout.BeginHorizontal(EditorStyles.miniButton, GUILayout.Height(15));
toggled = GUILayout.Toggle(toggled, "", GUILayout.Width(10));
if (toggled) {
closedFoldoutStyle.normal.textColor = new Vector4 (0.8f, 0.8f, 0.8f, 1.0f);
} else {
closedFoldoutStyle.normal.textColor = new Vector4 (0.8f, 0.8f, 0.8f, 0.5f);
}
if (GUILayout.Button(text, closedFoldoutStyle, GUILayout.Height(15))) {
GUI.FocusControl("");
GUI.changed = false; // force change-checking to take notice
GUI.changed = true;
return true;
}
GUILayout.EndHorizontal();
}
return open;
}
public static string[] GetSortingLayerNames()
{
Type internalEditorUtilityType = typeof(InternalEditorUtility);
PropertyInfo sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);
return (string[])sortingLayersProperty.GetValue(null, new object[0]);
}
// Get the unique sorting layer IDs -- tossed this in for good measure
public static int[] GetSortingLayerUniqueIDs()
{
Type internalEditorUtilityType = typeof(InternalEditorUtility);
PropertyInfo sortingLayerUniqueIDsProperty = internalEditorUtilityType.GetProperty("sortingLayerUniqueIDs", BindingFlags.Static | BindingFlags.NonPublic);
return (int[])sortingLayerUniqueIDsProperty.GetValue(null, new object[0]);
}
}