| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | using System;using UnityEditor;using UnityEditor.AnimatedValues;using UnityEngine;namespace EnhancedHierarchy {    public struct GUIBackgroundColor : IDisposable {        private readonly Color before;        public GUIBackgroundColor(Color color) {            before = GUI.backgroundColor;            GUI.backgroundColor = color;        }        public void Dispose() {            GUI.backgroundColor = before;        }    }    public struct GUIContentColor : IDisposable {        private readonly Color before;        public GUIContentColor(Color color) {            before = GUI.contentColor;            GUI.contentColor = color;        }        public void Dispose() {            GUI.contentColor = before;        }    }    public struct GUIColor : IDisposable {        private readonly Color before;        public GUIColor(Color color) {            before = GUI.color;            GUI.color = color;        }        public GUIColor(Color color, float alpha) {            before = GUI.color;            color.a = alpha;            GUI.color = color;        }        public void Dispose() {            GUI.color = before;        }    }    public sealed class GUIIndent : IDisposable {        public GUIIndent() {            EditorGUI.indentLevel++;        }        public GUIIndent(string label) {            EditorGUILayout.LabelField(label);            EditorGUI.indentLevel++;        }        public void Dispose() {            EditorGUI.indentLevel--;            EditorGUILayout.Separator();        }    }    public struct GUIEnabled : IDisposable {        private readonly bool before;        public GUIEnabled(bool enabled) {            before = GUI.enabled;            GUI.enabled = before && enabled;        }        public void Dispose() {            GUI.enabled = before;        }    }    public sealed class GUIFade : IDisposable {        private AnimBool anim;        public bool Visible { get; private set; }        public GUIFade() {            Visible = true;        }        public void SetTarget(bool target) {            if (anim == null) {                anim = new AnimBool(target);                anim.valueChanged.AddListener(() => {                    if (EditorWindow.focusedWindow)                        EditorWindow.focusedWindow.Repaint();                });            }            anim.target = target;            Visible = EditorGUILayout.BeginFadeGroup(anim.faded);        }        public void Dispose() {            EditorGUILayout.EndFadeGroup();        }    }}
 |