/// <summary> /// Process events for Mouse or Touch input. /// </summary> /// <param name="inputPos">location of cursor</param> /// <param name="inputPressed">down this frame</param> /// <param name="inputReleased">up this frame</param> /// <param name="inputMoved">cursor in a different location</param> /// <param name="lastOver">last element that the cursor was over, ref is saved here for next update</param> void updateInputPoint(Vector2 inputPos, bool inputPressed, bool inputReleased, bool inputMoved, ref Element lastOver) { var over = hit(inputPos); CurrentlyOver = over; if (over != null) { handleMouseWheel(over); } if (inputPressed) { pressed = true; updateInputDown(inputPos, over); } if (inputMoved) { DragAndDropSystem.UpdateDrag(inputPos); updateInputMoved(inputPos, over, lastOver); } if (inputReleased) { pressed = false; updateInputReleased(inputPos); } lastOver = over; }
/// <summary> /// Mouse or touch is being released this frame. /// </summary> /// <param name="inputPos">location under cursor</param> void updateInputReleased(Vector2 inputPos) { for (var i = _inputFocusListeners.Count - 1; i >= 0; i--) { ((IInputListener)_inputFocusListeners[i]).onMouseUp(_inputFocusListeners[i].stageToLocalCoordinates(inputPos)); if (DragAndDropSystem.DraggedElement != null) { IDropTarget myResult = CurrentlyOver as IDropTarget; if (myResult != null && myResult.CanAccept(DragAndDropSystem.DraggedElement)) { DragAndDropSystem.AcceptElement(myResult); } } } _inputFocusListeners.Clear(); }
/// <summary> /// Mouse or touch is being moved. /// </summary> /// <param name="inputPos">location of cursor</param> /// <param name="over">element under cursor</param> /// <param name="lastOver">element that was previously under the cursor</param> void updateInputMoved(Vector2 inputPos, Element over, Element lastOver) { for (var i = _inputFocusListeners.Count - 1; i >= 0; i--) { ((IInputListener)_inputFocusListeners[i]).onMouseMoved(_inputFocusListeners[i].stageToLocalCoordinates(inputPos)); } if (pressed) { if (over != null) { IDraggableElement myOver = over as IDraggableElement; if (myOver != null) { DragAndDropSystem.StartDrag(inputPos, this, myOver); } } } if (over != lastOver) { (over as IInputListener)?.onMouseEnter(); (lastOver as IInputListener)?.onMouseExit(); } }
/// <summary> /// this should be called when the Component is removed to ensure all objects are freed /// </summary> public void dispose() { root.clear(); DragAndDropSystem.ResetDragged(); }