예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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));
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }