diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs | |
| download | Project-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/Manipulators/EditModeInputHandler.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs new file mode 100644 index 0000000..6a204d9 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs @@ -0,0 +1,199 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.Timeline +{ + class EditModeInputHandler + { + readonly MoveInputHandler m_MoveHandler; + readonly TrimInputHandler m_TrimHandler; + + public EditModeInputHandler() + { + m_MoveHandler = new MoveInputHandler(); + m_TrimHandler = new TrimInputHandler(); + } + + public void ProcessMove(InputEvent action, double value) + { + if (TimelineWindow.instance != null && TimelineWindow.instance.state != null) + ProcessInputAction(m_MoveHandler, action, value, TimelineWindow.instance.state); + } + + public void ProcessTrim(InputEvent action, double value, bool stretch) + { + if (TimelineWindow.instance != null && TimelineWindow.instance.state != null) + { + m_TrimHandler.stretch = stretch; + ProcessInputAction(m_TrimHandler, action, value, TimelineWindow.instance.state); + } + } + + public void SetValueForEdge(IEnumerable<ITimelineItem> items, AttractedEdge edge, double value) + { + if (TimelineWindow.instance != null && TimelineWindow.instance.state != null) + MoveInputHandler.SetValueForEdge(items, edge, value, TimelineWindow.instance.state); + } + + public void OnGUI(WindowState state, Event evt) + { + if (TimelineWindow.instance != null && TimelineWindow.instance.state != null) + { + m_MoveHandler.OnGUI(evt); + m_TrimHandler.OnGUI(state); + } + } + + static void ProcessInputAction(IInputHandler handler, InputEvent action, double value, WindowState state) + { + var items = SelectionManager.SelectedItems(); + switch (action) + { + case InputEvent.None: + return; + case InputEvent.DragEnter: + handler.OnEnterDrag(items, state); + break; + case InputEvent.Drag: + handler.OnDrag(value, state); + break; + case InputEvent.DragExit: + handler.OnExitDrag(); + break; + case InputEvent.KeyboardInput: + handler.OnSetValue(items, value, state); + break; + default: + return; + } + } + + interface IInputHandler + { + void OnEnterDrag(IEnumerable<ITimelineItem> items, WindowState state); + void OnDrag(double value, WindowState state); + void OnExitDrag(); + void OnSetValue(IEnumerable<ITimelineItem> items, double value, WindowState state); + } + + class TrimInputHandler : IInputHandler + { + bool isDragging { get; set; } + public bool stretch { get; set; } + + IEnumerable<ITimelineItem> grabbedItems { get; set; } + + public void OnEnterDrag(IEnumerable<ITimelineItem> items, WindowState state) + { + grabbedItems = items.OfType<ITrimmable>().ToArray(); + foreach (var item in grabbedItems) + { + EditMode.BeginTrim(item, TrimEdge.End); + } + + isDragging = true; + } + + public void OnDrag(double endValue, WindowState state) + { + var trimValue = endValue; + trimValue = TimelineWindow.instance.state.SnapToFrameIfRequired(trimValue); + + foreach (var item in grabbedItems) + { + EditMode.TrimEnd(item, trimValue, stretch); + } + state.UpdateRootPlayableDuration(state.editSequence.duration); + } + + public void OnExitDrag() + { + isDragging = false; + EditMode.FinishTrim(); + TimelineWindow.instance.Repaint(); + } + + public void OnSetValue(IEnumerable<ITimelineItem> items, double endValue, WindowState state) + { + foreach (var item in items.OfType<ITrimmable>()) + { + EditMode.BeginTrim(item, TrimEdge.End); + EditMode.TrimEnd(item, endValue, stretch); + EditMode.FinishTrim(); + } + state.UpdateRootPlayableDuration(state.editSequence.duration); + } + + public void OnGUI(WindowState state) + { + if (!isDragging) return; + + foreach (var item in grabbedItems) + { + EditMode.DrawTrimGUI(state, item.gui, TrimEdge.End); + } + } + } + + class MoveInputHandler : IInputHandler + { + MoveItemHandler m_MoveItemHandler; + + public void OnEnterDrag(IEnumerable<ITimelineItem> items, WindowState state) + { + if (items.Any()) + { + m_MoveItemHandler = new MoveItemHandler(state); + m_MoveItemHandler.Grab(items, items.First().parentTrack); + } + } + + public void OnDrag(double value, WindowState state) + { + if (m_MoveItemHandler == null) return; + + var startValue = value; + startValue = state.SnapToFrameIfRequired(startValue); + m_MoveItemHandler.OnAttractedEdge(null, ManipulateEdges.Both, AttractedEdge.None, startValue); + } + + public void OnExitDrag() + { + if (m_MoveItemHandler == null) return; + + m_MoveItemHandler.Drop(); + m_MoveItemHandler = null; + GUIUtility.ExitGUI(); + } + + public void OnSetValue(IEnumerable<ITimelineItem> items, double value, WindowState state) + { + if (!items.Any()) return; + + m_MoveItemHandler = new MoveItemHandler(state); + m_MoveItemHandler.Grab(items, items.First().parentTrack); + m_MoveItemHandler.OnAttractedEdge(null, ManipulateEdges.Both, AttractedEdge.None, value); + m_MoveItemHandler.Drop(); + m_MoveItemHandler = null; + } + + public void OnGUI(Event evt) + { + if (m_MoveItemHandler != null) + m_MoveItemHandler.OnGUI(evt); + } + + public static void SetValueForEdge(IEnumerable<ITimelineItem> items, AttractedEdge edge, double value, WindowState state) + { + var handler = new MoveItemHandler(state); + foreach (var item in items) + { + handler.Grab(new[] {item}, item.parentTrack); + handler.OnAttractedEdge(null, ManipulateEdges.Both, edge, value); + handler.Drop(); + } + } + } + } +} |
