summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.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_Duration.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_Duration.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.cs128
1 files changed, 128 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.cs
new file mode 100644
index 0000000..48eef2f
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_Duration.cs
@@ -0,0 +1,128 @@
+using System;
+using UnityEngine;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ partial class TimelineWindow
+ {
+ TimeAreaItem m_TimelineDuration;
+
+ void DurationGUI(TimelineItemArea area, double duration)
+ {
+ // don't show the duration if the time area is not visible for some other reason.
+ if (!currentMode.ShouldShowTimeArea(state))
+ return;
+
+ bool headerMode = area == TimelineItemArea.Header;
+
+ if (state.IsEditingASubTimeline())
+ {
+ if (headerMode)
+ HighlightTimeAreaRange(state.editSequence.GetEvaluableRange(), DirectorStyles.Instance.customSkin.colorSubSequenceDurationLine);
+
+ return;
+ }
+
+ // don't show the duration if there's none.
+ if (state.editSequence.asset.durationMode == TimelineAsset.DurationMode.BasedOnClips && duration <= 0.0f)
+ return;
+
+ if (m_TimelineDuration == null || m_TimelineDuration.style != styles.endmarker)
+ {
+ m_TimelineDuration = new TimeAreaItem(styles.endmarker, OnTrackDurationDrag)
+ {
+ tooltip = "End of sequence marker",
+ boundOffset = new Vector2(0.0f, -DirectorStyles.kDurationGuiThickness)
+ };
+ }
+
+ DrawDuration(headerMode, !headerMode, duration);
+ }
+
+ void DrawDuration(bool drawhead, bool drawline, double duration)
+ {
+ if (state.TimeIsInRange((float)duration))
+ {
+ // Set the colors based on the mode
+ Color lineColor = DirectorStyles.Instance.customSkin.colorEndmarker;
+ Color headColor = Color.white;
+
+ bool canMoveHead = !EditorApplication.isPlaying && state.editSequence.asset.durationMode == TimelineAsset.DurationMode.FixedLength;
+
+ if (canMoveHead)
+ {
+ if (Event.current.type == EventType.MouseDown)
+ {
+ if (m_TimelineDuration.bounds.Contains(Event.current.mousePosition))
+ {
+ if (m_PlayHead != null && m_PlayHead.bounds.Contains(Event.current.mousePosition))
+ {
+ // ignore duration markers if the mouse is over the TimeCursor.
+ canMoveHead = false;
+ }
+ }
+ }
+ }
+ else
+ {
+ lineColor.a *= 0.66f;
+ headColor = DirectorStyles.Instance.customSkin.colorDuration;
+ }
+
+ if (canMoveHead)
+ m_TimelineDuration.HandleManipulatorsEvents(state);
+
+ m_TimelineDuration.lineColor = lineColor;
+ m_TimelineDuration.headColor = headColor;
+ m_TimelineDuration.drawHead = drawhead;
+ m_TimelineDuration.drawLine = drawline;
+ m_TimelineDuration.canMoveHead = canMoveHead;
+
+ // Draw the TimeAreaItem
+ // Rect trackheadRect = treeviewBounds;
+ //trackheadRect.height = clientArea.height;
+ m_TimelineDuration.Draw(sequenceRect, state, duration);
+ }
+
+ // Draw Blue line in timeline indicating the duration...
+ if (state.editSequence.asset != null && drawhead)
+ {
+ HighlightTimeAreaRange(state.editSequence.GetEvaluableRange(), DirectorStyles.Instance.customSkin.colorDurationLine);
+ }
+ }
+
+ void HighlightTimeAreaRange(Range range, Color lineColor)
+ {
+ if (range.length <= 0.0 || !state.RangeIsVisible(range)) return;
+
+ Rect lineRect = Rect.MinMaxRect(
+ Math.Max(state.TimeToPixel(range.start), state.timeAreaRect.xMin),
+ state.timeAreaRect.y - DirectorStyles.kDurationGuiThickness + state.timeAreaRect.height,
+ Math.Min(state.TimeToPixel(range.end), state.timeAreaRect.xMax),
+ state.timeAreaRect.y + state.timeAreaRect.height);
+ EditorGUI.DrawRect(lineRect, lineColor);
+ }
+
+ // Drag handler for the gui
+ void OnTrackDurationDrag(double newTime)
+ {
+ if (state.editSequence.asset.durationMode == TimelineAsset.DurationMode.FixedLength && !state.editSequence.isReadOnly)
+ {
+ // this is the first call to the drag
+ if (m_TimelineDuration.firstDrag)
+ {
+ TimelineUndo.PushUndo(state.editSequence.asset, "Change Duration");
+ }
+
+ state.editSequence.asset.fixedDuration = newTime;
+
+ // when setting a new length, modify the duration of the timeline playable directly instead of
+ // rebuilding the whole graph
+ state.UpdateRootPlayableDuration(newTime);
+ }
+
+ m_TimelineDuration.showTooltip = true;
+ }
+ }
+}