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); } }
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)); } } } }