private void OnMouseState(object sender, MouseEventArgs mouseEventArgs) { var previousState = MouseState.LeftButton; MouseState.X = mouseEventArgs.X; MouseState.Y = mouseEventArgs.Y; MouseState.LeftButton = (_mouseDownButtonsState & MouseButtons.Left) == MouseButtons.Left ? ButtonState.Pressed : ButtonState.Released; MouseState.MiddleButton = (_mouseDownButtonsState & MouseButtons.Middle) == MouseButtons.Middle ? ButtonState.Pressed : ButtonState.Released; MouseState.RightButton = (_mouseDownButtonsState & MouseButtons.Right) == MouseButtons.Right ? ButtonState.Pressed : ButtonState.Released; MouseState.ScrollWheelValue += mouseEventArgs.Delta; TouchLocationState?touchState = null; if (MouseState.LeftButton == ButtonState.Pressed) { if (previousState == ButtonState.Released) { touchState = TouchLocationState.Pressed; } else { touchState = TouchLocationState.Moved; } } else if (previousState == ButtonState.Pressed) { touchState = TouchLocationState.Released; } if (touchState.HasValue) { TouchPanelState.AddEvent(0, touchState.Value, new Vector2(MouseState.X, MouseState.Y), true); } }
private void UpdateMouseState() { // If we call the form client functions before the form has // been made visible it will cause the wrong window size to // be applied at startup. if (!Form.Visible) { return; } var clientPos = Form.PointToClient(Control.MousePosition); var withinClient = Form.ClientRectangle.Contains(clientPos); var buttons = Control.MouseButtons; var previousState = MouseState.LeftButton; MouseState.X = clientPos.X; MouseState.Y = clientPos.Y; MouseState.LeftButton = (buttons & MouseButtons.Left) == MouseButtons.Left ? ButtonState.Pressed : ButtonState.Released; MouseState.MiddleButton = (buttons & MouseButtons.Middle) == MouseButtons.Middle ? ButtonState.Pressed : ButtonState.Released; MouseState.RightButton = (buttons & MouseButtons.Right) == MouseButtons.Right ? ButtonState.Pressed : ButtonState.Released; // Don't process touch state if we're not active // and the mouse is within the client area. if (!_platform.IsActive || !withinClient) { if (MouseState.LeftButton == ButtonState.Pressed) { // Release mouse TouchLocation var touchX = MathHelper.Clamp(MouseState.X, 0, Form.ClientRectangle.Width - 1); var touchY = MathHelper.Clamp(MouseState.Y, 0, Form.ClientRectangle.Height - 1); TouchPanelState.AddEvent(0, TouchLocationState.Released, new Vector2(touchX, touchY), true); } return; } TouchLocationState?touchState = null; if (MouseState.LeftButton == ButtonState.Pressed) { if (previousState == ButtonState.Released) { touchState = TouchLocationState.Pressed; } else { touchState = TouchLocationState.Moved; } } else if (previousState == ButtonState.Pressed) { touchState = TouchLocationState.Released; } if (touchState.HasValue) { TouchPanelState.AddEvent(0, touchState.Value, new Vector2(MouseState.X, MouseState.Y), true); } }
private void Canvas_TouchEnd(TouchEvent e) { foreach (var touch in e.changedTouches) { var x = (int)(touch.clientX - _canvas.offsetLeft); var y = (int)(touch.clientY - _canvas.offsetTop); TouchPanelState.AddEvent(touch.identifier.As <int>(), TouchLocationState.Released, new Vector2(x, y)); } }
public void BasicTapGesture() { _tps.EnabledGestures = GestureType.Tap; var pos = new Vector2(100, 150); _tps.AddEvent(1, TouchLocationState.Pressed, pos); TouchPanelState.CurrentTimestamp = GameTimeForFrame(1); Assert.False(_tps.IsGestureAvailable); _tps.AddEvent(1, TouchLocationState.Released, pos); TouchPanelState.CurrentTimestamp = GameTimeForFrame(2); Assert.True(_tps.IsGestureAvailable); var gesture = _tps.ReadGesture(); Assert.False(_tps.IsGestureAvailable); Assert.AreEqual(GestureType.Tap, gesture.GestureType); Assert.AreEqual(pos, gesture.Position); }
public void PressedStartsATouch() { var pos = new Vector2(100, 50); _tps.AddEvent(1, TouchLocationState.Pressed, pos); var state = _tps.GetState(); Assert.AreEqual(1, state.Count); var touch = state[0]; Assert.AreEqual(TouchLocationState.Pressed, touch.State); Assert.AreEqual(pos, touch.Position); }