private static Vector3 PivotHandleGUI(Rect rect, Vector3 pivot, Quaternion rotation) { int controlID = GUIUtility.GetControlID(RectTool.s_PivotHandleHash, FocusType.Passive); EventType typeForControl = Event.current.GetTypeForControl(controlID); if (GUI.color.a > 0f || GUIUtility.hotControl == controlID) { EventType eventType = typeForControl; EditorGUI.BeginChangeCheck(); Vector3 a = Handles.Slider2D(controlID, pivot, rotation * Vector3.forward, rotation * Vector3.right, rotation * Vector3.up, HandleUtility.GetHandleSize(pivot) * 0.1f, new Handles.DrawCapFunction(RectHandles.PivotCap), Vector2.zero); if (eventType == EventType.MouseDown && GUIUtility.hotControl == controlID) { RectTransformSnapping.CalculatePivotSnapValues(rect, pivot, rotation); } if (EditorGUI.EndChangeCheck()) { Vector2 vector = Quaternion.Inverse(rotation) * (a - pivot); vector.x /= rect.width; vector.y /= rect.height; Vector2 vector2 = new Vector2(-rect.x / rect.width, -rect.y / rect.height); Vector2 vector3 = vector2 + vector; Vector2 snapDistance = HandleUtility.GetHandleSize(pivot) * 0.05f * new Vector2(1f / rect.width, 1f / rect.height); vector3 = RectTransformSnapping.SnapToGuides(vector3, snapDistance); vector = vector3 - vector2; vector.x *= rect.width; vector.y *= rect.height; pivot += rotation * vector; } } ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingPivot", typeForControl); return(pivot); }
static Vector3 PivotHandleGUI(Rect rect, Vector3 pivot, Quaternion rotation) { int id = GUIUtility.GetControlID(s_PivotHandleHash, FocusType.Passive); EventType eventType = Event.current.GetTypeForControl(id); if (GUI.color.a > 0 || GUIUtility.hotControl == id) { EventType typeBefore = eventType; EditorGUI.BeginChangeCheck(); Vector3 newPivot = Handles.Slider2D(id, pivot, rotation * Vector3.forward, rotation * Vector3.right, rotation * Vector3.up, HandleUtility.GetHandleSize(pivot) * 0.1f, RectHandles.PivotHandleCap, Vector2.zero); if (typeBefore == EventType.MouseDown && GUIUtility.hotControl == id) { RectTransformSnapping.CalculatePivotSnapValues(rect, pivot, rotation); } if (EditorGUI.EndChangeCheck()) { Vector2 offset = Quaternion.Inverse(rotation) * (newPivot - pivot); offset.x /= rect.width; offset.y /= rect.height; Vector2 pivotCoordBefore = new Vector2(-rect.x / rect.width, -rect.y / rect.height); Vector2 pivotCoordAfter = pivotCoordBefore + offset; Vector2 snapSize = HandleUtility.GetHandleSize(pivot) * RectTransformSnapping.kSnapThreshold * new Vector2(1 / rect.width, 1 / rect.height); pivotCoordAfter = RectTransformSnapping.SnapToGuides(pivotCoordAfter, snapSize); offset = (pivotCoordAfter - pivotCoordBefore); offset.x *= rect.width; offset.y *= rect.height; pivot += rotation * offset; } } ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp(kChangingPivot, eventType); return(pivot); }