#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(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