Disposables.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using UnityEditor;
  3. using UnityEditor.AnimatedValues;
  4. using UnityEngine;
  5. namespace EnhancedHierarchy {
  6. public struct GUIBackgroundColor : IDisposable {
  7. private readonly Color before;
  8. public GUIBackgroundColor(Color color) {
  9. before = GUI.backgroundColor;
  10. GUI.backgroundColor = color;
  11. }
  12. public void Dispose() {
  13. GUI.backgroundColor = before;
  14. }
  15. }
  16. public struct GUIContentColor : IDisposable {
  17. private readonly Color before;
  18. public GUIContentColor(Color color) {
  19. before = GUI.contentColor;
  20. GUI.contentColor = color;
  21. }
  22. public void Dispose() {
  23. GUI.contentColor = before;
  24. }
  25. }
  26. public struct GUIColor : IDisposable {
  27. private readonly Color before;
  28. public GUIColor(Color color) {
  29. before = GUI.color;
  30. GUI.color = color;
  31. }
  32. public GUIColor(Color color, float alpha) {
  33. before = GUI.color;
  34. color.a = alpha;
  35. GUI.color = color;
  36. }
  37. public void Dispose() {
  38. GUI.color = before;
  39. }
  40. }
  41. public sealed class GUIIndent : IDisposable {
  42. public GUIIndent() {
  43. EditorGUI.indentLevel++;
  44. }
  45. public GUIIndent(string label) {
  46. EditorGUILayout.LabelField(label);
  47. EditorGUI.indentLevel++;
  48. }
  49. public void Dispose() {
  50. EditorGUI.indentLevel--;
  51. EditorGUILayout.Separator();
  52. }
  53. }
  54. public struct GUIEnabled : IDisposable {
  55. private readonly bool before;
  56. public GUIEnabled(bool enabled) {
  57. before = GUI.enabled;
  58. GUI.enabled = before && enabled;
  59. }
  60. public void Dispose() {
  61. GUI.enabled = before;
  62. }
  63. }
  64. public sealed class GUIFade : IDisposable {
  65. private AnimBool anim;
  66. public bool Visible { get; private set; }
  67. public GUIFade() {
  68. Visible = true;
  69. }
  70. public void SetTarget(bool target) {
  71. if (anim == null) {
  72. anim = new AnimBool(target);
  73. anim.valueChanged.AddListener(() => {
  74. if (EditorWindow.focusedWindow)
  75. EditorWindow.focusedWindow.Repaint();
  76. });
  77. }
  78. anim.target = target;
  79. Visible = EditorGUILayout.BeginFadeGroup(anim.faded);
  80. }
  81. public void Dispose() {
  82. EditorGUILayout.EndFadeGroup();
  83. }
  84. }
  85. }