Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
|
@ -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 = TimeReferenceUtility.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 = TimeReferenceUtility.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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue