Catch key repeats for non-char keys
This commit is contained in:
parent
6ae21d6581
commit
141205acc4
18
src/rcore.c
18
src/rcore.c
|
|
@ -5324,6 +5324,16 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i
|
||||||
{
|
{
|
||||||
if (key < 0) return; // Security check, macOS fn key generates -1
|
if (key < 0) return; // Security check, macOS fn key generates -1
|
||||||
|
|
||||||
|
// Check if there is space available in the key queue
|
||||||
|
if (CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE &&
|
||||||
|
(action == GLFW_PRESS || action == GLFW_REPEAT) &&
|
||||||
|
!IsKeyPressed(key))
|
||||||
|
{
|
||||||
|
// Add character to the queue
|
||||||
|
CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = key;
|
||||||
|
CORE.Input.Keyboard.keyPressedQueueCount++;
|
||||||
|
}
|
||||||
|
|
||||||
// WARNING: GLFW could return GLFW_REPEAT, we need to consider it as 1
|
// WARNING: GLFW could return GLFW_REPEAT, we need to consider it as 1
|
||||||
// to work properly with our implementation (IsKeyDown/IsKeyUp checks)
|
// to work properly with our implementation (IsKeyDown/IsKeyUp checks)
|
||||||
if (action == GLFW_RELEASE) CORE.Input.Keyboard.currentKeyState[key] = 0;
|
if (action == GLFW_RELEASE) CORE.Input.Keyboard.currentKeyState[key] = 0;
|
||||||
|
|
@ -5335,14 +5345,6 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i
|
||||||
((key == KEY_NUM_LOCK) && ((mods & GLFW_MOD_NUM_LOCK) > 0))) CORE.Input.Keyboard.currentKeyState[key] = 1;
|
((key == KEY_NUM_LOCK) && ((mods & GLFW_MOD_NUM_LOCK) > 0))) CORE.Input.Keyboard.currentKeyState[key] = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Check if there is space available in the key queue
|
|
||||||
if ((CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE) && (action == GLFW_PRESS))
|
|
||||||
{
|
|
||||||
// Add character to the queue
|
|
||||||
CORE.Input.Keyboard.keyPressedQueue[CORE.Input.Keyboard.keyPressedQueueCount] = key;
|
|
||||||
CORE.Input.Keyboard.keyPressedQueueCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the exit key to set close window
|
// Check the exit key to set close window
|
||||||
if ((key == CORE.Input.Keyboard.exitKey) && (action == GLFW_PRESS)) glfwSetWindowShouldClose(CORE.Window.handle, GLFW_TRUE);
|
if ((key == CORE.Input.Keyboard.exitKey) && (action == GLFW_PRESS)) glfwSetWindowShouldClose(CORE.Window.handle, GLFW_TRUE);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user