Maze / Library /PackageCache /com.unity.timeline@1.6.5 /Editor /Window /TimelineWindow_TimeCursor.cs
| using System; | |
| using UnityEngine; | |
| using UnityEngine.Timeline; | |
| using UnityEngine.Playables; | |
| namespace UnityEditor.Timeline | |
| { | |
| partial class TimelineWindow | |
| { | |
| TimeAreaItem m_PlayHead; | |
| void TimeCursorGUI(TimelineItemArea area) | |
| { | |
| DrawTimeOnSlider(); | |
| if (!CanDrawTimeCursor(area)) | |
| return; | |
| if (m_PlayHead == null || m_PlayHead.style != styles.timeCursor) | |
| { | |
| m_PlayHead = new TimeAreaItem(styles.timeCursor, OnTrackHeadDrag); | |
| m_PlayHead.AddManipulator(new PlayheadContextMenu(m_PlayHead)); | |
| } | |
| var headerMode = area == TimelineItemArea.Header; | |
| DrawTimeCursor(headerMode, !headerMode); | |
| } | |
| bool CanDrawTimeCursor(TimelineItemArea area) | |
| { | |
| if (!currentMode.ShouldShowTimeCursor(state)) | |
| return false; | |
| if (treeView == null || state.editSequence.asset == null || (state.editSequence.asset != null && state.IsEditingAnEmptyTimeline())) | |
| return false; | |
| if (area == TimelineItemArea.Lines && !state.TimeIsInRange((float)state.editSequence.time)) | |
| return false; | |
| return true; | |
| } | |
| void DrawTimeOnSlider() | |
| { | |
| if (currentMode.ShouldShowTimeCursor(state)) | |
| { | |
| var colorDimFactor = EditorGUIUtility.isProSkin ? 0.7f : 0.9f; | |
| var c = styles.timeCursor.normal.textColor * colorDimFactor; | |
| float time = Mathf.Max((float)state.editSequence.time, 0); | |
| float duration = (float)state.editSequence.duration; | |
| m_TimeArea.DrawTimeOnSlider(time, c, duration, DirectorStyles.kDurationGuiThickness); | |
| } | |
| } | |
| void DrawTimeCursor(bool drawHead, bool drawline) | |
| { | |
| m_PlayHead.HandleManipulatorsEvents(state); | |
| if (Event.current.type == EventType.MouseDown && Event.current.button == 0) | |
| { | |
| if (state.timeAreaRect.Contains(Event.current.mousePosition)) | |
| { | |
| state.SetPlaying(false); | |
| m_PlayHead.HandleManipulatorsEvents(state); | |
| state.editSequence.time = Math.Max(0.0, state.GetSnappedTimeAtMousePosition(Event.current.mousePosition)); | |
| } | |
| } | |
| m_PlayHead.drawLine = drawline; | |
| m_PlayHead.drawHead = drawHead; | |
| m_PlayHead.Draw(sequenceContentRect, state, state.editSequence.time); | |
| } | |
| void OnTrackHeadDrag(double newTime) | |
| { | |
| state.editSequence.time = Math.Max(0.0, newTime); | |
| m_PlayHead.showTooltip = true; | |
| } | |
| } | |
| } | |