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.

TilemapEditorToolButton.cs 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using UnityEditor.EditorTools;
  3. using UnityEditor.ShortcutManagement;
  4. using UnityEditor.Toolbars;
  5. using UnityEngine;
  6. using UnityEngine.UIElements;
  7. namespace UnityEditor.Tilemaps
  8. {
  9. internal class TilemapEditorToolButton : EditorToolbarToggle
  10. {
  11. private TilemapEditorTool m_TilemapEditorTool;
  12. public TilemapEditorToolButton(TilemapEditorTool tool)
  13. {
  14. focusable = false;
  15. if (tool != null)
  16. {
  17. name = tool.name;
  18. icon = tool.toolbarIcon?.image as Texture2D;
  19. tooltip = tool.toolbarIcon?.tooltip;
  20. m_TilemapEditorTool = tool;
  21. }
  22. this.RegisterValueChangedCallback((evt) =>
  23. {
  24. SetToolActive();
  25. });
  26. RegisterCallback<AttachToPanelEvent>(OnAttachedToPanel);
  27. RegisterCallback<DetachFromPanelEvent>(OnDetachFromPanel);
  28. UpdateState();
  29. }
  30. private void OnAttachedToPanel(AttachToPanelEvent evt)
  31. {
  32. ToolManager.activeToolChanged += UpdateState;
  33. ToolManager.activeContextChanged += UpdateState;
  34. ShortcutIntegration.instance.profileManager.shortcutBindingChanged += UpdateTooltips;
  35. UpdateState();
  36. }
  37. private void OnDetachFromPanel(DetachFromPanelEvent evt)
  38. {
  39. ShortcutIntegration.instance.profileManager.shortcutBindingChanged -= UpdateTooltips;
  40. ToolManager.activeToolChanged -= UpdateState;
  41. ToolManager.activeContextChanged -= UpdateState;
  42. }
  43. protected void SetToolActive()
  44. {
  45. var active = EditorToolManager.activeTool;
  46. if (active == m_TilemapEditorTool)
  47. ToolManager.RestorePreviousPersistentTool();
  48. else
  49. ToolManager.SetActiveTool(m_TilemapEditorTool);
  50. UpdateState();
  51. }
  52. private void UpdateState()
  53. {
  54. var activeTool = m_TilemapEditorTool == EditorToolManager.activeTool;
  55. SetValueWithoutNotify(activeTool);
  56. }
  57. private void UpdateTooltips(IShortcutProfileManager arg1, Identifier arg2, ShortcutBinding arg3, ShortcutBinding arg4)
  58. {
  59. tooltip = m_TilemapEditorTool != null ? m_TilemapEditorTool.toolbarIcon.tooltip : String.Empty;
  60. }
  61. }
  62. }