keyboardProc function

void keyboardProc(
  1. 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);
  }
}