private void KeyDown(object sender, KeyEventArgs e) { var menuHotkeys = this.hotkeys.Where(x => x.Hotkey.Key == e.Key).ToList(); if (menuHotkeys.Any()) { if (!this.keyDownStates.TryGetValue(e.Key, out var state) || state == false) { var pressArgs = new MenuInputEventArgs(e.Key, HotkeyFlags.Press); foreach (var menuHotkey in menuHotkeys.Where(x => (x.Flags & HotkeyFlags.Press) == HotkeyFlags.Press)) { menuHotkey.Execute(pressArgs); if (pressArgs.Handled) { break; } } } var downArgs = new MenuInputEventArgs(e.Key, HotkeyFlags.Down); foreach (var menuHotkey in menuHotkeys.Where(x => (x.Flags & HotkeyFlags.Down) == HotkeyFlags.Down)) { menuHotkey.Execute(downArgs); if (downArgs.Handled) { break; } } } this.keyDownStates[e.Key] = true; }
private void KeyUp(object sender, KeyEventArgs e) { this.keyDownStates[e.Key] = false; var pressArgs = new MenuInputEventArgs(e.Key, HotkeyFlags.Up); foreach (var menuHotkey in this.hotkeys.Where(x => x.Hotkey.Key == e.Key && (x.Flags & HotkeyFlags.Up) == HotkeyFlags.Up)) { menuHotkey.Execute(pressArgs); if (pressArgs.Handled) { break; } } }
private void MouseClick(object sender, MouseEventArgs e) { MouseButtons button; bool downEvent; if ((e.Buttons & MouseButtons.LeftDown) == MouseButtons.LeftDown) { button = MouseButtons.Left; downEvent = true; } else if ((e.Buttons & MouseButtons.RightDown) == MouseButtons.RightDown) { button = MouseButtons.Right; downEvent = true; } else if ((e.Buttons & MouseButtons.XButton1Down) == MouseButtons.XButton1Down) { button = MouseButtons.XButton1; downEvent = true; } else if ((e.Buttons & MouseButtons.XButton2Down) == MouseButtons.XButton2Down) { button = MouseButtons.XButton2; downEvent = true; } else if ((e.Buttons & MouseButtons.LeftUp) == MouseButtons.LeftUp) { button = MouseButtons.Left; downEvent = false; } else if ((e.Buttons & MouseButtons.RightUp) == MouseButtons.RightUp) { button = MouseButtons.Right; downEvent = false; } else if ((e.Buttons & MouseButtons.XButton1Up) == MouseButtons.XButton1Up) { button = MouseButtons.XButton1; downEvent = false; } else if ((e.Buttons & MouseButtons.XButton2Up) == MouseButtons.XButton2Up) { button = MouseButtons.XButton1; downEvent = false; } else { Log.Debug($"No button pressed in MouseClick event: {e.Buttons} ({e.Clicks})"); return; } var menuHotkeys = this.hotkeys.Where(x => x.Hotkey.MouseButton == button).ToList(); if (menuHotkeys.Any()) { var flag = downEvent ? HotkeyFlags.Down : HotkeyFlags.Up; var buttonArgs = new MenuInputEventArgs(button, flag); foreach (var menuHotkey in menuHotkeys.Where(x => (x.Flags & flag) == flag)) { menuHotkey.Execute(buttonArgs); if (buttonArgs.Handled) { break; } } } }
public void Execute(MenuInputEventArgs args) { // Log.Debug($"Hotkey: {this.Name} {this.Key}"); this.action(args); }