Bez popisu
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.

PoseToolbar.cs 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using UnityEngine.UIElements;
  3. namespace UnityEditor.U2D.Animation
  4. {
  5. internal class PoseToolbar : Toolbar
  6. {
  7. private const string k_UxmlPath = "SkinningModule/PoseToolbar.uxml";
  8. private const string k_UssPath = "SkinningModule/PoseToolbarStyle.uss";
  9. private const string k_ToolbarId = "PoseToolbar";
  10. private const string k_PreviewPoseId = "PreviewPose";
  11. private const string k_RestorePoseId = "RestorePose";
  12. public class CustomUXMLFactor : UxmlFactory<PoseToolbar, UxmlTraits> {}
  13. public event Action ActivateEditPoseTool = () => {};
  14. public SkinningCache skinningCache { get; set; }
  15. private Button m_PreviewBtn;
  16. private Button m_RestoreBtn;
  17. public static PoseToolbar GenerateFromUXML()
  18. {
  19. var clone = GetClone(k_UxmlPath, k_ToolbarId) as PoseToolbar;
  20. clone.BindElements();
  21. clone.SetupShortcutUtility();
  22. clone.LocalizeTextInChildren();
  23. clone.AddShortcutsToToolTips();
  24. return clone;
  25. }
  26. public PoseToolbar()
  27. {
  28. styleSheets.Add(ResourceLoader.Load<StyleSheet>(k_UssPath));
  29. }
  30. private void BindElements()
  31. {
  32. m_PreviewBtn = this.Q<Button>(k_PreviewPoseId);
  33. m_PreviewBtn.clickable.clicked += () => { ActivateEditPoseTool(); };
  34. m_RestoreBtn = this.Q<Button>(k_RestorePoseId);
  35. m_RestoreBtn.clickable.clicked += RestorePose;
  36. }
  37. private void RestorePose()
  38. {
  39. using (skinningCache.UndoScope(TextContent.restorePose))
  40. {
  41. skinningCache.RestoreBindPose();
  42. skinningCache.events.restoreBindPose.Invoke();
  43. }
  44. }
  45. private void SetupShortcutUtility()
  46. {
  47. m_ShortcutUtility = new ShortcutUtility(ShortcutIds.previewPose,
  48. ShortcutIds.restoreBindPose);
  49. m_ShortcutUtility.OnShortcutChanged = () =>
  50. {
  51. RestoreButtonTooltips(k_UxmlPath, k_ToolbarId);
  52. AddShortcutsToToolTips();
  53. };
  54. }
  55. public void UpdatePreviewButtonCheckedState()
  56. {
  57. SetButtonChecked(m_PreviewBtn, skinningCache.GetTool(Tools.EditPose).isActive);
  58. }
  59. public void UpdateResetButtonState()
  60. {
  61. var skeleton = skinningCache.GetEffectiveSkeleton(skinningCache.selectedSprite);
  62. var isResetEnabled = skeleton != null && skeleton.isPosePreview;
  63. m_RestoreBtn.SetEnabled(isResetEnabled);
  64. }
  65. private void AddShortcutsToToolTips()
  66. {
  67. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_PreviewPoseId, ShortcutIds.previewPose);
  68. m_ShortcutUtility.AddShortcutToButtonTooltip(this, k_RestorePoseId, ShortcutIds.restoreBindPose);
  69. }
  70. }
  71. }