com.alicizax.unity.editor.e.../Editor/Toolbar/RecommendedStyles/RecommendedStyles.cs
2025-08-01 19:32:29 +08:00

93 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor.Toolbars;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace Paps.UnityToolbarExtenderUIToolkit
{
internal static class RecommendedStyles
{
private static Dictionary<RecommendedStyleVisualElement, RecommendedStyle> _recommendedStyles = new Dictionary<RecommendedStyleVisualElement, RecommendedStyle>();
public static void SetElements(RecommendedStyleVisualElement[] elements)
{
_recommendedStyles.Clear();
foreach(var element in elements)
{
var recommendedStyle = GetRecommendedStyleFor(element.VisualElement);
if (recommendedStyle == null)
continue;
element.VisualElement.RegisterCallback<AttachToPanelEvent>(ApplyRecommendedStyle);
_recommendedStyles.Add(element, recommendedStyle);
}
}
private static void ApplyRecommendedStyle(AttachToPanelEvent eventArgs)
{
var visualElement = eventArgs.target as VisualElement;
var key = _recommendedStyles.Keys.FirstOrDefault(key => key.VisualElement == visualElement);
ApplySafely(key);
}
private static void ApplySafely(RecommendedStyleVisualElement key)
{
try
{
_recommendedStyles[key].Apply(key.IsInsideGroup);
}
catch(Exception e)
{
Debug.LogWarning("An exception ocurred when trying to apply recommended styles");
Debug.LogException(e);
}
}
private static RecommendedStyle GetRecommendedStyleFor(VisualElement visualElement)
{
if (visualElement is not EditorToolbarToggle && visualElement is Toggle toggle)
return new ToggleRecommendedStyle(toggle);
else if (visualElement is not EditorToolbarButton && visualElement is Button button)
return new ButtonRecommendedStyle(button);
else if (visualElement is Slider slider)
return new SliderRecommendedStyle(slider);
else if (visualElement is DropdownField dropdownField)
return new DropdownFieldRecommendedStyle(dropdownField);
else if (visualElement is EditorToolbarDropdown dropdown)
return new EditorToolbarDropdownRecommendedStyle(dropdown);
else if (visualElement is IntegerField integerField)
return new IntegerFieldRecommendedStyle(integerField);
else if (visualElement is FloatField floatField)
return new FloatFieldRecommendedStyle(floatField);
else if (visualElement is TextField textField)
return new TextFieldRecommendedStyle(textField);
else if (visualElement is EditorToolbarToggle toolbarToggle)
return new EditorToolbarToggleRecommendedStyle(toolbarToggle);
else if (visualElement is Vector3Field vector3Field)
return new Vector3FieldRecommendedStyle(vector3Field);
else if (visualElement is Vector2Field vector2Field)
return new Vector2FieldRecommendedStyle(vector2Field);
else if (visualElement is ColorField colorField)
return new ColorFieldRecommendedStyle(colorField);
else if (visualElement is LayerField layerField)
return new LayerFieldRecommendedStyle(layerField);
else if (visualElement is EnumField enumField)
return new EnumFieldRecommendedStyle(enumField);
else if (visualElement is TagField tagField)
return new TagFieldRecommendedStyle(tagField);
else if (visualElement is ObjectField objectField)
return new ObjectFieldRecommendedStyle(objectField);
else if (visualElement is EnumFlagsField enumFlagsField)
return new EnumFlagsFieldRecommendedStyle(enumFlagsField);
return null;
}
}
}