123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using System.Collections.Generic;
- using System.Linq;
- using UnityEditor.Timeline.Actions;
- using UnityEngine;
- using UnityEngine.Timeline;
-
- namespace UnityEditor.Timeline
- {
- class InlineCurveResize : Manipulator
- {
- bool m_Captured;
-
- float m_CapturedHeight;
- float m_CaptureMouseYPos;
-
- InlineCurveResizeHandle m_Target;
-
- protected override bool MouseDown(Event evt, WindowState state)
- {
- m_Target = PickerUtils.FirstPickedElementOfType<InlineCurveResizeHandle>();
- if (m_Target == null)
- return false;
-
- m_Captured = true;
- m_CapturedHeight = TimelineWindowViewPrefs.GetInlineCurveHeight(m_Target.trackGUI.track);
- m_CaptureMouseYPos = GUIUtility.GUIToScreenPoint(Event.current.mousePosition).y;
- state.AddCaptured(this);
-
- return true;
- }
-
- protected override bool MouseDrag(Event evt, WindowState state)
- {
- if (!m_Captured || m_Target == null)
- return false;
-
- var trackGUI = m_Target.trackGUI;
-
- float inlineTrackHeight = m_CapturedHeight +
- (GUIUtility.GUIToScreenPoint(Event.current.mousePosition).y - m_CaptureMouseYPos);
-
- TimelineWindowViewPrefs.SetInlineCurveHeight(trackGUI.track, Mathf.Max(inlineTrackHeight, 60.0f));
-
- state.GetWindow().treeView.CalculateRowRects();
-
- return true;
- }
-
- protected override bool MouseUp(Event evt, WindowState state)
- {
- if (!m_Captured)
- return false;
-
- state.RemoveCaptured(this);
- m_Captured = false;
-
- return true;
- }
-
- public override void Overlay(Event evt, WindowState state)
- {
- var rect = state.GetWindow().sequenceRect;
- EditorGUIUtility.AddCursorRect(rect, MouseCursor.SplitResizeUpDown);
- }
- }
-
- class TrackResize : Manipulator
- {
- bool m_Captured;
- int m_NumberOfContributingTracks;
-
- TrackResizeHandle m_Target;
- List<TimelineTrackGUI> m_TracksToResize;
-
- protected override bool MouseDown(Event evt, WindowState state)
- {
- m_Target = PickerUtils.FirstPickedElementOfType<TrackResizeHandle>();
- if (m_Target == null)
- return false;
-
- m_NumberOfContributingTracks = 1;
- var selectedTracks = SelectionManager.SelectedTrackGUI().ToList();
-
- if (selectedTracks.Any() && selectedTracks.Contains(m_Target.trackGUI)) //resize all selected tracks
- {
- var allTrackGui = state.GetWindow().treeView.allTrackGuis;
- m_TracksToResize = allTrackGui.OfType<TimelineTrackGUI>().Where(i => SelectionManager.Contains(i.track)).ToList();
- m_NumberOfContributingTracks += m_TracksToResize.IndexOf(m_Target.trackGUI);
- }
- else
- m_TracksToResize = new List<TimelineTrackGUI> { m_Target.trackGUI };
-
- m_Captured = true;
- state.AddCaptured(this);
-
- return true;
- }
-
- protected override bool MouseDrag(Event evt, WindowState state)
- {
- if (!m_Captured || m_Target == null)
- return false;
-
- var delta = evt.mousePosition.y - m_Target.boundingRect.center.y;
- var extension = Mathf.RoundToInt(delta / m_NumberOfContributingTracks / state.trackScale);
- foreach (var track in m_TracksToResize)
- track.heightExtension += extension;
-
- state.GetWindow().treeView.CalculateRowRects();
- return true;
- }
-
- protected override bool MouseUp(Event evt, WindowState state)
- {
- if (!m_Captured)
- return false;
-
- foreach (var track in m_TracksToResize)
- CommitExtension(track);
-
- state.GetWindow().treeView.CalculateRowRects();
- state.RemoveCaptured(this);
- m_Captured = false;
-
- return true;
- }
-
- public override void Overlay(Event evt, WindowState state)
- {
- var rect = state.GetWindow().sequenceRect;
- EditorGUIUtility.AddCursorRect(rect, MouseCursor.SplitResizeUpDown);
- }
-
- static void CommitExtension(TimelineTrackGUI trackGUI)
- {
- if (trackGUI != null)
- TimelineWindowViewPrefs.SetTrackHeightExtension(trackGUI.track, trackGUI.heightExtension);
- }
- }
-
- class TrackDoubleClick : Manipulator
- {
- protected override bool DoubleClick(Event evt, WindowState state)
- {
- if (evt.button != 0)
- return false;
-
- var trackGUI = PickerUtils.FirstPickedElementOfType<TimelineTrackBaseGUI>();
-
- if (trackGUI == null)
- return false;
-
- // Double-click is only available for AnimationTracks: it conflicts with selection mechanics on other tracks
- if ((trackGUI.track as AnimationTrack) == null)
- return false;
-
- return EditTrackInAnimationWindow.Do(trackGUI.track);
- }
- }
-
- class TrackShortcutManipulator : Manipulator
- {
- protected override bool KeyDown(Event evt, WindowState state)
- {
- return InternalExecute(evt, state);
- }
-
- protected override bool ExecuteCommand(Event evt, WindowState state)
- {
- return InternalExecute(evt, state);
- }
-
- static bool InternalExecute(Event evt, WindowState state)
- {
- if (state.IsCurrentEditingASequencerTextField())
- return false;
-
- var tracks = SelectionManager.SelectedTracks().ToList();
- var items = SelectionManager.SelectedClipGUI();
-
- foreach (var item in items)
- {
- var trackGUI = item.parent as TimelineTrackBaseGUI;
- if (trackGUI == null)
- continue;
-
- if (!tracks.Contains(trackGUI.track))
- tracks.Add(trackGUI.track);
- }
-
- return ActionManager.HandleShortcut(evt,
- ActionManager.TrackActions,
- x => ActionManager.ExecuteTrackAction(x, tracks));
- }
- }
- }
|