mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-07-23 13:58:22 +00:00
Merge pull request #202 from Frassle/issue201
[Input] Legacy keyboard respects the KeyRepeat field. Fixes #201.
This commit is contained in:
commit
a43181a802
|
@ -70,7 +70,7 @@ namespace Examples.Tests
|
||||||
: base(800, 600, GraphicsMode.Default)
|
: base(800, 600, GraphicsMode.Default)
|
||||||
{
|
{
|
||||||
VSync = VSyncMode.On;
|
VSync = VSyncMode.On;
|
||||||
Keyboard.KeyRepeat = true;
|
Keyboard.KeyRepeat = false;
|
||||||
KeyDown += KeyDownHandler;
|
KeyDown += KeyDownHandler;
|
||||||
KeyUp += KeyUpHandler;
|
KeyUp += KeyUpHandler;
|
||||||
KeyPress += KeyPressHandler;
|
KeyPress += KeyPressHandler;
|
||||||
|
@ -159,13 +159,17 @@ namespace Examples.Tests
|
||||||
p = PointToScreen(p);
|
p = PointToScreen(p);
|
||||||
OpenTK.Input.Mouse.SetPosition(p.X, p.Y);
|
OpenTK.Input.Mouse.SetPosition(p.X, p.Y);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Key.R:
|
||||||
|
Keyboard.KeyRepeat = !Keyboard.KeyRepeat;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!keyboard_keys.ContainsKey(e.Key))
|
if (!keyboard_keys.ContainsKey(e.Key))
|
||||||
{
|
{
|
||||||
keyboard_keys.Add(e.Key, 0);
|
keyboard_keys.Add(e.Key, 0);
|
||||||
}
|
}
|
||||||
keyboard_keys[e.Key] = e.IsRepeat ? 1 : 0;
|
keyboard_keys[e.Key] = keyboard_keys[e.Key] + 1;
|
||||||
keyboard_modifiers = e.Modifiers;
|
keyboard_modifiers = e.Modifiers;
|
||||||
keyboard_state = e.Keyboard;
|
keyboard_state = e.Keyboard;
|
||||||
}
|
}
|
||||||
|
@ -183,7 +187,7 @@ namespace Examples.Tests
|
||||||
{
|
{
|
||||||
legacy_keyboard_keys.Add(e.Key, 0);
|
legacy_keyboard_keys.Add(e.Key, 0);
|
||||||
}
|
}
|
||||||
legacy_keyboard_keys[e.Key] = e.IsRepeat ? 1 : 0;
|
legacy_keyboard_keys[e.Key] = legacy_keyboard_keys[e.Key] + 1;
|
||||||
legacy_keyboard_modifiers = e.Modifiers;
|
legacy_keyboard_modifiers = e.Modifiers;
|
||||||
legacy_keyboard_state = e.Keyboard;
|
legacy_keyboard_state = e.Keyboard;
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,8 +210,16 @@ namespace OpenTK.Input
|
||||||
internal void HandleKeyDown(object sender, KeyboardKeyEventArgs e)
|
internal void HandleKeyDown(object sender, KeyboardKeyEventArgs e)
|
||||||
{
|
{
|
||||||
state = e.Keyboard;
|
state = e.Keyboard;
|
||||||
|
// KeyRepeat IsRepeat KeyDown
|
||||||
|
// False False True
|
||||||
|
// False True False
|
||||||
|
// True False True
|
||||||
|
// True True True
|
||||||
|
if (this.KeyRepeat || !e.IsRepeat)
|
||||||
|
{
|
||||||
KeyDown(this, e);
|
KeyDown(this, e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal void HandleKeyUp(object sender, KeyboardKeyEventArgs e)
|
internal void HandleKeyUp(object sender, KeyboardKeyEventArgs e)
|
||||||
{
|
{
|
||||||
|
@ -219,36 +227,6 @@ namespace OpenTK.Input
|
||||||
KeyUp(this, e);
|
KeyUp(this, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if false
|
|
||||||
internal void SetKey(Key key, uint scancode, KeyModifiers mods, bool pressed)
|
|
||||||
{
|
|
||||||
if (state[key] != pressed || KeyRepeat)
|
|
||||||
{
|
|
||||||
// limit scancode to 8bits, otherwise the assignment
|
|
||||||
// below will crash randomly
|
|
||||||
scancode &= 0xff;
|
|
||||||
|
|
||||||
keys[(int)key] = scancodes[scancode] = state;
|
|
||||||
|
|
||||||
if (state && KeyDown != null)
|
|
||||||
{
|
|
||||||
|
|
||||||
args.Key = key;
|
|
||||||
args.ScanCode = scancode;
|
|
||||||
args.Modifiers = mods;
|
|
||||||
KeyDown(this, args);
|
|
||||||
}
|
|
||||||
else if (!state && KeyUp != null)
|
|
||||||
{
|
|
||||||
args.Key = key;
|
|
||||||
args.ScanCode = scancode;
|
|
||||||
args.Modifiers = mods;
|
|
||||||
KeyUp(this, args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue