From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Editor/Manipulators/EditModeInputHandler.cs | 199 +++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Manipulators/EditModeInputHandler.cs') 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 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 items, WindowState state); + void OnDrag(double value, WindowState state); + void OnExitDrag(); + void OnSetValue(IEnumerable items, double value, WindowState state); + } + + class TrimInputHandler : IInputHandler + { + bool isDragging { get; set; } + public bool stretch { get; set; } + + IEnumerable grabbedItems { get; set; } + + public void OnEnterDrag(IEnumerable items, WindowState state) + { + grabbedItems = items.OfType().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 items, double endValue, WindowState state) + { + foreach (var item in items.OfType()) + { + 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 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 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 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(); + } + } + } + } +} -- cgit v1.2.3