mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 04:21:47 +00:00
Virtual Keyboard: use callback function to get/set cvar string
This commit is contained in:
parent
0486c25afd
commit
f270ac5579
3 changed files with 17 additions and 5 deletions
|
|
@ -542,6 +542,7 @@ extern INT32 menuKey; // keyboard key pressed for menu
|
|||
extern INT16 virtualKeyboard[5][NUMVIRTUALKEYSINROW];
|
||||
extern INT16 shift_virtualKeyboard[5][NUMVIRTUALKEYSINROW];
|
||||
|
||||
typedef const char *(*vkb_query_fn_t)(const char *replace);
|
||||
extern struct menutyping_s
|
||||
{
|
||||
boolean active; // Active
|
||||
|
|
@ -554,6 +555,7 @@ extern struct menutyping_s
|
|||
boolean keyboardcapslock;
|
||||
boolean keyboardshift;
|
||||
|
||||
vkb_query_fn_t queryfn; // callback on open and close
|
||||
char cache[MAXSTRINGLENGTH]; // cached string
|
||||
|
||||
} menutyping;
|
||||
|
|
@ -682,7 +684,7 @@ void M_PlayMenuJam(void);
|
|||
|
||||
boolean M_ConsiderSealedSwapAlert(void);
|
||||
|
||||
void M_OpenVirtualKeyboard(boolean gamepad);
|
||||
void M_OpenVirtualKeyboard(boolean gamepad, vkb_query_fn_t queryfn);
|
||||
void M_MenuTypingInput(INT32 key);
|
||||
|
||||
void M_QuitResponse(INT32 ch);
|
||||
|
|
|
|||
|
|
@ -188,6 +188,14 @@ static void M_ChangeCvar(INT32 choice)
|
|||
M_ChangeCvarDirect(choice, currentMenu->menuitems[itemOn].itemaction.cvar);
|
||||
}
|
||||
|
||||
static const char *M_QueryCvarAction(const char *replace)
|
||||
{
|
||||
consvar_t *cvar = currentMenu->menuitems[itemOn].itemaction.cvar;
|
||||
if (replace)
|
||||
CV_Set(cvar, replace);
|
||||
return cvar->string;
|
||||
}
|
||||
|
||||
boolean M_NextOpt(void)
|
||||
{
|
||||
INT16 oldItemOn = itemOn; // prevent infinite loop
|
||||
|
|
@ -1124,7 +1132,8 @@ static void M_HandleMenuInput(void)
|
|||
// If we're hovering over a IT_CV_STRING option, pressing A/X opens the typing submenu
|
||||
if (M_MenuConfirmPressed(pid))
|
||||
{
|
||||
M_OpenVirtualKeyboard(thisMenuKey == -1); // If we entered this menu by pressing a menu Key, default to keyboard typing, otherwise use controller.
|
||||
// If we entered this menu by pressing a menu Key, default to keyboard typing, otherwise use controller.
|
||||
M_OpenVirtualKeyboard(thisMenuKey == -1, M_QueryCvarAction);
|
||||
return;
|
||||
}
|
||||
else if (M_MenuExtraPressed(pid))
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ static void M_ToggleVirtualShift(void)
|
|||
static void M_CloseVirtualKeyboard(void)
|
||||
{
|
||||
menutyping.menutypingclose = true; // close menu.
|
||||
CV_Set(currentMenu->menuitems[itemOn].itemaction.cvar, menutyping.cache);
|
||||
menutyping.queryfn(menutyping.cache);
|
||||
}
|
||||
|
||||
static boolean M_IsTypingKey(INT32 key)
|
||||
|
|
@ -405,11 +405,12 @@ void M_MenuTypingInput(INT32 key)
|
|||
}
|
||||
}
|
||||
|
||||
void M_OpenVirtualKeyboard(boolean gamepad)
|
||||
void M_OpenVirtualKeyboard(boolean gamepad, vkb_query_fn_t queryfn)
|
||||
{
|
||||
menutyping.keyboardtyping = !gamepad;
|
||||
menutyping.active = true;
|
||||
menutyping.menutypingclose = false;
|
||||
|
||||
strlcpy(menutyping.cache, currentMenu->menuitems[itemOn].itemaction.cvar->string, MAXSTRINGLENGTH);
|
||||
menutyping.queryfn = queryfn;
|
||||
strlcpy(menutyping.cache, queryfn(NULL), MAXSTRINGLENGTH);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue