mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-02-24 03:56:48 +00:00
[Mac] Report KeyDown/Up events for modifier flags
This commit is contained in:
parent
2e9ff4d8b9
commit
41276361fb
|
@ -411,9 +411,7 @@ namespace OpenTK.Platform.MacOS
|
|||
case NSEventType.KeyDown:
|
||||
{
|
||||
MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
|
||||
//var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
|
||||
var isARepeat = Cocoa.SendBool(e, selIsARepeat);
|
||||
//GetKey(keyCode, modifierFlags, keyArgs);
|
||||
Key key = MacOSKeyMap.GetKey(keyCode);
|
||||
|
||||
OnKeyDown(key, isARepeat);
|
||||
|
@ -435,13 +433,18 @@ namespace OpenTK.Platform.MacOS
|
|||
case NSEventType.KeyUp:
|
||||
{
|
||||
MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
|
||||
//var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
|
||||
//GetKey(keyCode, modifierFlags, keyArgs);
|
||||
Key key = MacOSKeyMap.GetKey(keyCode);
|
||||
OnKeyUp(key);
|
||||
}
|
||||
break;
|
||||
|
||||
case NSEventType.FlagsChanged:
|
||||
{
|
||||
var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
|
||||
UpdateModifierFlags(GetModifiers(modifierFlags));
|
||||
}
|
||||
break;
|
||||
|
||||
case NSEventType.MouseEntered:
|
||||
{
|
||||
var eventTrackingArea = Cocoa.SendIntPtr(e, selTrackingArea);
|
||||
|
|
|
@ -150,6 +150,73 @@ namespace OpenTK.Platform
|
|||
KeyUp(this, e);
|
||||
}
|
||||
|
||||
/// \internal
|
||||
/// <summary>
|
||||
/// Call this method to simulate KeyDown/KeyUp events
|
||||
/// on platforms that do not generate key events for
|
||||
/// modifier flags (e.g. Mac/Cocoa).
|
||||
/// Note: this method does not distinguish between the
|
||||
/// left and right variants of modifier keys.
|
||||
/// </summary>
|
||||
/// <param name="mods">Mods.</param>
|
||||
protected void UpdateModifierFlags(KeyModifiers mods)
|
||||
{
|
||||
bool alt = (mods & KeyModifiers.Alt) != 0;
|
||||
bool control = (mods & KeyModifiers.Control) != 0;
|
||||
bool shift = (mods & KeyModifiers.Shift) != 0;
|
||||
|
||||
if (alt)
|
||||
{
|
||||
OnKeyDown(Key.AltLeft, KeyboardState[Key.AltLeft]);
|
||||
OnKeyDown(Key.AltRight, KeyboardState[Key.AltLeft]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (KeyboardState[Key.AltLeft])
|
||||
{
|
||||
OnKeyUp(Key.AltLeft);
|
||||
}
|
||||
if (KeyboardState[Key.AltRight])
|
||||
{
|
||||
OnKeyUp(Key.AltRight);
|
||||
}
|
||||
}
|
||||
|
||||
if (control)
|
||||
{
|
||||
OnKeyDown(Key.ControlLeft, KeyboardState[Key.AltLeft]);
|
||||
OnKeyDown(Key.ControlRight, KeyboardState[Key.AltLeft]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (KeyboardState[Key.ControlLeft])
|
||||
{
|
||||
OnKeyUp(Key.ControlLeft);
|
||||
}
|
||||
if (KeyboardState[Key.ControlRight])
|
||||
{
|
||||
OnKeyUp(Key.ControlRight);
|
||||
}
|
||||
}
|
||||
|
||||
if (shift)
|
||||
{
|
||||
OnKeyDown(Key.ShiftLeft, KeyboardState[Key.AltLeft]);
|
||||
OnKeyDown(Key.ShiftRight, KeyboardState[Key.AltLeft]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (KeyboardState[Key.ShiftLeft])
|
||||
{
|
||||
OnKeyUp(Key.ShiftLeft);
|
||||
}
|
||||
if (KeyboardState[Key.ShiftRight])
|
||||
{
|
||||
OnKeyUp(Key.ShiftRight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnMouseLeave(EventArgs e)
|
||||
{
|
||||
MouseLeave(this, e);
|
||||
|
|
Loading…
Reference in a new issue