Net-Game/Library/PackageCache/com.unity.2d.animation@494a3b4e73a9/Editor/SpriteLib/SpriteSwapOverlay/OverlayToolbar.cs
2025-03-28 08:33:16 -04:00

81 lines
3.5 KiB
C#

using System;
using UnityEngine;
using UnityEngine.UIElements;
namespace UnityEditor.U2D.Animation.SceneOverlays
{
internal class OverlayToggle : BaseBoolField
{
public OverlayToggle(Texture2D icon, string styleName) : base(null)
{
this.Q<VisualElement>(className: inputUssClassName).style.backgroundImage = icon;
AddToClassList(styleName);
}
}
internal class OverlayToolbar : VisualElement
{
static class Styles
{
public const string toolbar = SpriteSwapOverlay.rootStyle + "__toolbar";
public const string thumbnailSettings = SpriteSwapOverlay.rootStyle + "__thumbnail-settings";
public const string slider = SpriteSwapOverlay.rootStyle + "__slider";
public const string toggle = SpriteSwapOverlay.rootStyle + "__toggle";
}
static class Icons
{
public const string filter = "EditorUI.Filter";
public const string locked = "InspectorLock";
public const string zoom = "ViewToolZoom";
}
public event Action<bool> onFilterToggled;
public event Action<bool> onLockToggled;
public event Action onResetSliderValue;
public event Action<float> onSliderValueChanged;
public OverlayToolbar()
{
AddToClassList(Styles.toolbar);
var filterIcon = EditorIconUtility.LoadIconResource(Icons.filter, EditorIconUtility.LightIconPath, EditorIconUtility.DarkIconPath);
var filterToggle = new OverlayToggle(filterIcon, Styles.toggle) { tooltip = TextContent.spriteSwapFilterDescription, value = SpriteSwapOverlay.Settings.filter };
filterToggle.RegisterValueChangedCallback(evt => onFilterToggled?.Invoke(evt.newValue));
Add(filterToggle);
var lockIcon = (Texture2D)EditorGUIUtility.IconContent(Icons.locked).image;
var lockToggle = new OverlayToggle(lockIcon, Styles.toggle) { tooltip = TextContent.spriteSwapLockDescription, value = SpriteSwapOverlay.Settings.locked };
lockToggle.RegisterValueChangedCallback(evt => onLockToggled?.Invoke(evt.newValue));
Add(lockToggle);
var thumbnailSettings = new VisualElement();
var slider = new Slider { tooltip = TextContent.spriteSwapThumbnailSlider, lowValue = SpriteSwapOverlay.Settings.minThumbnailSize, highValue = SpriteSwapOverlay.Settings.maxThumbnailSize };
slider.SetValueWithoutNotify(SpriteSwapOverlay.Settings.thumbnailSize);
slider.RegisterValueChangedCallback(OnSliderValueChanged);
slider.AddToClassList(Styles.slider);
var resetButton = new Button { tooltip = TextContent.spriteSwapResetThumbnailSize, style = { minHeight = 18 } };
var resetImage = new Image { image = (Texture2D)EditorGUIUtility.IconContent(Icons.zoom).image };
resetButton.Add(resetImage);
resetButton.clicked += () => OnResetSliderValue(slider);
resetButton.AddToClassList(Styles.toggle);
thumbnailSettings.Add(resetButton);
thumbnailSettings.Add(slider);
thumbnailSettings.AddToClassList(Styles.thumbnailSettings);
Add(thumbnailSettings);
}
void OnResetSliderValue(Slider slider)
{
onResetSliderValue?.Invoke();
slider.SetValueWithoutNotify(SpriteSwapOverlay.Settings.thumbnailSize);
}
void OnSliderValueChanged(ChangeEvent<float> evt)
{
onSliderValueChanged?.Invoke(evt.newValue);
}
}
}