arenos-nexus/Arenos Nexus/Library/PackageCache/com.unity.collab-proxy@ab839cc7d2ad/Editor/UVCSToolbar/PopupWindow/PopupWindowDrawing.cs
Daniel 2e704cae70 init
Init Commit Unity
2025-09-25 22:01:28 +02:00

115 lines
3.4 KiB
C#

using System;
using UnityEditor;
using UnityEngine;
namespace Unity.PlasticSCM.Editor.Toolbar.PopupWindow
{
using UI;
internal static class PopupWindowDrawing
{
internal const int MENU_ITEM_HEIGHT = 26;
internal const int DELIMITER_HEIGHT = 1;
internal const int PROGRESS_BAR_HEIGHT = 3;
internal static bool DrawMenuItem(
string text,
Texture icon,
string shortcut,
out Rect menuItemRect)
{
GUIStyle menuItemStyle = UnityStyles.EditorToolbar.Popup.Hover;
menuItemRect = GUILayoutUtility.GetRect(
new GUIContent(text),
menuItemStyle,
GUILayout.Height(MENU_ITEM_HEIGHT));
bool isClicked = GUI.Button(menuItemRect, GUIContent.none, menuItemStyle);
bool isHovered = menuItemRect.Contains(Event.current.mousePosition);
GUIStyle labelStyle = isHovered ?
UnityStyles.EditorToolbar.Popup.LabelHover :
UnityStyles.EditorToolbar.Popup.Label;
GUIStyle shortcutStyle = isHovered
? UnityStyles.EditorToolbar.Popup.ShortcutHover
: UnityStyles.EditorToolbar.Popup.Shortcut;
float padding = labelStyle.padding.left;
if (icon != null)
{
Rect iconRect = new Rect(
menuItemRect.x + padding,
menuItemRect.y + (MENU_ITEM_HEIGHT - ICON_SIZE) / 2,
ICON_SIZE,
ICON_SIZE);
float textOffset = icon != null ? ICON_SIZE + labelStyle.margin.left : 0f;
Rect textRect = new Rect(
menuItemRect.x + textOffset,
menuItemRect.y,
menuItemRect.width - textOffset,
menuItemRect.height);
GUI.DrawTexture(iconRect, icon);
GUI.Label(textRect, text, labelStyle);
}
else
{
GUI.Label(menuItemRect, text, labelStyle);
}
if (!string.IsNullOrEmpty(shortcut))
GUI.Label(menuItemRect, shortcut, shortcutStyle);
return isClicked;
}
internal static void DrawDelimiterRect(Rect rect, Color color)
{
if (Event.current.type != EventType.Repaint)
return;
Color color1 = GUI.color;
GUI.color *= color;
GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
GUI.color = color1;
}
internal static int RepaintWhenHoveredMenuItemChanged(
Action repaint,
int lastHoveredIndex,
params Rect[] rects)
{
Vector2 mousePos = Event.current.mousePosition;
int hoveredIndex = -1;
for (int i = 0; i < rects.Length; i++)
{
if (rects[i].Contains(mousePos))
{
hoveredIndex = i;
break;
}
}
if (hoveredIndex != lastHoveredIndex)
{
repaint();
}
return hoveredIndex;
}
internal static void DrawPopupBorder(Rect rect)
{
GUI.Label(rect, GUIContent.none, "grey_border");
}
const int ICON_SIZE = 16;
}
}