summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs121
1 files changed, 121 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs
new file mode 100644
index 0000000..8eda6fe
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/TrackResourceCache.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ static class TrackResourceCache
+ {
+ private static Dictionary<System.Type, GUIContent> s_TrackIconCache = new Dictionary<Type, GUIContent>(10);
+ private static Dictionary<System.Type, Color> s_TrackColorCache = new Dictionary<Type, Color>(10);
+ public static GUIContent s_DefaultIcon = EditorGUIUtility.IconContent("UnityEngine/ScriptableObject Icon");
+
+ public static GUIContent GetTrackIcon(TrackAsset track)
+ {
+ if (track == null)
+ return s_DefaultIcon;
+
+ GUIContent content = null;
+ if (!s_TrackIconCache.TryGetValue(track.GetType(), out content))
+ {
+ content = FindTrackIcon(track);
+ s_TrackIconCache[track.GetType()] = content;
+ }
+ return content;
+ }
+
+ public static Color GetTrackColor(TrackAsset track)
+ {
+ if (track == null)
+ return Color.white;
+
+ // Try to ensure DirectorStyles is initialized first
+ // Note: GUISkin.current must exist to be able do so
+ if (!DirectorStyles.IsInitialized && GUISkin.current != null)
+ DirectorStyles.ReloadStylesIfNeeded();
+
+ Color color;
+ if (!s_TrackColorCache.TryGetValue(track.GetType(), out color))
+ {
+ var attr = track.GetType().GetCustomAttributes(typeof(TrackColorAttribute), true);
+ if (attr.Length > 0)
+ {
+ color = ((TrackColorAttribute)attr[0]).color;
+ }
+ else
+ {
+ // case 1141958
+ // There was an error initializing DirectorStyles
+ if (!DirectorStyles.IsInitialized)
+ return Color.white;
+
+ color = DirectorStyles.Instance.customSkin.colorDefaultTrackDrawer;
+ }
+
+ s_TrackColorCache[track.GetType()] = color;
+ }
+ return color;
+ }
+
+ public static void ClearTrackIconCache()
+ {
+ s_TrackIconCache.Clear();
+ }
+
+ public static void SetTrackIcon<T>(GUIContent content) where T : TrackAsset
+ {
+ s_TrackIconCache[typeof(T)] = content;
+ }
+
+ public static void ClearTrackColorCache()
+ {
+ s_TrackColorCache.Clear();
+ }
+
+ public static void SetTrackColor<T>(Color c) where T : TrackAsset
+ {
+ s_TrackColorCache[typeof(T)] = c;
+ }
+
+ private static GUIContent FindTrackIcon(TrackAsset track)
+ {
+ // backwards compatible -- try to load from Gizmos folder
+ Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/Gizmos/" + track.GetType().Name + ".png");
+ if (texture != null)
+ return new GUIContent(texture);
+
+ // try to load based on the binding type
+ var binding = track.outputs.FirstOrDefault();
+ if (binding.outputTargetType != null)
+ {
+ // Type calls don't properly handle monobehaviours, because an instance is required to
+ // get the monoscript icons
+ if (typeof(MonoBehaviour).IsAssignableFrom(binding.outputTargetType))
+ {
+ texture = null;
+ var scripts = UnityEngine.Resources.FindObjectsOfTypeAll<MonoScript>();
+ foreach (var script in scripts)
+ {
+ if (script.GetClass() == binding.outputTargetType)
+ {
+ texture = AssetPreview.GetMiniThumbnail(script);
+ break;
+ }
+ }
+ }
+ else
+ {
+ texture = EditorGUIUtility.FindTexture(binding.outputTargetType);
+ }
+
+ if (texture != null)
+ return new GUIContent(texture);
+ }
+
+ // default to the scriptable object icon
+ return s_DefaultIcon;
+ }
+ }
+}