123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using UnityEngine;
- namespace UnityEditor.U2D.Animation
- {
- internal class Slider2D
- {
- private static Vector2 s_CurrentMousePosition;
- private static Vector2 s_DragStartScreenPosition;
- private static Vector2 s_DragScreenOffset;
- private static double s_Time;
- public static Vector2 Do(int controlID, Vector2 position, Handles.CapFunction drawCapFunction = null)
- {
- EventType type = Event.current.GetTypeForControl(controlID);
- switch (type)
- {
- case EventType.MouseDown:
- if (Event.current.button == 0 && HandleUtility.nearestControl == controlID && !Event.current.alt)
- {
- s_Time = EditorApplication.timeSinceStartup;
- GUIUtility.keyboardControl = controlID;
- GUIUtility.hotControl = controlID;
- s_CurrentMousePosition = Event.current.mousePosition;
- s_DragStartScreenPosition = Event.current.mousePosition;
- Vector2 b = HandleUtility.WorldToGUIPoint(position);
- s_DragScreenOffset = s_CurrentMousePosition - b;
- Event.current.Use();
- }
- break;
- case EventType.MouseUp:
- if (GUIUtility.hotControl == controlID && (Event.current.button == 0 || Event.current.button == 2))
- {
- GUIUtility.hotControl = 0;
- Event.current.Use();
- }
- break;
- case EventType.MouseDrag:
- if (GUIUtility.hotControl == controlID)
- {
- s_CurrentMousePosition = Event.current.mousePosition;
- float screenDisplacement = (s_CurrentMousePosition - s_DragStartScreenPosition).magnitude;
- Vector2 center = position;
- Vector2 screenPosition = s_CurrentMousePosition - s_DragScreenOffset;
- position = Handles.inverseMatrix.MultiplyPoint(screenPosition);
- float displacement = (center - position).magnitude;
- if (!Mathf.Approximately(displacement, 0f) && (EditorApplication.timeSinceStartup - s_Time > 0.15 || screenDisplacement >= 10f))
- GUI.changed = true;
- Event.current.Use();
- }
- break;
- case EventType.KeyDown:
- if (GUIUtility.hotControl == controlID && Event.current.keyCode == KeyCode.Escape)
- {
- position = Handles.inverseMatrix.MultiplyPoint(s_DragStartScreenPosition - s_DragScreenOffset);
- GUIUtility.hotControl = 0;
- GUI.changed = true;
- Event.current.Use();
- }
- break;
- case EventType.Layout:
- if (drawCapFunction != null)
- drawCapFunction(controlID, position, Quaternion.identity, 1f, EventType.Layout);
- break;
- case EventType.Repaint:
- if (drawCapFunction != null)
- drawCapFunction(controlID, position, Quaternion.identity, 1f, EventType.Repaint);
- break;
- }
- return position;
- }
- }
- }
|