public void OnPressedMouseDown(IInspector setInspector, IDrawer overControl) { if (overControl != null) { var e = Event.current; MouseDownPos = e.mousePosition; var overField = overControl as IFieldDrawer; if (overField != null && overField.CanReadFromFieldWithoutSideEffects) { MouseDownOverDrawerValues = overControl.GetValues(); } else { MouseDownOverDrawerValues = ArrayPool <object> .ZeroSizeArray; } var setDraggingPrefixOfControl = overControl as IDraggablePrefix; if (setDraggingPrefixOfControl != null && setDraggingPrefixOfControl.DraggingPrefix) { draggingPrefixOfDrawer = setDraggingPrefixOfControl; draggingPrefixOfDrawer.OnPrefixDragStart(e); } } }
public static float GetMouseDelta([NotNull] this IDraggablePrefix subject, [NotNull] Event inputEvent, Vector2 mouseDownPosition) { var delta = inputEvent.mousePosition.x - mouseDownPosition.x; // In default Unity Inspector Control / Cmd is used to lower the drag sensitivity, // but in Power Inspector that is already used for snapping, so we use alt instead. if (inputEvent.alt) { return(delta * 0.25f); } if (inputEvent.shift) { return(delta * 4f); } return(delta); }
/// <summary> /// Clears this object to its blank/initial state. /// This should be called each time the left mouse button is released. /// </summary> /// <param name="clearDragAndDropObjectReferences"> True to also clear DragAndDropObjectReferences. </param> public void Clear(bool clearDragAndDropObjectReferences) { #if DEV_MODE && DEBUG_CLEAR if (mouseDownOverDrawer != null || Platform.Active.GUI.DragAndDropObjectReferences.Length > 0) { Debug.Log("MouseDownInfo.Clear called with clearDragAndDropObjectReferences=" + StringUtils.ToColorizedString(clearDragAndDropObjectReferences)); } #endif #if DEV_MODE && DEBUG_SET_MOUSE_DOWN_OVER_CONTROL if (mouseDownOverDrawer != null) { Debug.Log("mouseDownOverDrawer = " + StringUtils.Null + "(via Clear)"); } #endif mouseDownOverDrawer = null; draggingPrefixOfDrawer = null; inspector = null; IsClick = false; MouseButtonIsDown = false; MouseDownEventWasUsed = true; mouseoveredInspectorLeftDuringDrag = false; reordering.Clear(); PrefixResizeUtility.NowResizing = null; // TO DO: use a delegate to reduce dependencies if (clearDragAndDropObjectReferences) { #if DEV_MODE && PI_ASSERTATIONS if (Event.current != null && Event.current.rawType == EventType.DragExited) { Debug.LogWarning("MouseDownInfo.Clear called with clearDragAndDropObjectReferences=" + StringUtils.True + " and EventType=" + StringUtils.Green("DragExited") + ". This could break drag n drop between EditorWindows."); } #endif Platform.Active.GUI.DragAndDropObjectReferences = ArrayPool <Object> .ZeroSizeArray; } #if DEV_MODE && PI_ASSERTATIONS else if (Event.current == null || Event.current.rawType != EventType.DragExited && Platform.Active.GUI.DragAndDropObjectReferences.Length > 0) { Debug.LogWarning("MouseDownInfo.Clear called with clearDragAndDropObjectReferences=" + StringUtils.False + " and Event=" + StringUtils.ToString(Event.current) + ". Should probably clear them?"); } #endif }