// Get first pressed button from flags
 private RawMouseButton GetButtonFromFlags(RawMouseButtonFlags flags)
 {
     if (flags.HasFlag(RawMouseButtonFlags.LeftButtonDown))
     {
         return(RawMouseButton.LeftButton);
     }
     else if (flags.HasFlag(RawMouseButtonFlags.RightButtonDown))
     {
         return(RawMouseButton.RightButton);
     }
     else if (flags.HasFlag(RawMouseButtonFlags.MiddleButtonDown))
     {
         return(RawMouseButton.MiddleButton);
     }
     else if (flags.HasFlag(RawMouseButtonFlags.Button4Down))
     {
         return(RawMouseButton.Button4);
     }
     else if (flags.HasFlag(RawMouseButtonFlags.Button5Down))
     {
         return(RawMouseButton.Button5);
     }
     else
     {
         return(RawMouseButton.None);
     }
 }
        private bool DetermineMouseButton(RawInputMouseData data, RawMouseButtonFlags downButton, RawMouseButtonFlags upButton, ref bool isDown)
        {
            if (data.Mouse.Buttons == downButton || data.Mouse.Buttons == upButton)
            {
                isDown = data.Mouse.Buttons == downButton;
                return(true);
            }

            isDown = false;
            return(false);
        }
Beispiel #3
0
 // Get first pressed button from flags
 private RawMouseButton GetButtonFromFlags(RawMouseButtonFlags flags)
 {
     if (flags.HasFlag(RawMouseButtonFlags.LeftButtonDown))
         return RawMouseButton.LeftButton;
     else if (flags.HasFlag(RawMouseButtonFlags.RightButtonDown))
         return RawMouseButton.RightButton;
     else if (flags.HasFlag(RawMouseButtonFlags.MiddleButtonDown))
         return RawMouseButton.MiddleButton;
     else if (flags.HasFlag(RawMouseButtonFlags.Button4Down))
         return RawMouseButton.Button4;
     else if (flags.HasFlag(RawMouseButtonFlags.Button5Down))
         return RawMouseButton.Button5;
     else
         return RawMouseButton.None;
 }
