summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs185
1 files changed, 185 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs
new file mode 100644
index 0000000..7e32e2c
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/treeview/TimelineTrackErrorGUI.cs
@@ -0,0 +1,185 @@
+using System;
+using UnityEditor.IMGUI.Controls;
+using UnityEngine;
+using UnityEngine.Playables;
+
+namespace UnityEditor.Timeline
+{
+ class TimelineTrackErrorGUI : TimelineTrackBaseGUI
+ {
+ static class Styles
+ {
+ public static readonly GUIContent ErrorText = EditorGUIUtility.TrTextContent("Track cannot be loaded.", "Please fix any compile errors in the script for this track");
+ public static readonly Texture2D IconWarn = EditorGUIUtility.LoadIconRequired("console.warnicon.inactive.sml");
+ public static readonly GUIContent RemoveTrack = EditorGUIUtility.TrTextContent("Delete");
+
+ public static readonly Color WarningBoxBackgroundColor = new Color(115.0f / 255.0f, 115.0f / 255.0f, 115.0f / 255.0f); // approved for both skins
+ public static readonly Color WarningBoxHighlightColor = new Color(229 / 255.0f, 208 / 255.0f, 54 / 255.0f); // brigher than standard warning color for contrast
+ }
+
+ Rect m_TrackRect;
+ ScriptableObject m_ScriptableObject;
+ PlayableAsset m_Owner;
+ static GUIContent s_GUIContent = new GUIContent();
+
+ public TimelineTrackErrorGUI(TreeViewController treeview, TimelineTreeViewGUI treeviewGUI, int id, int depth, TreeViewItem parent, string displayName, ScriptableObject track, PlayableAsset owner)
+ : base(id, depth, parent, displayName, null, treeview, treeviewGUI)
+ {
+ m_ScriptableObject = track;
+ m_Owner = owner;
+ }
+
+ public override Rect boundingRect
+ {
+ get { return m_TrackRect; }
+ }
+
+ public override bool expandable
+ {
+ get { return false; }
+ }
+
+ public override void Draw(Rect headerRect, Rect contentRect, WindowState state)
+ {
+ m_TrackRect = contentRect;
+
+ DrawMissingTrackHeader(headerRect, state);
+ DrawMissingTrackBody(contentRect);
+ }
+
+ void DrawMissingTrackHeader(Rect headerRect, WindowState state)
+ {
+ var styles = DirectorStyles.Instance;
+
+ // Draw a header
+ Color backgroundColor = styles.customSkin.colorTrackHeaderBackground;
+ var bgRect = headerRect;
+ bgRect.x += styles.trackSwatchStyle.fixedWidth;
+ bgRect.width -= styles.trackSwatchStyle.fixedWidth;
+ EditorGUI.DrawRect(bgRect, backgroundColor);
+
+ // draw the warning icon
+ var errorIcon = Styles.IconWarn;
+ Rect iconRect = new Rect(headerRect.xMin + styles.trackSwatchStyle.fixedWidth, headerRect.yMin + 0.5f * (headerRect.height - errorIcon.height), errorIcon.width, errorIcon.height);
+ if (iconRect.width > 0 && iconRect.height > 0)
+ {
+ GUI.DrawTexture(iconRect, errorIcon, ScaleMode.ScaleAndCrop, true, 0, DirectorStyles.kClipErrorColor, 0, 0);
+ }
+
+ // Draw the name
+
+ // m_ScriptableObject == null will return true because the script can't be loaded. so this checks
+ // to make sure it is actually not null so we can grab the name
+ object o = m_ScriptableObject;
+ if (o != null)
+ {
+ s_GUIContent.text = m_ScriptableObject.name;
+ var textStyle = styles.trackHeaderFont;
+ textStyle.normal.textColor = styles.customSkin.colorTrackFont; // TODO -- we shouldn't modify the style like this. track header does it though :(
+ Rect textRect = headerRect;
+ textRect.xMin = iconRect.xMax + 1;
+ textRect.xMax = Math.Min(textRect.xMin + styles.trackHeaderFont.CalcSize(s_GUIContent).x, headerRect.xMax - 1);
+ EditorGUI.LabelField(textRect, s_GUIContent, textStyle);
+ }
+
+
+ // Draw the color swatch to the left of the track, darkened by the mute
+ var color = Color.Lerp(DirectorStyles.kClipErrorColor, styles.customSkin.colorTrackDarken, styles.customSkin.colorTrackDarken.a);
+ color.a = 1;
+ using (new GUIColorOverride(color))
+ {
+ var colorSwatchRect = headerRect;
+ colorSwatchRect.width = styles.trackSwatchStyle.fixedWidth;
+ GUI.Label(colorSwatchRect, GUIContent.none, styles.trackSwatchStyle);
+ }
+
+ // draw darken overlay
+ EditorGUI.DrawRect(bgRect, styles.customSkin.colorTrackDarken);
+
+ DrawRemoveMenu(headerRect, state);
+ }
+
+ void DrawRemoveMenu(Rect headerRect, WindowState state)
+ {
+ const float pad = 3;
+ const float buttonSize = 16;
+ var buttonRect = new Rect(headerRect.xMax - buttonSize - pad, headerRect.y + ((headerRect.height - buttonSize) / 2f) + 2, buttonSize, buttonSize);
+
+ if (GUI.Button(buttonRect, GUIContent.none, DirectorStyles.Instance.trackOptions))
+ {
+ GenericMenu menu = new GenericMenu();
+
+ var owner = m_Owner;
+ var scriptableObject = m_ScriptableObject;
+
+ menu.AddItem(Styles.RemoveTrack, false, () =>
+ {
+ if (TrackExtensions.RemoveBrokenTrack(owner, scriptableObject))
+ state.Refresh();
+ }
+ );
+
+ menu.ShowAsContext();
+ }
+ }
+
+ static void DrawMissingTrackBody(Rect contentRect)
+ {
+ if (contentRect.width < 0)
+ return;
+
+ var styles = DirectorStyles.Instance;
+
+ // draw a track rectangle
+ EditorGUI.DrawRect(contentRect, styles.customSkin.colorTrackDarken);
+ // draw the warning box
+ DrawScriptWarningBox(contentRect, Styles.ErrorText);
+ }
+
+ static void DrawScriptWarningBox(Rect trackRect, GUIContent content)
+ {
+ var styles = DirectorStyles.Instance;
+ const float kTextPadding = 52f;
+
+ var errorIcon = Styles.IconWarn;
+ float textWidth = styles.fontClip.CalcSize(content).x;
+
+ var outerRect = trackRect;
+ outerRect.width = textWidth + kTextPadding + errorIcon.width;
+ outerRect.x += (trackRect.width - outerRect.width) / 2f;
+ outerRect.height -= 4f;
+ outerRect.y += 1f;
+
+ bool drawText = true;
+ if (outerRect.width > trackRect.width)
+ {
+ outerRect.x = trackRect.x;
+ outerRect.width = trackRect.width;
+ drawText = false;
+ }
+
+ var innerRect = new Rect(outerRect.x + 2, outerRect.y + 2, outerRect.width - 4, outerRect.height - 4);
+ using (new GUIColorOverride(Styles.WarningBoxHighlightColor))
+ GUI.Box(outerRect, GUIContent.none, styles.displayBackground);
+ using (new GUIColorOverride(Styles.WarningBoxBackgroundColor))
+ GUI.Box(innerRect, GUIContent.none, styles.displayBackground);
+
+
+ if (drawText)
+ {
+ var iconRect = new Rect(outerRect.x + kTextPadding / 2.0f - 4.0f, outerRect.y + (outerRect.height - errorIcon.height) / 2.0f, errorIcon.width, errorIcon.height);
+ var textRect = new Rect(iconRect.xMax + 4.0f, outerRect.y, textWidth, outerRect.height);
+
+ GUI.DrawTexture(iconRect, errorIcon, ScaleMode.ScaleAndCrop, true, 0, Styles.WarningBoxHighlightColor, 0, 0);
+ Graphics.ShadowLabel(textRect, content, styles.fontClip, Color.white, Color.black);
+ }
+ else if (errorIcon.width > innerRect.width)
+ {
+ var iconRect = new Rect(outerRect.x + (outerRect.width - errorIcon.width) / 2.0f, outerRect.y + (outerRect.height - errorIcon.height) / 2.0f, errorIcon.width, errorIcon.height);
+ GUI.DrawTexture(iconRect, errorIcon, ScaleMode.ScaleAndCrop, true, 0, Styles.WarningBoxHighlightColor, 0, 0);
+ }
+ }
+
+ public override void OnGraphRebuilt() {}
+ }
+}