Exemplo n.º 1
0
        public void HandleButton(ButtonState buttonState, ButtonState lastState, MouseButtons buttons)
        {
            if (buttonState == ButtonState.Pressed && lastState == ButtonState.Released)
            {
                var ev = MouseDown;
                if (ev != null)
                {
                    ev(this, new GenericEventArgs <MouseButtons>(buttons));
                }

                InputOnMouseDown();
                ReversedWidgetsCopy.HandleMouseDown(buttons);
            }
            else if (buttonState == ButtonState.Released && lastState == ButtonState.Pressed)
            {
                var ev = MouseUp;
                if (ev != null)
                {
                    ev(this, new GenericEventArgs <MouseButtons>(buttons));
                }

                ReversedWidgetsCopy.HandleMouseUp(buttons);
            }
        }
Exemplo n.º 2
0
        public void UpdateInput()
        {
            if (MouseStateGetter != null)
            {
                var lastState = MouseState;

                MouseState    = MouseStateGetter();
                MousePosition = new Point(MouseState.X, MouseState.Y);

                if (SpriteBatchBeginParams.TransformMatrix != null)
                {
                    // Apply transform
                    var t = Vector2.Transform(
                        new Vector2(MousePosition.X, MousePosition.Y),
                        SpriteBatchBeginParams.InverseTransform);

                    MousePosition = new Point((int)t.X, (int)t.Y);
                }

                MouseWheel = MouseState.ScrollWheelValue;

                if (MouseState.X != lastState.X || MouseState.Y != lastState.Y)
                {
                    var ev = MouseMoved;
                    if (ev != null)
                    {
                        ev(this, new GenericEventArgs <Point>(MousePosition));
                    }

                    ReversedWidgetsCopy.HandleMouseMovement(MousePosition);
                }

                HandleButton(MouseState.LeftButton, lastState.LeftButton, MouseButtons.Left);
                HandleButton(MouseState.MiddleButton, lastState.MiddleButton, MouseButtons.Middle);
                HandleButton(MouseState.RightButton, lastState.RightButton, MouseButtons.Right);


                if (MouseWheel != lastState.ScrollWheelValue)
                {
                    var delta = MouseWheel - lastState.ScrollWheelValue;
                    var ev    = MouseWheelChanged;
                    if (ev != null)
                    {
                        ev(null, new GenericEventArgs <float>(delta));
                    }

                    if (_focusedWidget != null)
                    {
                        _focusedWidget.IterateFocusable(w => w.OnMouseWheel(delta));
                    }
                }
            }

            if (KeyboardStateGetter != null)
            {
                var lastKeyboardState = KeyboardState;
                KeyboardState = Keyboard.GetState();

                var pressedKeys = KeyboardState.GetPressedKeys();

                MyraEnvironment.ShowUnderscores = (MenuBar != null && MenuBar.OpenMenuItem != null) ||
                                                  KeyboardState.IsKeyDown(Keys.LeftAlt) ||
                                                  KeyboardState.IsKeyDown(Keys.RightAlt);

                for (var i = 0; i < pressedKeys.Length; ++i)
                {
                    var key = pressedKeys[i];
                    if (!lastKeyboardState.IsKeyDown(key))
                    {
                        var ev = KeyDown;
                        if (ev != null)
                        {
                            ev(this, new GenericEventArgs <Keys>(key));
                        }

                        if (MenuBar != null && MyraEnvironment.ShowUnderscores)
                        {
                            MenuBar.OnKeyDown(key);
                        }
                        else
                        {
                            if (_focusedWidget != null)
                            {
                                _focusedWidget.IterateFocusable(w => w.OnKeyDown(key));
                            }
                        }

                        if (key == Keys.Escape && ContextMenu != null)
                        {
                            HideContextMenu();
                        }
                    }
                }

                var lastPressedKeys = lastKeyboardState.GetPressedKeys();
                for (var i = 0; i < lastPressedKeys.Length; ++i)
                {
                    var key = lastPressedKeys[i];
                    if (!KeyboardState.IsKeyDown(key) && _focusedWidget != null)
                    {
                        // Key had been released
                        _focusedWidget.IterateFocusable(w => w.OnKeyUp(key));
                    }
                }
            }
        }