/// <summary> /// Mouse or touch is down this frame. /// </summary> /// <param name="inputPos">location of cursor</param> /// <param name="over">element under cursor</param> void updateInputDown(Vector2 inputPos, Element over) { // lose keyboard focus if we click outside of the keyboardFocusElement if (_keyboardFocusElement != null && over != _keyboardFocusElement) { setKeyboardFocus(null); } // if we are over an element and the left button was pressed we notify our listener if (over is IInputListener) { var elementLocal = over.stageToLocalCoordinates(inputPos); var listener = over as IInputListener; // add the listener to be notified for all onMouseDown and onMouseUp events if (listener.onMousePressed(elementLocal)) { _inputFocusListeners.Add(over); } } }
public void update() { if (_isGamepadFocusEnabled) { updateGamepadState(); } updateKeyboardState(); // consolidate input checks so that we can add touch input easily later var leftMouseButtonDown = Input.leftMouseButtonDown; var leftMouseButtonPressed = Input.leftMouseButtonPressed; var leftMouseButtonReleased = Input.leftMouseButtonReleased; var currentMousePosition = getMousePosition(); var didMouseMove = false; if (_lastMousePosition != currentMousePosition) { didMouseMove = true; _lastMousePosition = currentMousePosition; } #if !FNA // convert touch to mouse if (Input.touch.isConnected && Input.touch.currentTouches.Count > 0) { var touch = Input.touch.currentTouches[0]; leftMouseButtonDown = touch.State == Microsoft.Xna.Framework.Input.Touch.TouchLocationState.Pressed || touch.State == Microsoft.Xna.Framework.Input.Touch.TouchLocationState.Moved; leftMouseButtonPressed = touch.State == Microsoft.Xna.Framework.Input.Touch.TouchLocationState.Pressed; leftMouseButtonReleased = touch.State == Microsoft.Xna.Framework.Input.Touch.TouchLocationState.Released || touch.State == Microsoft.Xna.Framework.Input.Touch.TouchLocationState.Invalid; currentMousePosition = touch.Position; didMouseMove = touch.State == Microsoft.Xna.Framework.Input.Touch.TouchLocationState.Moved; if (didMouseMove) { _lastMousePosition = currentMousePosition; } } #endif var mousePos = screenToStageCoordinates(currentMousePosition); // mouse moved and released events are only sent to inputFocusListeners if ((leftMouseButtonDown && !leftMouseButtonPressed) || leftMouseButtonReleased) { if (leftMouseButtonDown && didMouseMove) { for (var i = _inputFocusListeners.Count - 1; i >= 0; i--) { ((IInputListener)_inputFocusListeners[i]).onMouseMoved(_inputFocusListeners[i].stageToLocalCoordinates(mousePos)); } } else if (leftMouseButtonReleased) { for (var i = _inputFocusListeners.Count - 1; i >= 0; i--) { ((IInputListener)_inputFocusListeners[i]).onMouseUp(_inputFocusListeners[i].stageToLocalCoordinates(mousePos)); } _inputFocusListeners.Clear(); } } else { var over = hit(mousePos); if (over != null) { handleMouseWheel(over); } #if !FNA // if we have a touch screen we short circuit enter/exit by setting the mouseOverElement as the hit element if (Input.touch.isConnected && over != null) { _mouseOverElement = over; } #endif // lose keyboard focus if we click outside of the keyboardFocusElement if (leftMouseButtonPressed && _keyboardFocusElement != null && over != _keyboardFocusElement) { setKeyboardFocus(null); } // if we are over the same element and the left button was pressed we notify our listener if (over != null && over == _mouseOverElement) { var elementLocal = _mouseOverElement.stageToLocalCoordinates(mousePos); if (leftMouseButtonPressed && _mouseOverElement is IInputListener) { var listener = _mouseOverElement as IInputListener; // add the listener to be notified for all onMouseDown and onMouseUp events if (listener.onMousePressed(elementLocal)) { _inputFocusListeners.Add(_mouseOverElement); } } } else // not a mouse pressed event { // enter event if (over != null && over is IInputListener) { var listener = over as IInputListener; listener.onMouseEnter(); } // exit event if (_mouseOverElement != null && _mouseOverElement is IInputListener) { var listener = _mouseOverElement as IInputListener; listener.onMouseExit(); } } _mouseOverElement = over; } }
public void update() { updateKeyboardState(); var currentMousePosition = entity != null ? Input.scaledMousePosition : Input.rawMousePosition.ToVector2(); var didMouseMove = false; if (_lastMousePosition != currentMousePosition) { didMouseMove = true; _lastMousePosition = currentMousePosition; } var mousePos = screenToStageCoordinates(currentMousePosition); // mouse moved and released events are only sent to inputFocusListeners if ((Input.leftMouseButtonDown && !Input.leftMouseButtonPressed) || Input.leftMouseButtonReleased) { if (Input.leftMouseButtonDown && didMouseMove) { for (var i = _inputFocusListeners.Count - 1; i >= 0; i--) { ((IInputListener)_inputFocusListeners[i]).onMouseMoved(_inputFocusListeners[i].stageToLocalCoordinates(mousePos)); } } else if (Input.leftMouseButtonReleased) { for (var i = _inputFocusListeners.Count - 1; i >= 0; i--) { ((IInputListener)_inputFocusListeners[i]).onMouseUp(_inputFocusListeners[i].stageToLocalCoordinates(mousePos)); } _inputFocusListeners.Clear(); } } else { var over = hit(mousePos); // lose keyboard focus if we click outside of the keyboardFocusElement if (Input.leftMouseButtonPressed && _keyboardFocusElement != null && over != _keyboardFocusElement) { setKeyboardFocus(null); } // if we are over the same element and the left button was pressed we notify our listener if (over != null && over == _mouseOverElement) { var elementLocal = _mouseOverElement.stageToLocalCoordinates(mousePos); if (Input.leftMouseButtonPressed && _mouseOverElement is IInputListener) { var listener = _mouseOverElement as IInputListener; // add the listener to be notified for all onMouseDown and onMouseUp events for the specified pointer and button if (listener.onMousePressed(elementLocal)) { _inputFocusListeners.Add(_mouseOverElement); } } } else // not a mouse pressed event { // enter event if (over != null && over is IInputListener) { var listener = over as IInputListener; listener.onMouseEnter(); } // exit event if (_mouseOverElement != null && _mouseOverElement is IInputListener) { var listener = _mouseOverElement as IInputListener; listener.onMouseExit(); } } _mouseOverElement = over; } }