mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
M_OpenVirtualKeyboard: add optional dummymenu argument
- Virtual Keyboard can switch to a temporary menu while
typing
- It will switch back to the previous menu after it's
closed
- This functionality can be used even if the menu isn't
already open
- It will close the menu and return to gameplay when the
Virtual Keyboard is closed
This commit is contained in:
parent
f270ac5579
commit
7d01c3046b
3 changed files with 31 additions and 5 deletions
|
|
@ -556,6 +556,7 @@ extern struct menutyping_s
|
|||
boolean keyboardshift;
|
||||
|
||||
vkb_query_fn_t queryfn; // callback on open and close
|
||||
menu_t *dummymenu;
|
||||
char cache[MAXSTRINGLENGTH]; // cached string
|
||||
|
||||
} menutyping;
|
||||
|
|
@ -684,7 +685,8 @@ void M_PlayMenuJam(void);
|
|||
|
||||
boolean M_ConsiderSealedSwapAlert(void);
|
||||
|
||||
void M_OpenVirtualKeyboard(boolean gamepad, vkb_query_fn_t queryfn);
|
||||
void M_OpenVirtualKeyboard(boolean gamepad, vkb_query_fn_t queryfn, menu_t *dummymenu);
|
||||
void M_AbortVirtualKeyboard(void);
|
||||
void M_MenuTypingInput(INT32 key);
|
||||
|
||||
void M_QuitResponse(INT32 ch);
|
||||
|
|
|
|||
|
|
@ -839,7 +839,7 @@ void M_ClearMenus(boolean callexitmenufunc)
|
|||
D_StartTitle();
|
||||
}
|
||||
|
||||
menutyping.active = false;
|
||||
M_AbortVirtualKeyboard();
|
||||
menumessage.active = false;
|
||||
|
||||
menuactive = false;
|
||||
|
|
@ -1133,7 +1133,7 @@ static void M_HandleMenuInput(void)
|
|||
if (M_MenuConfirmPressed(pid))
|
||||
{
|
||||
// If we entered this menu by pressing a menu Key, default to keyboard typing, otherwise use controller.
|
||||
M_OpenVirtualKeyboard(thisMenuKey == -1, M_QueryCvarAction);
|
||||
M_OpenVirtualKeyboard(thisMenuKey == -1, M_QueryCvarAction, NULL);
|
||||
return;
|
||||
}
|
||||
else if (M_MenuExtraPressed(pid))
|
||||
|
|
|
|||
|
|
@ -183,6 +183,16 @@ static void M_CloseVirtualKeyboard(void)
|
|||
menutyping.queryfn(menutyping.cache);
|
||||
}
|
||||
|
||||
void M_AbortVirtualKeyboard(void)
|
||||
{
|
||||
if (!menutyping.active)
|
||||
return;
|
||||
|
||||
menutyping.active = false;
|
||||
if (currentMenu == menutyping.dummymenu)
|
||||
M_GoBack(0);
|
||||
}
|
||||
|
||||
static boolean M_IsTypingKey(INT32 key)
|
||||
{
|
||||
return key == KEY_BACKSPACE || key == KEY_ENTER
|
||||
|
|
@ -202,7 +212,7 @@ void M_MenuTypingInput(INT32 key)
|
|||
// Closing
|
||||
menutyping.menutypingfade--;
|
||||
if (!menutyping.menutypingfade)
|
||||
menutyping.active = false;
|
||||
M_AbortVirtualKeyboard();
|
||||
|
||||
return; // prevent inputs while closing the menu.
|
||||
}
|
||||
|
|
@ -405,12 +415,26 @@ void M_MenuTypingInput(INT32 key)
|
|||
}
|
||||
}
|
||||
|
||||
void M_OpenVirtualKeyboard(boolean gamepad, vkb_query_fn_t queryfn)
|
||||
void M_OpenVirtualKeyboard(boolean gamepad, vkb_query_fn_t queryfn, menu_t *dummymenu)
|
||||
{
|
||||
menutyping.keyboardtyping = !gamepad;
|
||||
menutyping.active = true;
|
||||
menutyping.menutypingclose = false;
|
||||
|
||||
menutyping.queryfn = queryfn;
|
||||
menutyping.dummymenu = dummymenu;
|
||||
strlcpy(menutyping.cache, queryfn(NULL), MAXSTRINGLENGTH);
|
||||
|
||||
if (dummymenu)
|
||||
{
|
||||
if (!menuactive)
|
||||
{
|
||||
M_StartControlPanel();
|
||||
dummymenu->prevMenu = NULL;
|
||||
}
|
||||
else
|
||||
dummymenu->prevMenu = currentMenu;
|
||||
|
||||
M_SetupNextMenu(dummymenu, true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue