sdlxGetKeyboardState function keyboard

List<bool> sdlxGetKeyboardState()

Get a snapshot of the current state of the keyboard.

The pointer returned is a pointer to an internal SDL array. It will be valid for the whole lifetime of the application and should not be freed by the caller.

A array element with a value of true means that the key is pressed and a value of false means that it is not. Indexes into this array are obtained by using SDL_Scancode values.

Use SDL_PumpEvents() to update the state array.

This function gives you the current state after all events have been processed, so if a key or button has been pressed and released before you process events, then the pressed state will never show up in the SDL_GetKeyboardState() calls.

Note: This function doesn't take into account whether shift has been pressed or not.

\param numkeys if non-NULL, receives the length of the returned array. \returns a pointer to an array of key states.

\threadsafety It is safe to call this function from any thread.

\since This function is available since SDL 3.2.0.

\sa SDL_PumpEvents \sa SDL_ResetKeyboard

extern SDL_DECLSPEC const bool * SDLCALL SDL_GetKeyboardState(int *numkeys)

Implementation

List<bool> sdlxGetKeyboardState() {
  final result = <bool>[];
  final numkeysPointer = ffi.calloc<Int32>();
  final resultPointer = sdlGetKeyboardState(numkeysPointer);
  if (resultPointer != nullptr) {
    for (var i = 0; i < numkeysPointer.value; i++) {
      result.add(resultPointer[i] != 0);
    }
  }
  numkeysPointer.callocFree();
  return result;
}