Menu-VGUI: Hack to get Input calls done in reverse to the drawing.
This commit is contained in:
parent
db97db6820
commit
6bc54d4219
3 changed files with 37 additions and 6 deletions
|
@ -134,11 +134,17 @@ CUIWidget::Draw(void)
|
||||||
} while (wNext);
|
} while (wNext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
CUIWidget member;
|
||||||
|
} vgui_input_scene_t;
|
||||||
|
|
||||||
bool
|
bool
|
||||||
CUIWidget::Input(float flEVType, float flKey, float flChar, float flDevID)
|
CUIWidget::Input(float flEVType, float flKey, float flChar, float flDevID)
|
||||||
{
|
{
|
||||||
CUIWidget wNext = this;
|
CUIWidget wNext = this;
|
||||||
|
|
||||||
|
#if 0
|
||||||
do {
|
do {
|
||||||
wNext = wNext.m_next;
|
wNext = wNext.m_next;
|
||||||
if (wNext && wNext.m_iFlags & 1 && wNext.m_parent.m_iFlags & 1) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
} while (wNext);
|
} 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
|
void
|
||||||
|
|
|
@ -188,19 +188,15 @@ bool CUIScrollbar::Input (float flEVType, float flKey, float flChar, float flDev
|
||||||
if (flKey == K_MOUSE1) {
|
if (flKey == K_MOUSE1) {
|
||||||
if (m_iFlags & SCROLLBAR_UP_DOWN && Util_MouseAbove(getmousepos(), vecUpPos, [20,20])) {
|
if (m_iFlags & SCROLLBAR_UP_DOWN && Util_MouseAbove(getmousepos(), vecUpPos, [20,20])) {
|
||||||
SetValue(GetValue() - GetStep(), TRUE);
|
SetValue(GetValue() - GetStep(), TRUE);
|
||||||
ret = true;
|
|
||||||
} else if (m_iFlags & SCROLLBAR_DN_DOWN && Util_MouseAbove(getmousepos(), vecDownPos, [20,20])) {
|
} else if (m_iFlags & SCROLLBAR_DN_DOWN && Util_MouseAbove(getmousepos(), vecDownPos, [20,20])) {
|
||||||
SetValue(GetValue() + GetStep(), TRUE);
|
SetValue(GetValue() + GetStep(), TRUE);
|
||||||
ret = true;
|
|
||||||
}
|
}
|
||||||
m_iFlags -= (m_iFlags & SCROLLBAR_UP_DOWN);
|
m_iFlags -= (m_iFlags & SCROLLBAR_UP_DOWN);
|
||||||
m_iFlags -= (m_iFlags & SCROLLBAR_DN_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])) {
|
} else if (flKey == K_MWHEELDOWN && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, [20, m_iLength])) {
|
||||||
SetValue(GetValue() + GetStep(), TRUE);
|
SetValue(GetValue() + GetStep(), TRUE);
|
||||||
ret = true;
|
|
||||||
} else if (flKey == K_MWHEELUP && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, [20, m_iLength])) {
|
} else if (flKey == K_MWHEELUP && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, [20, m_iLength])) {
|
||||||
SetValue(GetValue() - GetStep(), TRUE);
|
SetValue(GetValue() - GetStep(), TRUE);
|
||||||
ret = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|
|
@ -133,10 +133,8 @@ bool CUITextBox::Input (float flEVType, float flKey, float flChar, float flDevID
|
||||||
if (flKey == K_MOUSE1) {
|
if (flKey == K_MOUSE1) {
|
||||||
if (m_iFlags & TEXTBOX_DOWN && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
if (m_iFlags & TEXTBOX_DOWN && Util_MouseAbove(getmousepos(), m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
||||||
m_iFlags |= TEXTBOX_FOCUS;
|
m_iFlags |= TEXTBOX_FOCUS;
|
||||||
ret = true;
|
|
||||||
} else {
|
} else {
|
||||||
m_iFlags -= (m_iFlags & TEXTBOX_FOCUS);
|
m_iFlags -= (m_iFlags & TEXTBOX_FOCUS);
|
||||||
ret = true;
|
|
||||||
}
|
}
|
||||||
m_iFlags -= (m_iFlags & TEXTBOX_DOWN);
|
m_iFlags -= (m_iFlags & TEXTBOX_DOWN);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue