add api FIFO based character input. (#1012)
* add api FIFO based character input. * rename input character functions * replace tab to space x4 #1012
This commit is contained in:
parent
b132ae099b
commit
ae301a1d23
2 changed files with 42 additions and 0 deletions
39
src/core.c
39
src/core.c
|
@ -353,6 +353,9 @@ static char currentKeyState[512] = { 0 }; // Registers current frame key s
|
||||||
static int lastKeyPressed = -1; // Register last key pressed
|
static int lastKeyPressed = -1; // Register last key pressed
|
||||||
static int exitKey = KEY_ESCAPE; // Default exit key (ESC)
|
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)
|
#if defined(PLATFORM_RPI)
|
||||||
// NOTE: For keyboard we will use the standard input (but reconfigured...)
|
// NOTE: For keyboard we will use the standard input (but reconfigured...)
|
||||||
static struct termios defaultKeyboardSettings; // Used to store default keyboard settings
|
static struct termios defaultKeyboardSettings; // Used to store default keyboard settings
|
||||||
|
@ -2226,6 +2229,32 @@ int GetKeyPressed(void)
|
||||||
return lastKeyPressed;
|
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
|
// Set a custom key to exit program
|
||||||
// NOTE: default exitKey is ESCAPE
|
// NOTE: default exitKey is ESCAPE
|
||||||
void SetExitKey(int key)
|
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
|
// http://www.glfw.org/docs/latest/input_guide.html#input_char
|
||||||
|
|
||||||
lastKeyPressed = key;
|
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
|
// GLFW3 CursorEnter Callback, when cursor enters the window
|
||||||
|
|
|
@ -978,6 +978,9 @@ RLAPI bool IsKeyUp(int key); // Detect if a key
|
||||||
RLAPI int GetKeyPressed(void); // Get latest key pressed
|
RLAPI int GetKeyPressed(void); // Get latest key pressed
|
||||||
RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
|
RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
|
||||||
|
|
||||||
|
RLAPI bool IsCharAvailable(); // Check if input character exists at least one in the internal input character stream. The characters are produced by the operating system text input system.
|
||||||
|
RLAPI unsigned int GetNextChar(); // Pull a input character from the the internal input character stream
|
||||||
|
|
||||||
// Input-related functions: gamepads
|
// Input-related functions: gamepads
|
||||||
RLAPI bool IsGamepadAvailable(int gamepad); // Detect if a gamepad is available
|
RLAPI bool IsGamepadAvailable(int gamepad); // Detect if a gamepad is available
|
||||||
RLAPI bool IsGamepadName(int gamepad, const char *name); // Check gamepad name (if available)
|
RLAPI bool IsGamepadName(int gamepad, const char *name); // Check gamepad name (if available)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue