You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.1 KiB
67 lines
2.1 KiB
using UnityEngine; |
|
|
|
namespace UnityEditor.Timeline |
|
{ |
|
/// <summary> |
|
/// Scrolling mode during playback for the timeline window. |
|
/// </summary> |
|
public enum PlaybackScrollMode |
|
{ |
|
/// <summary> |
|
/// Timeline window doesn't change while the playhead is leaving the window. |
|
/// </summary> |
|
None, |
|
/// <summary> |
|
/// Timeline window pans its content when the playhead arrive at the right of the window (like a paging scrolling). |
|
/// </summary> |
|
Pan, |
|
/// <summary> |
|
/// Timeline window move the content as the playhead moves. |
|
/// When the playhead reach the middle of the window, it stays there and the content scroll behind it. |
|
/// </summary> |
|
Smooth |
|
} |
|
|
|
static class PlaybackScroller |
|
{ |
|
public static void AutoScroll(WindowState state) |
|
{ |
|
if (Event.current.type != EventType.Layout) |
|
return; |
|
|
|
switch (state.autoScrollMode) |
|
{ |
|
case PlaybackScrollMode.Pan: |
|
DoPanScroll(state); |
|
break; |
|
case PlaybackScrollMode.Smooth: |
|
DoSmoothScroll(state); |
|
break; |
|
} |
|
} |
|
|
|
static void DoSmoothScroll(WindowState state) |
|
{ |
|
if (state.playing) |
|
state.SetPlayHeadToMiddle(); |
|
|
|
state.UpdateLastFrameTime(); |
|
} |
|
|
|
static void DoPanScroll(WindowState state) |
|
{ |
|
if (!state.playing) |
|
return; |
|
|
|
var paddingDeltaTime = state.PixelDeltaToDeltaTime(WindowConstants.autoPanPaddingInPixels); |
|
var showRange = state.timeAreaShownRange; |
|
var rightBoundForPan = showRange.y - paddingDeltaTime; |
|
if (state.editSequence.time > rightBoundForPan) |
|
{ |
|
var leftBoundForPan = showRange.x + paddingDeltaTime; |
|
var delta = rightBoundForPan - leftBoundForPan; |
|
state.SetTimeAreaShownRange(showRange.x + delta, showRange.y + delta); |
|
} |
|
} |
|
} |
|
}
|
|
|