You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.0 KiB
60 lines
2.0 KiB
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; |
|
} |
|
} |
|
}
|
|
|