diff options
| author | Ushio <ushiostarfish@gmail.com> | 2019-11-24 20:46:00 +0900 |
|---|---|---|
| committer | Ray <raysan5@gmail.com> | 2019-11-24 12:46:00 +0100 |
| commit | ae301a1d233d9fcde676e0572cc2eab9206a8ad2 (patch) | |
| tree | b3658c0519a97ab0b0cf06c49b9e60f673461432 /src/core.c | |
| parent | b132ae099b325f4f10e947af1016293a8b6d3256 (diff) | |
| download | raylib-ae301a1d233d9fcde676e0572cc2eab9206a8ad2.tar.gz raylib-ae301a1d233d9fcde676e0572cc2eab9206a8ad2.zip | |
add api FIFO based character input. (#1012)
* add api FIFO based character input.
* rename input character functions
* replace tab to space x4 #1012
Diffstat (limited to 'src/core.c')
| -rw-r--r-- | src/core.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -353,6 +353,9 @@ static char currentKeyState[512] = { 0 }; // Registers current frame key s static int lastKeyPressed = -1; // Register last key pressed static int exitKey = KEY_ESCAPE; // Default exit key (ESC) +static unsigned int inputCharacterQueue[16] = { 0 }; // Input characters stream queue as produced by the operating system text input system +static int inputCharacterQueueCount = 0; // Input characters stream queue count + #if defined(PLATFORM_RPI) // NOTE: For keyboard we will use the standard input (but reconfigured...) static struct termios defaultKeyboardSettings; // Used to store default keyboard settings @@ -2226,6 +2229,32 @@ int GetKeyPressed(void) return lastKeyPressed; } +bool IsCharAvailable() +{ + return 0 < inputCharacterQueueCount; +} +unsigned int GetNextChar() +{ + if (inputCharacterQueueCount <= 0) + { + return 0; + } + // take a character from the head + unsigned int c = inputCharacterQueue[0]; + + // shift elements 1 step toward the head. + inputCharacterQueueCount--; + for (int i = 0; i < inputCharacterQueueCount; i++) + { + inputCharacterQueue[i] = inputCharacterQueue[i + 1]; + } + + // this is not required, but this can keep clean memory + inputCharacterQueue[inputCharacterQueueCount] = 0; + + return c; +} + // Set a custom key to exit program // NOTE: default exitKey is ESCAPE void SetExitKey(int key) @@ -3932,6 +3961,16 @@ static void CharCallback(GLFWwindow *window, unsigned int key) // http://www.glfw.org/docs/latest/input_guide.html#input_char lastKeyPressed = key; + + // If the capacity over, is will waste the old one. + static const int CAPACITY = sizeof(inputCharacterQueue) / sizeof(inputCharacterQueue[0]); + if (CAPACITY <= inputCharacterQueueCount) + { + GetNextChar(); + } + + // add to queue + inputCharacterQueue[inputCharacterQueueCount++] = key; } // GLFW3 CursorEnter Callback, when cursor enters the window |
