IndieGame/client/Packages/com.unity.inputsystem@1.7.0/InputSystem/Editor/Internal/GUIHelpers.cs

134 lines
4.4 KiB
C#
Raw Normal View History

2024-10-11 10:12:15 +08:00
#if UNITY_EDITOR
using System.IO;
using UnityEditor;
namespace UnityEngine.InputSystem.Editor
{
internal static class GUIHelpers
{
public static class Styles
{
public static readonly GUIStyle lineSeparator = new GUIStyle().WithFixedHeight(1).WithMargin(new RectOffset(0, 0, 2, 2));
}
private const string kIconPath = "Packages/com.unity.inputsystem/InputSystem/Editor/Icons/";
public static void DrawLineSeparator(string label = null)
{
var hasLabel = !string.IsNullOrEmpty(label);
EditorGUILayout.BeginVertical();
var rect = GUILayoutUtility.GetRect(GUIContent.none, Styles.lineSeparator, GUILayout.ExpandWidth(true));
var labelRect = new Rect();
GUIContent labelContent = null;
if (hasLabel)
{
labelContent = new GUIContent(label);
labelRect = GUILayoutUtility.GetRect(labelContent, EditorStyles.miniLabel, GUILayout.ExpandWidth(true));
}
EditorGUILayout.EndVertical();
if (Event.current.type != EventType.Repaint)
return;
var orgColor = GUI.color;
var tintColor = EditorGUIUtility.isProSkin ? new Color(0.12f, 0.12f, 0.12f, 1.333f) : new Color(0.6f, 0.6f, 0.6f, 1.333f);
GUI.color = GUI.color * tintColor;
GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
GUI.color = orgColor;
if (hasLabel)
EditorGUI.LabelField(labelRect, labelContent, EditorStyles.miniLabel);
}
public static Texture2D LoadIcon(string name)
{
var skinPrefix = EditorGUIUtility.isProSkin ? "d_" : "";
var scale = Mathf.Clamp((int)EditorGUIUtility.pixelsPerPoint, 0, 4);
var scalePostFix = scale > 1 ? $"@{scale}x" : "";
if (name.IndexOfAny(Path.GetInvalidFileNameChars()) > -1)
name = string.Join("_", name.Split(Path.GetInvalidFileNameChars()));
var path = Path.Combine(kIconPath, skinPrefix + name + scalePostFix + ".png");
return AssetDatabase.LoadAssetAtPath<Texture2D>(path);
}
public static GUIStyle WithNormalBackground(this GUIStyle style, Texture2D background)
{
style.normal.background = background;
return style;
}
public static GUIStyle WithFontSize(this GUIStyle style, int fontSize)
{
style.fontSize = fontSize;
return style;
}
public static GUIStyle WithFontStyle(this GUIStyle style, FontStyle fontStyle)
{
style.fontStyle = fontStyle;
return style;
}
public static GUIStyle WithAlignment(this GUIStyle style, TextAnchor alignment)
{
style.alignment = alignment;
return style;
}
public static GUIStyle WithMargin(this GUIStyle style, RectOffset margin)
{
style.margin = margin;
return style;
}
public static GUIStyle WithBorder(this GUIStyle style, RectOffset border)
{
style.border = border;
return style;
}
public static GUIStyle WithPadding(this GUIStyle style, RectOffset padding)
{
style.padding = padding;
return style;
}
public static GUIStyle WithFixedWidth(this GUIStyle style, int fixedWidth)
{
style.fixedWidth = fixedWidth;
return style;
}
public static GUIStyle WithFixedHeight(this GUIStyle style, int fixedHeight)
{
style.fixedHeight = fixedHeight;
return style;
}
public static GUIStyle WithRichText(this GUIStyle style, bool richText = true)
{
style.richText = richText;
return style;
}
public static GUIStyle WithFont(this GUIStyle style, Font font)
{
style.font = font;
return style;
}
public static GUIStyle WithContentOffset(this GUIStyle style, Vector2 contentOffset)
{
style.contentOffset = contentOffset;
return style;
}
public static GUIStyle WithNormalTextColor(this GUIStyle style, Color textColor)
{
style.normal.textColor = textColor;
return style;
}
}
}
#endif // UNITY_EDITOR