keyboardProc function
void
keyboardProc(
- dynamic event
Implementation
void keyboardProc(dynamic event) {
final eventAddr = ffi.Pointer<bindings.KeyboardEvent>.fromAddress(event);
final vkCode = eventAddr.ref.vkCode;
final pressed = eventAddr.ref.eventType == bindings.KeyboardEventType.KeyDown
? 0xffffffff
: 0;
if (vkCode == bindings.HidListenerKeycodes.VK_LMENU) _lAltPressed = pressed;
if (vkCode == bindings.HidListenerKeycodes.VK_RMENU) _rAltPressed = pressed;
if (vkCode == bindings.HidListenerKeycodes.VK_LCONTROL) {
_lControlPressed = pressed;
}
if (vkCode == bindings.HidListenerKeycodes.VK_RCONTROL) {
_rControlPressed = pressed;
}
if (vkCode == bindings.HidListenerKeycodes.VK_LWIN) _rMetaPressed = pressed;
if (vkCode == bindings.HidListenerKeycodes.VK_RWIN) _rMetaPressed = pressed;
if (vkCode == bindings.HidListenerKeycodes.VK_LSHIFT) {
_lShiftPressed = pressed;
}
if (vkCode == bindings.HidListenerKeycodes.VK_RSHIFT) {
_rShiftPressed = pressed;
}
final altModifiers =
(RawKeyEventDataWindows.modifierAlt & (_lAltPressed | _rAltPressed)) |
(RawKeyEventDataWindows.modifierLeftAlt & _lAltPressed) |
(RawKeyEventDataWindows.modifierRightAlt & _rAltPressed);
final controlModifiers = (RawKeyEventDataWindows.modifierControl &
(_lControlPressed | _rControlPressed)) |
(RawKeyEventDataWindows.modifierLeftControl & _lControlPressed) |
(RawKeyEventDataWindows.modifierRightControl & _rControlPressed);
final metaModifiers =
(RawKeyEventDataWindows.modifierLeftMeta & _lMetaPressed) |
(RawKeyEventDataWindows.modifierRightMeta & _rMetaPressed);
final shiftModifiers = (RawKeyEventDataWindows.modifierShift &
(_lShiftPressed | _rShiftPressed)) |
(RawKeyEventDataWindows.modifierLeftShift & _lShiftPressed) |
(RawKeyEventDataWindows.modifierRightShift);
final modifiers =
altModifiers | controlModifiers | metaModifiers | shiftModifiers;
final data = RawKeyEventDataWindows(keyCode: vkCode, modifiers: modifiers);
final RawKeyEvent rawEvent;
if (pressed == 0xffffffff) {
rawEvent = RawKeyDownEvent(data: data);
} else {
rawEvent = RawKeyUpEvent(data: data);
}
for (var listener in keyboardListeners.values) {
listener(rawEvent);
}
}