vguilib: only block inputs to engine if a widget successfully took a keypress into account

This commit is contained in:
Marco Cawthorne 2022-06-16 21:57:53 -07:00
parent b51541a3ae
commit 241c94368f
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
5 changed files with 35 additions and 41 deletions

View File

@ -503,7 +503,7 @@ CSQC_InputEvent(float fEventType, float fKey, float fCharacter, float fDeviceID)
g_vecMousePos = getmousepos();
VGUI_Input(fEventType, fKey, fCharacter, fDeviceID);
bool vgui_pressed = VGUI_Input(fEventType, fKey, fCharacter, fDeviceID);
if (g_vguiWidgetCount) {
setcursormode(TRUE, "gfx/cursor", [0,0,0], 1.0f);
@ -511,10 +511,7 @@ CSQC_InputEvent(float fEventType, float fKey, float fCharacter, float fDeviceID)
setcursormode(FALSE, "gfx/cursor", [0,0,0], 1.0f);
}
if (VGUI_Active() && !(fEventType == IE_KEYDOWN && fCharacter == K_ESCAPE))
return (1);
else
return (0);
return (vgui_pressed);
}
/*

View File

@ -31,17 +31,15 @@ VGUI_Draw(void)
return (1);
}
int
bool
VGUI_Input(float flEvType, float flScanX, float flCharY, float flDevID)
{
g_uiDesktop.Input(flEvType, flScanX, flCharY, flDevID);
return (1);
return g_uiDesktop.Input(flEvType, flScanX, flCharY, flDevID);
}
void
VGUI_Reposition(void)
{
CUIWidget wNext = g_uiDesktop;
do {
wNext = wNext.m_next;

View File

@ -570,9 +570,6 @@ PMoveCustom_RunPlayerPhysics(entity target)
entity oldself = self;
self = target;
self.dimension_solid = 254;
self.dimension_hit = 254;
if (self.maxspeed <= 0)
self.maxspeed = 240;

View File

@ -170,12 +170,13 @@ CUIWidget::Input(float flEVType, float flKey, float flChar, float flDevID)
wNext = tree[x].member;
if (wNext && wNext.m_iFlags & 1 && wNext.m_parent.m_iFlags & 1)
if (wNext.Input(flEVType, flKey, flChar, flDevID) == true)
return (false);
if (wNext.Input(flEVType, flKey, flChar, flDevID) == true) {
memfree(tree);
return (true);
}
}
memfree(tree);
return (false);
}

View File

@ -101,43 +101,44 @@ bool CUITextBox::Input (float flEVType, float flKey, float flChar, float flDevID
{
bool ret = false;
if (flEVType == IE_KEYDOWN) {
switch (flKey) {
case K_MOUSE1 :
switch (flKey) {
case K_MOUSE1 :
if (flEVType == IE_KEYDOWN) {
if (Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
m_iFlags |= TEXTBOX_DOWN;
ret = true;
}
break;
case K_BACKSPACE:
if (m_iFlags & TEXTBOX_FOCUS) {
m_strText = substring(m_strText, 0, strlen(m_strText) - 1);
}
break;
case K_ENTER:
break;
default:
if (m_iFlags & TEXTBOX_FOCUS) {
#if 0
if ((flChar >= 48 && flChar <= 57) || (flChar >= 65 && flChar <= 90) || (flChar >= 97 && flChar <= 122)) {
m_strText = sprintf("%s%s", m_strText, chr2str(flChar));
}
#else
if ((flChar >= 32 && flChar <= 125)) {
m_strText = sprintf("%s%s", m_strText, chr2str(flChar));
}
#endif
}
}
} else if (flEVType == IE_KEYUP) {
if (flKey == K_MOUSE1) {
} else {
if (m_iFlags & TEXTBOX_DOWN && Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
m_iFlags |= TEXTBOX_FOCUS;
ret = true;
} else {
m_iFlags -= (m_iFlags & TEXTBOX_FOCUS);
}
m_iFlags -= (m_iFlags & TEXTBOX_DOWN);
}
break;
case K_BACKSPACE:
if (flEVType == IE_KEYDOWN)
if (m_iFlags & TEXTBOX_FOCUS)
m_strText = substring(m_strText, 0, strlen(m_strText) - 1);
break;
case K_ENTER:
break;
default:
if (m_iFlags & TEXTBOX_DOWN)
ret = true;
else if (m_iFlags & TEXTBOX_FOCUS) {
if ((flChar >= 32 && flChar <= 125)) {
if (flEVType == IE_KEYDOWN)
m_strText = sprintf("%s%s", m_strText, chr2str(flChar));
ret = true;
}
if ((flKey >= 32 && flKey <= 125)) {
ret = true;
}
}
}
return (ret);
}