ButtonGroupStyles.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
  2. #if UNITY_EDITOR
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace Animancer.Editor
  6. {
  7. /// <summary>[Editor-Only] <see cref="GUIStyle"/>s for a group of connected buttons.</summary>
  8. /// https://kybernetik.com.au/animancer/api/Animancer.Editor/ButtonGroupStyles
  9. public struct ButtonGroupStyles
  10. {
  11. /************************************************************************************************************************/
  12. /// <summary>The style for the button on the far left.</summary>
  13. public GUIStyle left;
  14. /// <summary>The style for any buttons in the middle.</summary>
  15. public GUIStyle middle;
  16. /// <summary>The style for the button on the far right.</summary>
  17. public GUIStyle right;
  18. /************************************************************************************************************************/
  19. /// <summary>Creates a new <see cref="ButtonGroupStyles"/>.</summary>
  20. public ButtonGroupStyles(
  21. GUIStyle left,
  22. GUIStyle middle,
  23. GUIStyle right)
  24. {
  25. this.left = left;
  26. this.middle = middle;
  27. this.right = right;
  28. }
  29. /************************************************************************************************************************/
  30. /// <summary>Copies any <c>null</c> values from another group.</summary>
  31. public void CopyMissingStyles(ButtonGroupStyles copyFrom)
  32. {
  33. left ??= copyFrom.left;
  34. middle ??= copyFrom.middle;
  35. right ??= copyFrom.right;
  36. }
  37. /************************************************************************************************************************/
  38. /// <summary>The default styles for a mini button.</summary>
  39. public static ButtonGroupStyles MiniButton => new(
  40. EditorStyles.miniButtonLeft,
  41. EditorStyles.miniButtonMid,
  42. EditorStyles.miniButtonRight);
  43. /************************************************************************************************************************/
  44. private static ButtonGroupStyles _Button;
  45. /// <summary>The default styles for a button.</summary>
  46. public static ButtonGroupStyles Button
  47. {
  48. get
  49. {
  50. _Button.left ??= MiniToRegularButtonStyle(EditorStyles.miniButtonLeft);
  51. _Button.middle ??= MiniToRegularButtonStyle(EditorStyles.miniButtonMid);
  52. _Button.right ??= MiniToRegularButtonStyle(EditorStyles.miniButtonRight);
  53. return _Button;
  54. }
  55. }
  56. /************************************************************************************************************************/
  57. /// <summary>Creates a copy of the `style` with the size of a regular button.</summary>
  58. public static GUIStyle MiniToRegularButtonStyle(GUIStyle style)
  59. => new(style)
  60. {
  61. fixedHeight = 0,
  62. padding = GUI.skin.button.padding,
  63. stretchWidth = false,
  64. };
  65. /************************************************************************************************************************/
  66. }
  67. }
  68. #endif