123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #define AVPROVIDEO_SUPPORT_LIVEEDITMODE
- using UnityEngine;
- using UnityEditor;
- using System.Collections.Generic;
- //-----------------------------------------------------------------------------
- // Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProVideo.Editor
- {
- /// A collapsable GUI section that animates during open and close
- internal class AnimCollapseSection
- {
- internal const string SettingsPrefix = "AVProVideo-MediaPlayerEditor-";
- private const float CollapseSpeed = 2f;
- private static GUIStyle _styleCollapsableSection = null;
- private static GUIStyle _styleButtonFoldout = null;
- private static GUIStyle _styleHelpBoxNoPad = null;
- public AnimCollapseSection(string label, bool showOnlyInEditMode, bool isDefaultExpanded, System.Action action, UnityEditor.Editor editor, Color backgroundColor, List<AnimCollapseSection> groupItems = null)
- : this(new GUIContent(label), showOnlyInEditMode, isDefaultExpanded, action, editor, backgroundColor, groupItems)
- {
- }
- public AnimCollapseSection(GUIContent label, bool showOnlyInEditMode, bool isDefaultExpanded, System.Action action, UnityEditor.Editor editor, Color backgroundColor, List<AnimCollapseSection> groupItems = null)
- {
- Label = label;
- _name = Label.text;
- Label.text = " " + Label.text; // Add a space for aesthetics
- ShowOnlyInEditMode = showOnlyInEditMode;
- _action = action;
- isDefaultExpanded = EditorPrefs.GetBool(PrefName, isDefaultExpanded);
- BackgroundColor = backgroundColor;
- _groupItems = groupItems;
- _anim = new UnityEditor.AnimatedValues.AnimBool(isDefaultExpanded);
- _anim.speed = CollapseSpeed;
- _anim.valueChanged.AddListener(editor.Repaint);
- }
- ~AnimCollapseSection()
- {
- _anim.valueChanged.RemoveAllListeners();
- }
- private string _name;
- private UnityEditor.AnimatedValues.AnimBool _anim;
- private System.Action _action;
- private List<AnimCollapseSection> _groupItems;
- public void Invoke()
- {
- _action.Invoke();
- }
- public bool IsExpanded { get { return _anim.target; } set { if (_anim.target != value) { _anim.target = value; if (value) CollapseSiblings(); } } }
- public float Faded { get { return _anim.faded; } }
- public GUIContent Label { get; private set; }
- public bool ShowOnlyInEditMode { get; private set; }
- public Color BackgroundColor { get; private set; }
- private string PrefName { get { return GetPrefName(_name); } }
- public void Save()
- {
- EditorPrefs.SetBool(PrefName, IsExpanded);
- }
- private void CollapseSiblings()
- {
- // Ensure only a single item is in an expanded state
- if (_groupItems != null)
- {
- foreach (AnimCollapseSection section in _groupItems)
- {
- if (section != this && section.IsExpanded)
- {
- section.IsExpanded = false;
- }
- }
- }
- }
- internal static string GetPrefName(string label)
- {
- return SettingsPrefix + "Expand-" + label;
- }
- internal static void CreateStyles()
- {
- if (_styleCollapsableSection == null)
- {
- _styleCollapsableSection = new GUIStyle(GUI.skin.box);
- _styleCollapsableSection.padding.top = 0;
- _styleCollapsableSection.padding.bottom = 0;
- }
- if (_styleButtonFoldout == null)
- {
- _styleButtonFoldout = new GUIStyle(EditorStyles.foldout);
- _styleButtonFoldout.margin = new RectOffset();
- _styleButtonFoldout.fontStyle = FontStyle.Bold;
- _styleButtonFoldout.alignment = TextAnchor.MiddleLeft;
- }
- if (_styleHelpBoxNoPad == null)
- {
- _styleHelpBoxNoPad = new GUIStyle(EditorStyles.helpBox);
- _styleHelpBoxNoPad.padding = new RectOffset();
- //_styleHelpBoxNoPad.border = new RectOffset();
- _styleHelpBoxNoPad.overflow = new RectOffset();
- _styleHelpBoxNoPad.margin = new RectOffset();
- _styleHelpBoxNoPad.margin = new RectOffset(8, 0, 0, 0);
- _styleHelpBoxNoPad.stretchWidth = false;
- _styleHelpBoxNoPad.stretchHeight = false;
- //_styleHelpBoxNoPad.normal.background = Texture2D.whiteTexture;
- }
- }
- internal static void Show(AnimCollapseSection section, int indentLevel = 0)
- {
- if (section.ShowOnlyInEditMode && Application.isPlaying) return;
- float headerGlow = Mathf.Lerp(0.5f, 0.85f, section.Faded);
- //float headerGlow = Mathf.Lerp(0.85f, 1f, section.Faded);
- if (EditorGUIUtility.isProSkin)
- {
- GUI.backgroundColor = section.BackgroundColor * new Color(headerGlow, headerGlow, headerGlow, 1f);
- }
- else
- {
- headerGlow = Mathf.Lerp(0.75f, 1f, section.Faded);
- GUI.backgroundColor = section.BackgroundColor * new Color(headerGlow, headerGlow, headerGlow, 1f);
- }
- GUILayout.BeginVertical(_styleHelpBoxNoPad);
- GUILayout.Box(GUIContent.none, EditorStyles.miniButton, GUILayout.ExpandWidth(true));
- GUI.backgroundColor = Color.white;
- Rect buttonRect = GUILayoutUtility.GetLastRect();
- if (Event.current.type != EventType.Layout)
- {
- buttonRect.xMin += indentLevel * EditorGUIUtility.fieldWidth / 3f;
- EditorGUI.indentLevel++;
- EditorGUIUtility.SetIconSize(new Vector2(16f, 16f));
- section.IsExpanded = EditorGUI.Foldout(buttonRect, section.IsExpanded, section.Label, true, _styleButtonFoldout);
- EditorGUIUtility.SetIconSize(Vector2.zero);
- EditorGUI.indentLevel--;
- }
- if (EditorGUILayout.BeginFadeGroup(section.Faded))
- {
- section.Invoke();
- }
- EditorGUILayout.EndFadeGroup();
- GUILayout.EndVertical();
- }
- internal static void Show(string label, ref bool isExpanded, System.Action action, bool showOnlyInEditMode)
- {
- if (showOnlyInEditMode && Application.isPlaying) return;
- if (BeginShow(label, ref isExpanded, Color.white))
- {
- action.Invoke();
- }
- EndShow();
- }
- internal static bool BeginShow(string label, ref bool isExpanded, Color tintColor)
- {
- GUI.color = Color.white;
- GUI.backgroundColor = Color.clear;
- if (isExpanded)
- {
- GUI.color = Color.white;
- GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f, 0.1f);
- if (EditorGUIUtility.isProSkin)
- {
- GUI.backgroundColor = Color.black;
- }
- }
- GUILayout.BeginVertical(_styleCollapsableSection);
- GUI.color = tintColor;
- GUI.backgroundColor = Color.white;
- if (GUILayout.Button(label, EditorStyles.toolbarButton))
- {
- isExpanded = !isExpanded;
- }
- GUI.color = Color.white;
- return isExpanded;
- }
- internal static void EndShow()
- {
- GUILayout.EndVertical();
- }
- }
- }
|