No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

OverlayToolbar.cs 3.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UIElements;
  4. namespace UnityEditor.U2D.Animation.SceneOverlays
  5. {
  6. internal class OverlayToggle : BaseBoolField
  7. {
  8. public OverlayToggle(Texture2D icon, string styleName) : base(null)
  9. {
  10. this.Q<VisualElement>(className: inputUssClassName).style.backgroundImage = icon;
  11. AddToClassList(styleName);
  12. }
  13. }
  14. internal class OverlayToolbar : VisualElement
  15. {
  16. static class Styles
  17. {
  18. public const string toolbar = SpriteSwapOverlay.rootStyle + "__toolbar";
  19. public const string thumbnailSettings = SpriteSwapOverlay.rootStyle + "__thumbnail-settings";
  20. public const string slider = SpriteSwapOverlay.rootStyle + "__slider";
  21. public const string toggle = SpriteSwapOverlay.rootStyle + "__toggle";
  22. }
  23. static class Icons
  24. {
  25. public const string filter = "EditorUI.Filter";
  26. public const string locked = "InspectorLock";
  27. public const string zoom = "ViewToolZoom";
  28. }
  29. public event Action<bool> onFilterToggled;
  30. public event Action<bool> onLockToggled;
  31. public event Action onResetSliderValue;
  32. public event Action<float> onSliderValueChanged;
  33. public OverlayToolbar()
  34. {
  35. AddToClassList(Styles.toolbar);
  36. var filterIcon = EditorIconUtility.LoadIconResource(Icons.filter, EditorIconUtility.LightIconPath, EditorIconUtility.DarkIconPath);
  37. var filterToggle = new OverlayToggle(filterIcon, Styles.toggle) { tooltip = TextContent.spriteSwapFilterDescription, value = SpriteSwapOverlay.Settings.filter };
  38. filterToggle.RegisterValueChangedCallback(evt => onFilterToggled?.Invoke(evt.newValue));
  39. Add(filterToggle);
  40. var lockIcon = (Texture2D)EditorGUIUtility.IconContent(Icons.locked).image;
  41. var lockToggle = new OverlayToggle(lockIcon, Styles.toggle) { tooltip = TextContent.spriteSwapLockDescription, value = SpriteSwapOverlay.Settings.locked };
  42. lockToggle.RegisterValueChangedCallback(evt => onLockToggled?.Invoke(evt.newValue));
  43. Add(lockToggle);
  44. var thumbnailSettings = new VisualElement();
  45. var slider = new Slider { tooltip = TextContent.spriteSwapThumbnailSlider, lowValue = SpriteSwapOverlay.Settings.minThumbnailSize, highValue = SpriteSwapOverlay.Settings.maxThumbnailSize };
  46. slider.SetValueWithoutNotify(SpriteSwapOverlay.Settings.thumbnailSize);
  47. slider.RegisterValueChangedCallback(OnSliderValueChanged);
  48. slider.AddToClassList(Styles.slider);
  49. var resetButton = new Button { tooltip = TextContent.spriteSwapResetThumbnailSize, style = { minHeight = 18 } };
  50. var resetImage = new Image { image = (Texture2D)EditorGUIUtility.IconContent(Icons.zoom).image };
  51. resetButton.Add(resetImage);
  52. resetButton.clicked += () => OnResetSliderValue(slider);
  53. resetButton.AddToClassList(Styles.toggle);
  54. thumbnailSettings.Add(resetButton);
  55. thumbnailSettings.Add(slider);
  56. thumbnailSettings.AddToClassList(Styles.thumbnailSettings);
  57. Add(thumbnailSettings);
  58. }
  59. void OnResetSliderValue(Slider slider)
  60. {
  61. onResetSliderValue?.Invoke();
  62. slider.SetValueWithoutNotify(SpriteSwapOverlay.Settings.thumbnailSize);
  63. }
  64. void OnSliderValueChanged(ChangeEvent<float> evt)
  65. {
  66. onSliderValueChanged?.Invoke(evt.newValue);
  67. }
  68. }
  69. }