using System;
using TyphoonGUIStyle;
using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;
namespace TyphoonUI
{
///
/// GUI绘制器
///
public static class GUIDrawer
{
///
/// 绘制GUI属性
///
public static void DrawProperty(Object target, Func ignoreFunc)
{
var obj = new SerializedObject(target);
EditorGUI.BeginChangeCheck();
obj.UpdateIfRequiredOrScript();
SerializedProperty iterator = obj.GetIterator();
for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false)
{
using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath))
{
var cover = ignoreFunc.Invoke(iterator.propertyPath);
if (!cover)
{
EditorGUILayout.PropertyField(iterator, true);
}
}
}
obj.ApplyModifiedProperties();
EditorGUI.EndChangeCheck();
}
///
/// 绘制标题
///
public static void DrawTitleLabel(Rect rect, string content)
{
GUI.Label(rect, content, Styles.TitleBar);
}
///
/// 绘制标题
///
public static Rect DrawTitleLabel(string content, params GUILayoutOption[] options)
{
GUILayout.Label(content, Styles.TitleBar, options);
var last = GUILayoutUtility.GetLastRect();
return last;
}
public static Rect DrawMessageBox(string content, params GUILayoutOption[] options)
{
GUILayout.Label(new GUIContent(content, Styles.IconInfo), Styles.HelpBox, options);
var last = GUILayoutUtility.GetLastRect();
return last;
}
// ///
// ///绘制颜色按钮
// ///
// public static bool DrawColorButton(string content, Color color, out Rect rect, params GUILayoutOption[] options)
// {
// var click = GUILayout.Button("", Styles.R2Button, options);
// rect = GUILayoutUtility.GetLastRect();
// EditorGUI.DrawRect(rect, color * 0.3f);
// GUI.Label(rect, content, Styles.RLabel_Middle);
// return click;
// }
// public static bool DrawBlueButton(string content, out Rect rect, params GUILayoutOption[] options)
// {
// return DrawColorButton(content, new Color(0.01f, 0.49f, 0.84f, 1f), out rect, options);
// }
//
// public static bool DrawGreenButton(string content, out Rect rect, params GUILayoutOption[] options)
// {
// return DrawColorButton(content, new Color(0.27f, 0.79f, 0.24f, 1f), out rect, options);
// }
public static void DrawPopUpToggle(bool isOn, Action onClick, params GUILayoutOption[] options)
{
var txt = isOn ? "开启" : "关闭";
var click = GUILayout.Button(txt, "PopUp", options);
if (click)
{
var menu = new GenericMenu();
menu.AddItem(new GUIContent("开启"), false, () => onClick?.Invoke(true));
menu.AddItem(new GUIContent("关闭"), false, () => onClick?.Invoke(false));
menu.ShowAsContext();
}
}
}
}