68 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |