private void graphicsControl_KeyUp(object sender, KeyEventArgs e) { if (this.activeState.EngineUserInput) { Key inputKey = e.KeyCode.ToDualityKey(); this.inputKeyPressed[(int)inputKey] = false; } }
private void graphicsControl_KeyDown(object sender, KeyEventArgs e) { if (!this.RenderableControl.Focused) { this.RenderableControl.Focus(); } if (e.KeyCode == Keys.Escape || e.KeyCode == Keys.Tab || e.KeyCode == Keys.Alt) { this.inputMouseCapture = false; } if (this.activeState.EngineUserInput) { Key inputKey = e.KeyCode.ToDualityKey(); this.inputKeyPressed[(int)inputKey] = true; } }
bool IKeyboardInputSource.this[Key key] { get { return this.inputKeyPressed[(int)key]; } }
static ExtMethodsVirtualKeyCode() { virtualKeyToDualityKey = new Dictionary <VirtualKeyCode, DualityKey>(); // Build a mapping from virtual keycodes to physical scancodes foreach (VirtualKeyCode virtualKey in Enum.GetValues(typeof(VirtualKeyCode))) { uint scancode = NativeMethods.MapVirtualKey((uint)virtualKey, NativeMethods.KeyMapType.MAPVK_VK_TO_VSC); if (scancode == 0) { continue; } DualityKey dualityKey = ParseScanCode(scancode); if (dualityKey == DualityKey.Unknown) { continue; } virtualKeyToDualityKey[virtualKey] = dualityKey; } // Override some specific keys where we really need the virtual key information virtualKeyToDualityKey[VirtualKeyCode.None] = DualityKey.Unknown; virtualKeyToDualityKey[VirtualKeyCode.Return] = DualityKey.Enter; virtualKeyToDualityKey[VirtualKeyCode.ShiftKey] = DualityKey.ShiftLeft; virtualKeyToDualityKey[VirtualKeyCode.LShiftKey] = DualityKey.ShiftLeft; virtualKeyToDualityKey[VirtualKeyCode.RShiftKey] = DualityKey.ShiftRight; virtualKeyToDualityKey[VirtualKeyCode.ControlKey] = DualityKey.ControlLeft; virtualKeyToDualityKey[VirtualKeyCode.LControlKey] = DualityKey.ControlLeft; virtualKeyToDualityKey[VirtualKeyCode.RControlKey] = DualityKey.ControlRight; virtualKeyToDualityKey[VirtualKeyCode.Menu] = DualityKey.AltLeft; virtualKeyToDualityKey[VirtualKeyCode.LMenu] = DualityKey.AltLeft; virtualKeyToDualityKey[VirtualKeyCode.RMenu] = DualityKey.AltRight; virtualKeyToDualityKey[VirtualKeyCode.NumPad0] = DualityKey.Keypad0; virtualKeyToDualityKey[VirtualKeyCode.NumPad1] = DualityKey.Keypad1; virtualKeyToDualityKey[VirtualKeyCode.NumPad2] = DualityKey.Keypad2; virtualKeyToDualityKey[VirtualKeyCode.NumPad3] = DualityKey.Keypad3; virtualKeyToDualityKey[VirtualKeyCode.NumPad4] = DualityKey.Keypad4; virtualKeyToDualityKey[VirtualKeyCode.NumPad5] = DualityKey.Keypad5; virtualKeyToDualityKey[VirtualKeyCode.NumPad6] = DualityKey.Keypad6; virtualKeyToDualityKey[VirtualKeyCode.NumPad7] = DualityKey.Keypad7; virtualKeyToDualityKey[VirtualKeyCode.NumPad8] = DualityKey.Keypad8; virtualKeyToDualityKey[VirtualKeyCode.NumPad9] = DualityKey.Keypad9; virtualKeyToDualityKey[VirtualKeyCode.Multiply] = DualityKey.KeypadMultiply; virtualKeyToDualityKey[VirtualKeyCode.Add] = DualityKey.KeypadAdd; virtualKeyToDualityKey[VirtualKeyCode.Subtract] = DualityKey.KeypadSubtract; virtualKeyToDualityKey[VirtualKeyCode.Divide] = DualityKey.KeypadDivide; virtualKeyToDualityKey[VirtualKeyCode.Decimal] = DualityKey.KeypadDecimal; virtualKeyToDualityKey[VirtualKeyCode.PageDown] = DualityKey.PageDown; virtualKeyToDualityKey[VirtualKeyCode.Back] = DualityKey.BackSpace; // // Note that the above virtual key mapping is by definition incomplete: // Virtual keys do not distinguish between left and right modifiers. // Therefore it is not possible to map from a virtual key to the correct // scancode in all cases. The only way around this would be to parse // scancodes directly. // // The reason we're preferring scancodes over virtual keys is detailed here: // https://github.com/AdamsLair/duality/issues/289#issuecomment-184367749 // }
bool IKeyboardInputSource.this[Key key] { get { return(this.inputKeyPressed[(int)key]); } }