예제 #1
0
        private void OnReceiveMouseData(RawInputMouseData data)
        {
            _count++;
            var mouse = data.Mouse;

            logToUi.AddLog(
                $"Mouse: {_count}, flags={mouse.Flags}, x={mouse.LastX}, y={mouse.LastY}, buttons={mouse.Buttons}"
                );
        }
예제 #2
0
        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);
        }
예제 #3
0
    public void ParseMouseGestures(RawInputMouseData data)
    {
        bool HasFlag(RawMouseButtonFlags flag) => data.Mouse.Buttons.HasFlag(flag);

        if (HasFlag(RawMouseButtonFlags.Button4Down))
        {
            HandleGesture(MouseButtonGesture.Create(MouseButton.XButton1));
        }
        else if (HasFlag(RawMouseButtonFlags.Button5Down))
        {
            HandleGesture(MouseButtonGesture.Create(MouseButton.XButton2));
        }
        else if (HasFlag(RawMouseButtonFlags.LeftButtonDown))
        {
            HandleGesture(MouseButtonGesture.Create(MouseButton.Left));
        }
        else if (HasFlag(RawMouseButtonFlags.RightButtonDown))
        {
            HandleGesture(MouseButtonGesture.Create(MouseButton.Right));
        }
        else if (HasFlag(RawMouseButtonFlags.MiddleButtonDown))
        {
            HandleGesture(MouseButtonGesture.Create(MouseButton.Middle));
        }

        if (data.Mouse.LastX != 0)
        {
            var delta = data.Mouse.LastX / 500.0f;
            _mouseXAxis = MathUtils.Clamp01(_mouseXAxis + delta);
            HandleGesture(MouseAxisGesture.Create(MouseAxis.X, _mouseXAxis, delta));
        }

        if (data.Mouse.LastY != 0)
        {
            var delta = data.Mouse.LastY / 500.0f;
            _mouseYAxis = MathUtils.Clamp01(_mouseYAxis + delta);
            HandleGesture(MouseAxisGesture.Create(MouseAxis.Y, _mouseYAxis, delta));
        }

        if (data.Mouse.ButtonData != 0)
        {
            var delta = data.Mouse.ButtonData / (120.0f * 50.0f);
            if (HasFlag(RawMouseButtonFlags.MouseWheel))
            {
                _mouseWheelAxis = MathUtils.Clamp01(_mouseWheelAxis + delta);
                HandleGesture(MouseAxisGesture.Create(MouseAxis.MouseWheel, _mouseWheelAxis, delta));
            }
            else if (HasFlag(RawMouseButtonFlags.MouseHorizontalWheel))
            {
                _mouseHorizontalWheelAxis = MathUtils.Clamp01(_mouseHorizontalWheelAxis + delta);
                HandleGesture(MouseAxisGesture.Create(MouseAxis.MouseHorizontalWheel, _mouseHorizontalWheelAxis, delta));
            }
        }
    }
        /// <summary>
        /// Sets text box text and tag.
        /// </summary>
        /// <param name="key"></param>
        private void SetTextBoxText(string text, RawInputData data)
        {
            Application.Current.Dispatcher.BeginInvoke(
                DispatcherPriority.Background,
                new Action(() =>
            {
                bool save = true;
                var txt   = GetActiveTextBox();

                if (txt == null)
                {
                    return;
                }

                // Ignore first
                if (txt == _lastActiveTextBox)
                {
                    string path = "null";

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

                    var button = new RawInputButton
                    {
                        DevicePath  = path,
                        DeviceType  = RawDeviceType.None,
                        MouseButton = RawMouseButton.None,
                        KeyboardKey = Keys.None
                    };

                    if (data is RawInputMouseData)
                    {
                        RawInputMouseData mouse = data as RawInputMouseData;
                        button.MouseButton      = GetButtonFromFlags(mouse.Mouse.Buttons);
                        button.DeviceType       = RawDeviceType.Mouse;
                    }
                    else if (data is RawInputKeyboardData)
                    {
                        RawInputKeyboardData kb = data as RawInputKeyboardData;
                        button.KeyboardKey      = (Keys)kb.Keyboard.VirutalKey;
                        button.DeviceType       = RawDeviceType.Keyboard;

                        if (button.KeyboardKey == Keys.Escape)
                        {
                            save = false;
                        }
                    }

                    // Save?
                    if (save)
                    {
                        txt.ToolTip = text;
                        txt.Text    = text;

                        var t            = txt.Tag as JoystickButtons;
                        t.RawInputButton = button;
                        t.BindNameRi     = text;
                    }
                    else
                    {
                        txt.ToolTip = "";
                        txt.Text    = "";
                    }

                    // Unfocus textbox
                    Keyboard.ClearFocus();
                    FocusManager.SetFocusedElement(Application.Current.Windows[0], null);
                    _lastActiveTextBox = null;
                }
                else
                {
                    _lastActiveTextBox = txt;
                }
            }));
        }
