diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs | |
| download | Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2 Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip | |
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs new file mode 100644 index 0000000..794fc68 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Utilities/StyleManager.cs @@ -0,0 +1,60 @@ +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; + } + } +} |
