mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-08-04 03:11:01 +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:
|
case NSEventType.KeyDown:
|
||||||
{
|
{
|
||||||
MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
|
MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
|
||||||
//var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
|
|
||||||
var isARepeat = Cocoa.SendBool(e, selIsARepeat);
|
var isARepeat = Cocoa.SendBool(e, selIsARepeat);
|
||||||
//GetKey(keyCode, modifierFlags, keyArgs);
|
|
||||||
Key key = MacOSKeyMap.GetKey(keyCode);
|
Key key = MacOSKeyMap.GetKey(keyCode);
|
||||||
|
|
||||||
OnKeyDown(key, isARepeat);
|
OnKeyDown(key, isARepeat);
|
||||||
|
@ -435,13 +433,18 @@ namespace OpenTK.Platform.MacOS
|
||||||
case NSEventType.KeyUp:
|
case NSEventType.KeyUp:
|
||||||
{
|
{
|
||||||
MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
|
MacOSKeyCode keyCode = (MacOSKeyCode)Cocoa.SendUshort(e, selKeyCode);
|
||||||
//var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
|
|
||||||
//GetKey(keyCode, modifierFlags, keyArgs);
|
|
||||||
Key key = MacOSKeyMap.GetKey(keyCode);
|
Key key = MacOSKeyMap.GetKey(keyCode);
|
||||||
OnKeyUp(key);
|
OnKeyUp(key);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NSEventType.FlagsChanged:
|
||||||
|
{
|
||||||
|
var modifierFlags = (NSEventModifierMask)Cocoa.SendUint(e, selModifierFlags);
|
||||||
|
UpdateModifierFlags(GetModifiers(modifierFlags));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NSEventType.MouseEntered:
|
case NSEventType.MouseEntered:
|
||||||
{
|
{
|
||||||
var eventTrackingArea = Cocoa.SendIntPtr(e, selTrackingArea);
|
var eventTrackingArea = Cocoa.SendIntPtr(e, selTrackingArea);
|
||||||
|
|
|
@ -150,6 +150,73 @@ namespace OpenTK.Platform
|
||||||
KeyUp(this, e);
|
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)
|
protected void OnMouseLeave(EventArgs e)
|
||||||
{
|
{
|
||||||
MouseLeave(this, e);
|
MouseLeave(this, e);
|
||||||
|
|
Loading…
Reference in a new issue