123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEditor.Experimental;
- using UnityEditor.StyleSheets;
- using UnityEngine;
- using UnityEngine.Timeline;
- namespace UnityEditor.Timeline
- {
- static class StyleManager
- {
- static readonly StyleState[] k_StyleStates = { StyleState.any };
- static readonly string k_ErrorCannotFindStyle = L10n.Tr("Cannot find style {0} for {1}");
- static Dictionary<Type, GUIStyle> s_CustomStyles = new Dictionary<Type, GUIStyle>();
- static GUISkin s_CurrentSkin;
- public static GUIStyle UssStyleForType(Type type)
- {
- ClearCacheIfInvalid();
- GUIStyle cachedStyle;
- if (s_CustomStyles.TryGetValue(type, out cachedStyle))
- return cachedStyle;
- var style = DirectorStyles.GetGUIStyle(DirectorStyles.markerDefaultStyle);
- var customStyleForType = CustomStyleForType(type);
- if (customStyleForType != null)
- {
- if (IsStyleValid(customStyleForType))
- style = DirectorStyles.GetGUIStyle(customStyleForType);
- else
- Debug.LogWarningFormat(k_ErrorCannotFindStyle, customStyleForType, type.Name);
- }
- s_CustomStyles.Add(type, style);
- return style;
- }
- static string CustomStyleForType(Type type)
- {
- var attr = (CustomStyleAttribute)type.GetCustomAttributes(typeof(CustomStyleAttribute), true).FirstOrDefault();
- return attr != null ? attr.ussStyle : null;
- }
- static bool IsStyleValid(string ussStyle)
- {
- return GUISkin.current.FindStyle(ussStyle) != null || EditorResources.styleCatalog.GetStyle(ussStyle, k_StyleStates).IsValid();
- }
- static void ClearCacheIfInvalid()
- {
- if (s_CurrentSkin != GUISkin.current)
- s_CustomStyles.Clear();
- s_CurrentSkin = GUISkin.current;
- }
- }
- }
|