summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs
downloadProject-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/Window/TimelineWindow_TrackGui.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs219
1 files changed, 219 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs
new file mode 100644
index 0000000..578ae60
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs
@@ -0,0 +1,219 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Timeline;
+using UnityEngine.Playables;
+
+namespace UnityEditor.Timeline
+{
+ partial class TimelineWindow
+ {
+ public TimelineTreeViewGUI treeView { get; private set; }
+
+ void TracksGUI(Rect clientRect, WindowState state, TimelineModeGUIState trackState)
+ {
+ if (Event.current.type == EventType.Repaint && treeView != null)
+ {
+ state.spacePartitioner.Clear();
+ }
+
+ if (state.IsEditingASubTimeline() && !state.IsEditingAnEmptyTimeline())
+ {
+ var headerRect = clientRect;
+ headerRect.width = state.sequencerHeaderWidth;
+ Graphics.DrawBackgroundRect(state, headerRect);
+
+ var clipRect = clientRect;
+ clipRect.xMin = headerRect.xMax;
+ Graphics.DrawBackgroundRect(state, clipRect, subSequenceMode: true);
+ }
+ else
+ {
+ Graphics.DrawBackgroundRect(state, clientRect);
+ }
+
+ if (!state.IsEditingAnEmptyTimeline())
+ m_TimeArea.DrawMajorTicks(sequenceContentRect, state.referenceSequence.frameRate);
+
+ GUILayout.BeginVertical();
+ {
+ GUILayout.Space(5.0f);
+ GUILayout.BeginHorizontal();
+
+ if (this.state.editSequence.asset == null)
+ DrawNoSequenceGUI(state);
+ else
+ DrawTracksGUI(clientRect, trackState);
+
+ GUILayout.EndHorizontal();
+ }
+ GUILayout.EndVertical();
+
+ Graphics.DrawShadow(clientRect);
+ }
+
+ void DrawNoSequenceGUI(WindowState windowState)
+ {
+ bool showCreateButton = false;
+ var currentlySelectedGo = UnityEditor.Selection.activeObject != null ? UnityEditor.Selection.activeObject as GameObject : null;
+ var textContent = DirectorStyles.noTimelineAssetSelected;
+ var existingDirector = currentlySelectedGo != null ? currentlySelectedGo.GetComponent<PlayableDirector>() : null;
+ var existingAsset = existingDirector != null ? existingDirector.playableAsset : null;
+
+ if (currentlySelectedGo != null && !TimelineUtility.IsPrefabOrAsset(currentlySelectedGo) && existingAsset == null)
+ {
+ showCreateButton = true;
+ textContent = new GUIContent(String.Format(DirectorStyles.createTimelineOnSelection.text, currentlySelectedGo.name, "a Director component and a Timeline asset"));
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.BeginVertical();
+ GUILayout.FlexibleSpace();
+
+ GUILayout.Label(textContent);
+
+ if (showCreateButton)
+ {
+ GUILayout.BeginHorizontal();
+ var textSize = GUI.skin.label.CalcSize(textContent);
+ GUILayout.Space((textSize.x / 2.0f) - (WindowConstants.createButtonWidth / 2.0f));
+ if (GUILayout.Button("Create", GUILayout.Width(WindowConstants.createButtonWidth)))
+ {
+ var message = DirectorStyles.createNewTimelineText.text + " '" + currentlySelectedGo.name + "'";
+ string newSequencePath = EditorUtility.SaveFilePanelInProject(DirectorStyles.createNewTimelineText.text, currentlySelectedGo.name + "Timeline", "playable", message, ProjectWindowUtil.GetActiveFolderPath());
+ if (!string.IsNullOrEmpty(newSequencePath))
+ {
+ var newAsset = CreateInstance<TimelineAsset>();
+ AssetDatabase.CreateAsset(newAsset, newSequencePath);
+
+ Undo.IncrementCurrentGroup();
+
+ if (existingDirector == null)
+ {
+ existingDirector = Undo.AddComponent<PlayableDirector>(currentlySelectedGo);
+ }
+
+ existingDirector.playableAsset = newAsset;
+ SetCurrentTimeline(existingDirector);
+ var newTrack = TimelineHelpers.CreateTrack<AnimationTrack>();
+
+ windowState.previewMode = false;
+ TimelineUtility.SetSceneGameObject(windowState.editSequence.director, newTrack, currentlySelectedGo);
+ }
+
+ // If we reach this point, the state of the pannel has changed; skip the rest of this GUI phase
+ // Fixes: case 955831 - [OSX] NullReferenceException when creating a timeline on a selected object
+ GUIUtility.ExitGUI();
+ }
+ GUILayout.EndHorizontal();
+ }
+ GUILayout.FlexibleSpace();
+ GUILayout.EndVertical();
+ GUILayout.FlexibleSpace();
+ }
+
+ public enum OverlayDataTypes
+ {
+ None,
+ BackgroundColor,
+ BackgroundTexture,
+ TextBox
+ }
+
+ public struct OverlayData
+ {
+ public OverlayDataTypes types { get; private set; }
+ public Rect rect { get; internal set; }
+ public string text { get; private set; }
+ public Texture2D texture { get; private set; }
+ public Color color { get; private set; }
+ public GUIStyle backgroundTextStyle { get; private set; }
+ public GUIStyle textStyle { get; private set; }
+
+ public static OverlayData CreateColorOverlay(Rect rectangle, Color backgroundColor)
+ {
+ OverlayData data = new OverlayData();
+ data.rect = rectangle;
+ data.color = backgroundColor;
+ data.types = OverlayDataTypes.BackgroundColor;
+ return data;
+ }
+
+ public static OverlayData CreateTextureOverlay(Rect rectangle, Texture2D backTexture)
+ {
+ OverlayData data = new OverlayData();
+ data.rect = rectangle;
+ data.texture = backTexture;
+ data.types = OverlayDataTypes.BackgroundTexture;
+ return data;
+ }
+
+ public static OverlayData CreateTextBoxOverlay(Rect rectangle, string msg, GUIStyle textstyle, Color textcolor, Color bgTextColor, GUIStyle bgTextStyle)
+ {
+ OverlayData data = new OverlayData();
+ data.rect = rectangle;
+ data.text = msg;
+ data.textStyle = textstyle;
+ data.textStyle.normal.textColor = textcolor;
+ data.backgroundTextStyle = bgTextStyle;
+ data.backgroundTextStyle.normal.textColor = bgTextColor;
+ data.types = OverlayDataTypes.TextBox;
+ return data;
+ }
+ }
+
+ internal List<OverlayData> OverlayDrawData = new List<OverlayData>();
+
+ void DrawTracksGUI(Rect clientRect, TimelineModeGUIState trackState)
+ {
+ GUILayout.BeginVertical(GUILayout.Height(clientRect.height));
+ if (treeView != null)
+ {
+ if (Event.current.type == EventType.Layout)
+ {
+ OverlayDrawData.Clear();
+ }
+
+ treeView.OnGUI(clientRect);
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ foreach (var overlayData in OverlayDrawData)
+ {
+ using (new GUIViewportScope(sequenceContentRect))
+ DrawOverlay(overlayData);
+ }
+ }
+ }
+ GUILayout.EndVertical();
+ }
+
+ void DrawOverlay(OverlayData overlayData)
+ {
+ Rect overlayRect = GUIClip.Clip(overlayData.rect);
+ if (overlayData.types == OverlayDataTypes.BackgroundColor)
+ {
+ EditorGUI.DrawRect(overlayRect, overlayData.color);
+ }
+ else if (overlayData.types == OverlayDataTypes.BackgroundTexture)
+ {
+ Graphics.DrawTextureRepeated(overlayRect, overlayData.texture);
+ }
+ else if (overlayData.types == OverlayDataTypes.TextBox)
+ {
+ using (new GUIColorOverride(overlayData.backgroundTextStyle.normal.textColor))
+ GUI.Box(overlayRect, GUIContent.none, overlayData.backgroundTextStyle);
+ Graphics.ShadowLabel(overlayRect, GUIContent.Temp(overlayData.text), overlayData.textStyle, overlayData.textStyle.normal.textColor, Color.black);
+ }
+ }
+
+ void RefreshInlineCurves()
+ {
+ foreach (var trackGUI in allTracks.OfType<TimelineTrackGUI>())
+ {
+ if (trackGUI.inlineCurveEditor != null)
+ trackGUI.inlineCurveEditor.Refresh();
+ }
+ }
+ }
+}