testss
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user