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