summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core.c63
-rw-r--r--src/lua_core.c3
-rw-r--r--src/text.c1
3 files changed, 67 insertions, 0 deletions
diff --git a/src/core.c b/src/core.c
index 8a2d964..c3f24cf 100644
--- a/src/core.c
+++ b/src/core.c
@@ -1495,6 +1495,69 @@ int lcoreSetExitKey( lua_State *L ) {
}
/*
+> keyName = RL_GetKeyName( int key, int scancode )
+
+This function returns the name of the specified printable key, encoded as UTF-8.
+This is typically the character that key would produce without any modifier keys,
+intended for displaying key bindings to the user. For dead keys, it is typically
+the diacritic it would add to a character.
+
+Do not use this function for text input. You will break text input for many
+languages even if it happens to work for yours.
+
+If the key is KEY_UNKNOWN, the scancode is used to identify the key,
+otherwise the scancode is ignored. If you specify a non-printable key,
+or KEY_UNKNOWN and a scancode that maps to a non-printable key,
+this function returns nil but does not emit an error.
+
+- Failure return -1
+- Success return string or nil
+*/
+int lcoreGetKeyName( lua_State *L ) {
+ if ( !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
+ TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_GetKeyName( int key, int scancode )" );
+ lua_pushinteger( L, -1 );
+ return 1;
+ }
+ int scancode = lua_tointeger( L, -1 );
+ lua_pop( L, 1 );
+ int key = lua_tointeger( L, -1 );
+
+ const char *keyName = glfwGetKeyName( key, scancode );
+
+ if ( keyName != NULL ) {
+ lua_pushstring( L, keyName );
+ }
+ else {
+ lua_pushnil( L );
+ }
+
+ return 1;
+}
+
+/*
+> scancode = RL_GetKeyScancode( int key )
+
+This function returns the platform-specific scancode of the specified key.
+If the key is KEY_UNKNOWN or does not exist on the keyboard this method will return -1.
+
+- Failure return nil
+- Success return int
+*/
+int lcoreGetKeyScancode( lua_State *L ) {
+ if ( !lua_isnumber( L, -1 ) ) {
+ TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_GetKeyScancode( int key )" );
+ lua_pushnil( L );
+ return 1;
+ }
+ int scancode = glfwGetKeyScancode( lua_tointeger( L, -1 ) );
+
+ lua_pushinteger( L, scancode );
+
+ return 1;
+}
+
+/*
## Core - Input-related Gamepad
*/
diff --git a/src/lua_core.c b/src/lua_core.c
index 4f6dde8..da09eee 100644
--- a/src/lua_core.c
+++ b/src/lua_core.c
@@ -58,6 +58,7 @@ void defineGlobals() {
assignGlobalInt( LOG_FATAL, "LOG_FATAL" );
assignGlobalInt( LOG_NONE, "LOG_NONE" );
/* KeyboardKey */
+ assignGlobalInt( GLFW_KEY_UNKNOWN, "KEY_UNKNOWN" );
assignGlobalInt( KEY_NULL, "KEY_NULL" );
assignGlobalInt( KEY_APOSTROPHE, "KEY_APOSTROPHE" );
assignGlobalInt( KEY_COMMA, "KEY_COMMA" );
@@ -798,6 +799,8 @@ void luaRegister() {
lua_register( L, "RL_GetKeyPressed", lcoreGetKeyPressed );
lua_register( L, "RL_GetCharPressed", lcoreGetCharPressed );
lua_register( L, "RL_SetExitKey", lcoreSetExitKey );
+ lua_register( L, "RL_GetKeyName", lcoreGetKeyName );
+ lua_register( L, "RL_GetKeyScancode", lcoreGetKeyScancode );
/* Input-related Gamepad. */
lua_register( L, "RL_IsGamepadAvailable", lcoreIsGamepadAvailable );
lua_register( L, "RL_IsGamepadButtonPressed", lcoreIsGamepadButtonPressed );
diff --git a/src/text.c b/src/text.c
index 50a12b4..f5f8b68 100644
--- a/src/text.c
+++ b/src/text.c
@@ -112,6 +112,7 @@ int ltextLoadFontFromImage( lua_State *L ) {
break;
}
}
+
int firstChar = lua_tointeger( L, -1 );
lua_pop( L, 1 );
Color key = uluaGetColor( L );