| 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();
 
- 		}
 
- 	}
 
- }
 
 
  |