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;
 | |
|         }
 | |
|     }
 | |
| }
 |