104 lines
3.0 KiB
C#
104 lines
3.0 KiB
C#
|
using System.Linq;
|
||
|
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.PickedInlineCurveResizer();
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TrackDoubleClick : Manipulator
|
||
|
{
|
||
|
protected override bool DoubleClick(Event evt, WindowState state)
|
||
|
{
|
||
|
if (evt.button != 0)
|
||
|
return false;
|
||
|
|
||
|
var trackGUI = PickerUtils.PickedTrackBaseGUI();
|
||
|
|
||
|
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(state, trackGUI.track);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class TrackShortcutManipulator : Manipulator
|
||
|
{
|
||
|
protected override bool ExecuteCommand(Event evt, WindowState state)
|
||
|
{
|
||
|
if (state.IsCurrentEditingASequencerTextField())
|
||
|
return false;
|
||
|
|
||
|
var tracks = SelectionManager.SelectedTracks().ToList();
|
||
|
|
||
|
var itemGUIs = SelectionManager.SelectedClipGUI();
|
||
|
|
||
|
foreach (var itemGUI in itemGUIs)
|
||
|
{
|
||
|
var trackGUI = itemGUI.parent == null ? null : itemGUI.parent as TimelineTrackBaseGUI;
|
||
|
if (trackGUI == null)
|
||
|
continue;
|
||
|
|
||
|
if (!tracks.Contains(trackGUI.track))
|
||
|
tracks.Add(trackGUI.track);
|
||
|
}
|
||
|
|
||
|
return TrackAction.HandleShortcut(state, evt, tracks.ToArray());
|
||
|
}
|
||
|
}
|
||
|
}
|