Beispiel #4
0
        public void WndProcReceived(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            const int WM_INPUT = 0x00FF;

            if (msg == WM_INPUT)
            {
                var data = RawInputData.FromHandle(lParam);

                string path = "null";

                if (data != null && data.Device != null && data.Device.DevicePath != null)
                {
                    path = data.Device.DevicePath;
                }

                switch (data)
                {
                case RawInputMouseData mouse:
                    // Handle mouse button presses
                    if (mouse.Mouse.Buttons != RawMouseButtonFlags.None)
                    {
                        RawMouseButtonFlags flags = mouse.Mouse.Buttons;

                        // Multiple buttons can be pressed/released in single event so check them all
                        if (flags.HasFlag(RawMouseButtonFlags.LeftButtonDown) || flags.HasFlag(RawMouseButtonFlags.LeftButtonUp))
                        {
                            foreach (var jsButton in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && btn.RawInputButton.MouseButton == RawMouseButton.LeftButton))
                            {
                                HandleRawInputButton(jsButton, flags.HasFlag(RawMouseButtonFlags.LeftButtonDown));
                            }
                        }

                        if (flags.HasFlag(RawMouseButtonFlags.RightButtonDown) || flags.HasFlag(RawMouseButtonFlags.RightButtonUp))
                        {
                            foreach (var jsButton in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && btn.RawInputButton.MouseButton == RawMouseButton.RightButton))
                            {
                                HandleRawInputButton(jsButton, flags.HasFlag(RawMouseButtonFlags.RightButtonDown));
                            }
                        }

                        if (flags.HasFlag(RawMouseButtonFlags.MiddleButtonDown) || flags.HasFlag(RawMouseButtonFlags.MiddleButtonUp))
                        {
                            foreach (var jsButton in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && btn.RawInputButton.MouseButton == RawMouseButton.MiddleButton))
                            {
                                HandleRawInputButton(jsButton, flags.HasFlag(RawMouseButtonFlags.MiddleButtonDown));
                            }
                        }

                        if (flags.HasFlag(RawMouseButtonFlags.Button4Down) || flags.HasFlag(RawMouseButtonFlags.Button4Up))
                        {
                            foreach (var jsButton in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && btn.RawInputButton.MouseButton == RawMouseButton.Button4))
                            {
                                HandleRawInputButton(jsButton, flags.HasFlag(RawMouseButtonFlags.Button4Down));
                            }
                        }

                        if (flags.HasFlag(RawMouseButtonFlags.Button5Down) || flags.HasFlag(RawMouseButtonFlags.Button5Up))
                        {
                            foreach (var jsButton in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && btn.RawInputButton.MouseButton == RawMouseButton.Button5))
                            {
                                HandleRawInputButton(jsButton, flags.HasFlag(RawMouseButtonFlags.Button5Down));
                            }
                        }
                    }

                    // Handle position
                    if (mouse.Mouse.Flags.HasFlag(RawMouseFlags.MoveAbsolute))
                    {
                        // Lightgun
                        foreach (var gun in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && (btn.InputMapping == InputMapping.P1LightGun || btn.InputMapping == InputMapping.P2LightGun)))
                        {
                            HandleRawInputGun(gun, mouse.Mouse.LastX, mouse.Mouse.LastY, true);
                        }
                    }
                    else if (mouse.Mouse.Flags.HasFlag(RawMouseFlags.MoveRelative))
                    {
                        // Windows mouse cursor
                        foreach (var gun in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == "Windows Mouse Cursor" && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && (btn.InputMapping == InputMapping.P1LightGun || btn.InputMapping == InputMapping.P2LightGun)))
                        {
                            HandleRawInputGun(gun, Cursor.Position.X, Cursor.Position.Y, false);
                        }

                        // Other relative movement mouse like device
                        foreach (var gun in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Mouse && (btn.InputMapping == InputMapping.P1LightGun || btn.InputMapping == InputMapping.P2LightGun)))
                        {
                            int calcX = 0;
                            int calcY = 0;

                            if (gun.InputMapping == InputMapping.P1LightGun)
                            {
                                calcX = Math.Min(Math.Max(_lastPosP1X + mouse.Mouse.LastX, _windowLocationX), _windowLocationX + _windowWidth);
                                calcY = Math.Min(Math.Max(_lastPosP1Y + mouse.Mouse.LastY, _windowLocationY), _windowLocationY + _windowHeight);

                                _lastPosP1X = calcX;
                                _lastPosP1Y = calcY;
                            }
                            else
                            {
                                calcX = Math.Min(Math.Max(_lastPosP2X + mouse.Mouse.LastX, _windowLocationX), _windowLocationX + _windowWidth);
                                calcY = Math.Min(Math.Max(_lastPosP2Y + mouse.Mouse.LastY, _windowLocationY), _windowLocationY + _windowHeight);

                                _lastPosP2X = calcX;
                                _lastPosP2Y = calcY;
                            }

                            HandleRawInputGun(gun, calcX, calcY, false);
                        }
                    }

                    break;

                case RawInputKeyboardData keyboard:
                    if ((Keys)keyboard.Keyboard.VirutalKey == Keys.ControlKey && !keyboard.Keyboard.Flags.HasFlag(RawKeyboardFlags.Up))
                    {
                        dontClip = true;
                    }
                    else
                    {
                        dontClip = false;
                    }

                    foreach (var jsButton in _joystickButtons.Where(btn => btn.RawInputButton.DevicePath == path && btn.RawInputButton.DeviceType == RawDeviceType.Keyboard && btn.RawInputButton.KeyboardKey == (Keys)keyboard.Keyboard.VirutalKey))
                    {
                        HandleRawInputButton(jsButton, !keyboard.Keyboard.Flags.HasFlag(RawKeyboardFlags.Up));
                    }

                    break;
                }
            }
        }