summaryrefslogtreecommitdiffhomepage
path: root/src/platforms
diff options
context:
space:
mode:
authorArthur <[email protected]>2024-04-15 23:09:20 +0200
committerGitHub <[email protected]>2024-04-15 23:09:20 +0200
commite42f9263b81e925d4a8023673c5983e83ae094f7 (patch)
treeefa69f0695033fa87e8d0b115c8faa2fa777cab5 /src/platforms
parent4e37c8e370f9c3846dc1136047809ed5d8886a90 (diff)
downloadraylib-e42f9263b81e925d4a8023673c5983e83ae094f7.tar.gz
raylib-e42f9263b81e925d4a8023673c5983e83ae094f7.zip
Fix GetKeyPressed for PLATFORM_DESKTOP_SDL (#3869)
The key handling in PLATFORM_DESKTOP_SDL was faulty in two ways, which led to GetKeyPressed returning incorrect data. CORE.Input.Keyboard.keyPressedQueue was updated only on SDL_TEXTINPUT, meaning only text characters were registered as a pressed key, but not function keys (eg. tab, backspace...). Also on such event, both CORE.Input.Keyboard.keyPressedQueue and CORE.Input.Keyboard.charPressedQueue were assigned the key's corresponding codepoint, when CORE.Input.Keyboard.keyPressedQueue should get the raylib keycode instead. CORE.Input.Keyboard.keyPressedQueue is now updated on SDL_KEYDOWN event instead. Co-authored-by: Arthur <[email protected]>
Diffstat (limited to 'src/platforms')
-rw-r--r--src/platforms/rcore_desktop_sdl.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/platforms/rcore_desktop_sdl.c b/src/platforms/rcore_desktop_sdl.c
index 1aea6854..9dfdd53a 100644
--- a/src/platforms/rcore_desktop_sdl.c
+++ b/src/platforms/rcore_desktop_sdl.c
@@ -1131,7 +1131,17 @@ void PollInputEvents(void)
case SDL_KEYDOWN:
{
KeyboardKey key = ConvertScancodeToKey(event.key.keysym.scancode);
- if (key != KEY_NULL) CORE.Input.Keyboard.currentKeyState[key] = 1;
+
+ if (key != KEY_NULL) {
+ // If key was up, add it to the key pressed queue
+ if ((CORE.Input.Keyboard.currentKeyState[key] == 0) && (CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE))
+ {
+ CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = key;
+ CORE.Input.Keyboard.keyPressedQueueCount++;
+ }
+
+ CORE.Input.Keyboard.currentKeyState[key] = 1;
+ }
if (event.key.repeat) CORE.Input.Keyboard.keyRepeatInFrame[key] = 1;
@@ -1154,14 +1164,6 @@ void PollInputEvents(void)
int codepointSize = 0;
- // Check if there is space available in the key queue
- if (CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE)
- {
- // Add character (key) to the queue
- CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = GetCodepointNext(event.text.text, &codepointSize);
- CORE.Input.Keyboard.keyPressedQueueCount++;
- }
-
// Check if there is space available in the queue
if (CORE.Input.Keyboard.charPressedQueueCount < MAX_CHAR_PRESSED_QUEUE)
{