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