stageToLocalCoordinates() public method

Transforms the specified point in the stage's coordinates to the element's local coordinate system.
public stageToLocalCoordinates ( Vector2 stageCoords ) : Vector2
stageCoords Vector2 Stage coords.
return Vector2
        /// <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);
                }
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
File: Stage.cs Progetto: DoctorB/Nez
        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;
            }
        }