Added keyboard state feedback to lua input.get() function for Qt GUI. Returned key codes are slightly different but at least it does something. Issue #536.

This commit is contained in:
harry 2022-08-21 22:43:35 -04:00
parent 7806b24388
commit 77b18ba989
3 changed files with 122 additions and 2 deletions

View File

@ -158,6 +158,15 @@ int getKeyState(int k)
return 0; return 0;
} }
const uint8_t *QtSDL_getKeyboardState( int *bufSize )
{
if (bufSize != nullptr)
{
*bufSize = SDL_NUM_SCANCODES;
}
return g_keyState;
}
//static int //static int
//_keyonly(int a) //_keyonly(int a)
//{ //{
@ -1909,7 +1918,7 @@ static void UpdateFKB(void)
} }
} }
const uint8 *getFamilyKeyboardState(void) const uint8_t *getFamilyKeyboardState(void)
{ {
return fkbkeys; return fkbkeys;
} }

View File

@ -148,7 +148,8 @@ int saveInputSettingsToFile( const char *fileBase = NULL );
int loadInputSettingsFromFile( const char *filename = NULL ); int loadInputSettingsFromFile( const char *filename = NULL );
void toggleFamilyKeyboardFunc(void); void toggleFamilyKeyboardFunc(void);
bool isFamilyKeyboardActv(void); bool isFamilyKeyboardActv(void);
const uint8 *getFamilyKeyboardState(void); const uint8_t *getFamilyKeyboardState(void);
const uint8_t *QtSDL_getKeyboardState( int *bufSize );
#endif #endif

View File

@ -54,6 +54,9 @@ extern TASEDITOR_LUA taseditor_lua;
#ifdef __SDL__ #ifdef __SDL__
#ifdef __QT_DRIVER__ #ifdef __QT_DRIVER__
#include "drivers/Qt/sdl.h"
#include "drivers/Qt/main.h"
#include "drivers/Qt/input.h"
#include "drivers/Qt/fceuWrapper.h" #include "drivers/Qt/fceuWrapper.h"
#include "drivers/Qt/TasEditor/selection.h" #include "drivers/Qt/TasEditor/selection.h"
#include "drivers/Qt/TasEditor/laglog.h" #include "drivers/Qt/TasEditor/laglog.h"
@ -2638,6 +2641,113 @@ static int input_get(lua_State *L) {
} }
} }
} }
#elif defined(__QT_DRIVER__)
// Qt/SDL
{
const uint8_t *keyBuf = QtSDL_getKeyboardState(nullptr);
if (keyBuf)
{
int i=0;
char keyName[64];
const char *keyOut = nullptr;
for (int i=0; i<SDL_NUM_SCANCODES; i++)
{
if (keyBuf[i])
{
SDL_Keycode k = SDL_GetKeyFromScancode( static_cast<SDL_Scancode>(i) );
const char* name = SDL_GetKeyName(k);
//printf("Key:%i '%s'\n", i, name);
if ( isalpha(name[0]) || isdigit(name[0]) )
{ // If name starts with letters or number, copy name without spaces
int ii=0, jj=0;
while (name[ii] != 0)
{
if ( isalpha(name[ii]) || isdigit(name[ii]) || (name[ii] == '_') )
{
keyName[jj] = name[ii]; jj++;
}
ii++;
}
keyName[jj] = 0;
keyOut = keyName;
}
else
{ // Handle special char names
switch (name[0])
{
case '[':
keyOut = "LeftBracket";
break;
case ']':
keyOut = "RightBracket";
break;
case '{':
keyOut = "LeftBrace";
break;
case '}':
keyOut = "RightBrace";
break;
case ',':
keyOut = "Comma";
break;
case '.':
keyOut = "Period";
break;
case '~':
keyOut = "Tilde";
break;
case '`':
keyOut = "Backtick";
break;
case '|':
keyOut = "VerticalBar";
break;
case '/':
keyOut = "Slash";
break;
case '\\':
keyOut = "BackSlash";
break;
case '+':
keyOut = "Plus";
break;
case '=':
keyOut = "Equals";
break;
case '_':
keyOut = "Underscore";
break;
case '-':
keyOut = "Minus";
break;
case ';':
keyOut = "SemiColon";
break;
case ':':
keyOut = "Colon";
break;
case '\'':
case '\"':
keyOut = "Quote";
break;
default:
keyOut = name;
break;
}
}
lua_pushboolean(L, true);
lua_setfield(L, -2, keyOut);
}
}
}
}
#else #else
//SDL TODO: implement this for keyboard!! //SDL TODO: implement this for keyboard!!
#endif #endif