104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEngine; | ||
|  | 
 | ||
|  | namespace UnityEditor.Timeline | ||
|  | { | ||
|  |     abstract class Manipulator | ||
|  |     { | ||
|  |         int m_Id; | ||
|  | 
 | ||
|  |         protected virtual bool MouseDown(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool MouseDrag(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool MouseWheel(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool MouseUp(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool DoubleClick(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool KeyDown(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool KeyUp(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool ContextClick(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool ValidateCommand(Event evt, WindowState state) { return false; } | ||
|  |         protected virtual bool ExecuteCommand(Event evt, WindowState state) { return false; } | ||
|  | 
 | ||
|  |         public virtual void Overlay(Event evt, WindowState state) { } | ||
|  | 
 | ||
|  |         public bool HandleEvent(WindowState state) | ||
|  |         { | ||
|  |             Event currentEvent = Event.current; | ||
|  |             var type = currentEvent.GetTypeForControl(m_Id); | ||
|  |             return HandleEvent(type, currentEvent, state); | ||
|  |         } | ||
|  | 
 | ||
|  |         public bool HandleEvent(EventType type, WindowState state) | ||
|  |         { | ||
|  |             Event currentEvent = Event.current; | ||
|  |             return HandleEvent(type, currentEvent, state); | ||
|  |         } | ||
|  | 
 | ||
|  |         bool HandleEvent(EventType type, Event evt, WindowState state) | ||
|  |         { | ||
|  |             if (m_Id == 0) | ||
|  |                 m_Id = GUIUtility.GetPermanentControlID(); | ||
|  | 
 | ||
|  |             bool isHandled = false; | ||
|  | 
 | ||
|  |             switch (type) | ||
|  |             { | ||
|  |                 case EventType.ScrollWheel: | ||
|  |                     isHandled = MouseWheel(evt, state); | ||
|  |                     break; | ||
|  | 
 | ||
|  |                 case EventType.MouseUp: | ||
|  |                 { | ||
|  |                     if (GUIUtility.hotControl == m_Id) | ||
|  |                     { | ||
|  |                         isHandled = MouseUp(evt, state); | ||
|  | 
 | ||
|  |                         GUIUtility.hotControl = 0; | ||
|  |                         evt.Use(); | ||
|  |                     } | ||
|  |                 } | ||
|  |                 break; | ||
|  | 
 | ||
|  |                 case EventType.MouseDown: | ||
|  |                 { | ||
|  |                     isHandled = evt.clickCount < 2 ? MouseDown(evt, state) : DoubleClick(evt, state); | ||
|  | 
 | ||
|  |                     if (isHandled) | ||
|  |                         GUIUtility.hotControl = m_Id; | ||
|  |                 } | ||
|  |                 break; | ||
|  | 
 | ||
|  |                 case EventType.MouseDrag: | ||
|  |                 { | ||
|  |                     if (GUIUtility.hotControl == m_Id) | ||
|  |                         isHandled = MouseDrag(evt, state); | ||
|  |                 } | ||
|  |                 break; | ||
|  | 
 | ||
|  |                 case EventType.KeyDown: | ||
|  |                     isHandled = KeyDown(evt, state); | ||
|  |                     break; | ||
|  | 
 | ||
|  |                 case EventType.KeyUp: | ||
|  |                     isHandled = KeyUp(evt, state); | ||
|  |                     break; | ||
|  | 
 | ||
|  |                 case EventType.ContextClick: | ||
|  |                     isHandled = ContextClick(evt, state); | ||
|  |                     break; | ||
|  | 
 | ||
|  |                 case EventType.ValidateCommand: | ||
|  |                     isHandled = ValidateCommand(evt, state); | ||
|  |                     break; | ||
|  | 
 | ||
|  |                 case EventType.ExecuteCommand: | ||
|  |                     isHandled = ExecuteCommand(evt, state); | ||
|  |                     break; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (isHandled) | ||
|  |                 evt.Use(); | ||
|  | 
 | ||
|  |             return isHandled; | ||
|  |         } | ||
|  |     } | ||
|  | } |