예제 #5
0
        private void HandleMouseData(RawInputData data, RawInputMouseData mouseData)
        {
            // Only submit mouse movement 25 times per second but increment the delta
            // This can create a small inaccuracy of course, but Artemis is not a shooter :')
            if (mouseData.Mouse.Buttons == RawMouseButtonFlags.None)
            {
                _mouseDeltaX += mouseData.Mouse.LastX;
                _mouseDeltaY += mouseData.Mouse.LastY;
                if (DateTime.Now - _lastMouseUpdate < TimeSpan.FromMilliseconds(40))
                {
                    return;
                }
            }

            ArtemisDevice device     = null;
            string        identifier = data.Device?.DevicePath;

            if (identifier != null)
            {
                try
                {
                    device = _inputService.GetDeviceByIdentifier(this, identifier, InputDeviceType.Keyboard);
                }
                catch (Exception e)
                {
                    _logger.Warning(e, "Failed to retrieve input device by its identifier");
                }
            }

            // Debug.WriteLine($"Buttons: {data.Mouse.Buttons}, Data: {data.Mouse.ButtonData}, Flags: {data.Mouse.Flags}, XY: {data.Mouse.LastX},{data.Mouse.LastY}");

            // Movement
            if (mouseData.Mouse.Buttons == RawMouseButtonFlags.None)
            {
                Win32Point cursorPosition = GetCursorPosition();
                OnMouseMoveDataReceived(device, cursorPosition.X, cursorPosition.Y, _mouseDeltaX, _mouseDeltaY);
                _mouseDeltaX     = 0;
                _mouseDeltaY     = 0;
                _lastMouseUpdate = DateTime.Now;
                return;
            }

            // Now we know its not movement, let the core know there is an identifier so it can store new identifications if applicable
            if (identifier != null)
            {
                OnIdentifierReceived(identifier, InputDeviceType.Mouse);
            }

            // Scrolling
            if (mouseData.Mouse.ButtonData != 0)
            {
                if (mouseData.Mouse.Buttons == RawMouseButtonFlags.MouseWheel)
                {
                    OnMouseScrollDataReceived(device, MouseScrollDirection.Vertical, mouseData.Mouse.ButtonData);
                }
                else if (mouseData.Mouse.Buttons == RawMouseButtonFlags.MouseHorizontalWheel)
                {
                    OnMouseScrollDataReceived(device, MouseScrollDirection.Horizontal, mouseData.Mouse.ButtonData);
                }
                return;
            }

            // Button presses
            MouseButton button = MouseButton.Left;
            bool        isDown = false;

            // Left
            if (DetermineMouseButton(mouseData, RawMouseButtonFlags.LeftButtonDown, RawMouseButtonFlags.LeftButtonUp, ref isDown))
            {
                button = MouseButton.Left;
            }
            // Middle
            else if (DetermineMouseButton(mouseData, RawMouseButtonFlags.MiddleButtonDown, RawMouseButtonFlags.MiddleButtonUp, ref isDown))
            {
                button = MouseButton.Middle;
            }
            // Right
            else if (DetermineMouseButton(mouseData, RawMouseButtonFlags.RightButtonDown, RawMouseButtonFlags.RightButtonUp, ref isDown))
            {
                button = MouseButton.Right;
            }
            // Button 4
            else if (DetermineMouseButton(mouseData, RawMouseButtonFlags.Button4Down, RawMouseButtonFlags.Button4Up, ref isDown))
            {
                button = MouseButton.Button4;
            }
            else if (DetermineMouseButton(mouseData, RawMouseButtonFlags.Button5Down, RawMouseButtonFlags.Button5Up, ref isDown))
            {
                button = MouseButton.Button5;
            }

            OnMouseButtonDataReceived(device, button, isDown);
        }