Menu-VGUI: Hack to get Input calls done in reverse to the drawing.

This commit is contained in:
Marco Cawthorne 2022-05-24 13:30:58 -07:00
parent db97db6820
commit 6bc54d4219
Signed by: eukara
GPG Key ID: CE2032F0A2882A22
3 changed files with 37 additions and 6 deletions

View File

@ -134,11 +134,17 @@ CUIWidget::Draw(void)
} while (wNext);
}
typedef struct
{
CUIWidget member;
} vgui_input_scene_t;
bool
CUIWidget::Input(float flEVType, float flKey, float flChar, float flDevID)
{
CUIWidget wNext = this;
#if 0
do {
wNext = wNext.m_next;
if (wNext && wNext.m_iFlags & 1 && wNext.m_parent.m_iFlags & 1) {
@ -146,6 +152,37 @@ CUIWidget::Input(float flEVType, float flKey, float flChar, float flDevID)
return;
}
} while (wNext);
#else
/* this is garbage, but it'll work */
int c = 0;
do {
wNext = wNext.m_next;
c++;
} while (wNext);
/* we got the count of valid items */
vgui_input_scene_t *tree = memalloc(sizeof(vgui_input_scene_t) * c);
int i = 0;
CUIWidget wNext = this;
do {
wNext = wNext.m_next;
tree[i].member = wNext;
i++;
} while (wNext);
/* traverse the list in reverse */
for (int i = c-1; i >= 0; i--) {
wNext = tree[i].member;
if (wNext && wNext.m_iFlags & 1 && wNext.m_parent.m_iFlags & 1)
if (wNext.Input(flEVType, flKey, flChar, flDevID) == true)
return;
}
memfree(tree);
#endif
}
void

View File

@ -188,19 +188,15 @@ bool CUIScrollbar::Input (float flEVType, float flKey, float flChar, float flDev
if (flKey == K_MOUSE1) {
if (m_iFlags & SCROLLBAR_UP_DOWN && Util_MouseAbove(getmousepos(), vecUpPos, [20,20])) {
SetValue(GetValue() - GetStep(), TRUE);
ret = true;
} else if (m_iFlags & SCROLLBAR_DN_DOWN && Util_MouseAbove(getmousepos(), vecDownPos, [20,20])) {
SetValue(GetValue() + GetStep(), TRUE);
ret = true;
}
m_iFlags -= (m_iFlags & SCROLLBAR_UP_DOWN);
m_iFlags -= (m_iFlags & SCROLLBAR_DN_DOWN);
} else if (flKey == K_MWHEELDOWN && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, [20, m_iLength])) {
SetValue(GetValue() + GetStep(), TRUE);
ret = true;
} else if (flKey == K_MWHEELUP && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, [20, m_iLength])) {
SetValue(GetValue() - GetStep(), TRUE);
ret = true;
}
}
return (ret);

View File

@ -133,10 +133,8 @@ bool CUITextBox::Input (float flEVType, float flKey, float flChar, float flDevID
if (flKey == K_MOUSE1) {
if (m_iFlags & TEXTBOX_DOWN && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
m_iFlags |= TEXTBOX_FOCUS;
ret = true;
} else {
m_iFlags -= (m_iFlags & TEXTBOX_FOCUS);
ret = true;
}
m_iFlags -= (m_iFlags & TEXTBOX_DOWN);
}