115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			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; | ||
|  |     } | ||
|  | } |