2019-09-01 02:18:15 +00:00
|
|
|
/*
|
2020-03-25 16:42:36 +00:00
|
|
|
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
2019-09-01 02:18:15 +00:00
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
|
|
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
*/
|
2019-08-03 17:40:34 +00:00
|
|
|
|
|
|
|
font_s g_fntDefault;
|
2019-08-10 21:37:56 +00:00
|
|
|
var int g_vguiWidgetCount;
|
2019-08-03 17:40:34 +00:00
|
|
|
|
2019-08-10 21:37:56 +00:00
|
|
|
#ifdef CLASSIC_VGUI
|
2020-03-25 16:42:36 +00:00
|
|
|
#define UI_MAINCOLOR [255,200,0] / 255
|
2019-08-10 21:37:56 +00:00
|
|
|
#define UI_MAINALPHA 255
|
|
|
|
#else
|
2019-08-03 17:40:34 +00:00
|
|
|
var vector UI_MAINCOLOR;
|
|
|
|
var float UI_MAINALPHA;
|
|
|
|
#endif
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
int
|
|
|
|
Util_MouseAbove(vector vecMousePos, vector vecPos, vector vecSize)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
if (vecMousePos[0] >= vecPos[0] && vecMousePos[0] <= vecPos[0] + vecSize[0]) {
|
|
|
|
if (vecMousePos[1] >= vecPos[1] && vecMousePos[1] <= vecPos[1] + vecSize[1]) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
class CUIWidget
|
|
|
|
{
|
|
|
|
vector m_vecOrigin;
|
|
|
|
CUIWidget m_next;
|
|
|
|
CUIWidget m_parent;
|
|
|
|
int m_iFlags;
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
virtual void(CUIWidget) Add;
|
|
|
|
virtual void(int) FlagAdd;
|
|
|
|
virtual void(int) FlagRemove;
|
|
|
|
virtual void(vector) SetPos;
|
2019-08-03 17:40:34 +00:00
|
|
|
virtual vector() GetPos;
|
2020-04-12 13:50:42 +00:00
|
|
|
virtual int(void) GetPosWidth;
|
|
|
|
virtual int(void) GetPosHeight;
|
|
|
|
virtual void(void) Draw;
|
2020-03-25 16:42:36 +00:00
|
|
|
virtual void(float, float, float, float) Input;
|
2019-08-03 17:40:34 +00:00
|
|
|
};
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
void
|
|
|
|
CUIWidget::SetPos(vector vecPos)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
m_vecOrigin = vecPos;
|
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
|
|
|
|
vector
|
|
|
|
CUIWidget::GetPos(void)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
return m_vecOrigin;
|
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
CUIWidget::GetPosWidth(void)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
return m_vecOrigin[0];
|
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
CUIWidget::GetPosHeight(void)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
return m_vecOrigin[1];
|
|
|
|
}
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
void
|
|
|
|
CUIWidget::FlagAdd(int iFlag)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
m_iFlags |= iFlag;
|
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
|
|
|
|
void
|
|
|
|
CUIWidget::FlagRemove(int iFlag)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
2020-03-25 16:42:36 +00:00
|
|
|
m_iFlags -= (m_iFlags & iFlag);
|
2019-08-03 17:40:34 +00:00
|
|
|
}
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
void
|
|
|
|
CUIWidget::Add(CUIWidget wNew)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
CUIWidget wNext = this;
|
|
|
|
CUIWidget wParent;
|
|
|
|
do {
|
|
|
|
wParent = wNext;
|
|
|
|
wNext = wNext.m_next;
|
2020-03-25 16:42:36 +00:00
|
|
|
} while (wNext);
|
2019-08-03 17:40:34 +00:00
|
|
|
wParent.m_next = wNew;
|
|
|
|
wNew.m_parent = this;
|
|
|
|
}
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
void
|
|
|
|
CUIWidget::Draw(void)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
CUIWidget wNext = this;
|
|
|
|
do {
|
|
|
|
wNext = wNext.m_next;
|
2020-03-25 16:42:36 +00:00
|
|
|
if (wNext && wNext.m_iFlags & 1 && wNext.m_parent.m_iFlags & 1) {
|
2019-08-03 17:40:34 +00:00
|
|
|
wNext.Draw();
|
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
} while (wNext);
|
2019-08-03 17:40:34 +00:00
|
|
|
}
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
void
|
|
|
|
CUIWidget::Input(float flEVType, float flKey, float flChar, float flDevID)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
|
|
|
CUIWidget wNext = this;
|
2019-08-10 21:37:56 +00:00
|
|
|
|
|
|
|
g_vguiWidgetCount = 0;
|
2019-08-03 17:40:34 +00:00
|
|
|
do {
|
|
|
|
wNext = wNext.m_next;
|
2020-03-25 16:42:36 +00:00
|
|
|
if (wNext && wNext.m_iFlags & 1 && wNext.m_parent.m_iFlags & 1) {
|
2019-08-10 21:37:56 +00:00
|
|
|
g_vguiWidgetCount++;
|
2020-03-25 16:42:36 +00:00
|
|
|
wNext.Input(flEVType, flKey, flChar, flDevID);
|
2019-08-03 17:40:34 +00:00
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
} while (wNext);
|
2019-08-03 17:40:34 +00:00
|
|
|
}
|
|
|
|
|
2020-03-25 16:42:36 +00:00
|
|
|
void
|
|
|
|
UISystem_Init(void)
|
2019-08-03 17:40:34 +00:00
|
|
|
{
|
2020-03-25 16:42:36 +00:00
|
|
|
/* we support fancier stuff in non-classic mode */
|
2019-08-10 21:37:56 +00:00
|
|
|
#ifndef CLASSIC_VGUI
|
|
|
|
string strTemp;
|
2019-08-03 17:40:34 +00:00
|
|
|
string strUIFile = "scripts/ui_style.txt";
|
2020-03-25 16:42:36 +00:00
|
|
|
filestream fileUI = fopen(strUIFile, FILE_READ);
|
|
|
|
|
|
|
|
UI_MAINCOLOR = [68,68,68] / 255;
|
2019-08-03 17:40:34 +00:00
|
|
|
UI_MAINALPHA = 1.0f;
|
2020-03-25 16:42:36 +00:00
|
|
|
|
|
|
|
if (fileUI >= 0) {
|
|
|
|
while ((strTemp = fgets(fileUI))) {
|
|
|
|
if (tokenizebyseparator(strTemp, "=") == 2) {
|
|
|
|
switch (argv(0)) {
|
2019-08-03 17:40:34 +00:00
|
|
|
case "COLOR":
|
2020-03-25 16:42:36 +00:00
|
|
|
UI_MAINCOLOR = stov(argv(1)) / 255;
|
2019-08-03 17:40:34 +00:00
|
|
|
break;
|
|
|
|
case "ALPHA":
|
2020-03-25 16:42:36 +00:00
|
|
|
UI_MAINALPHA = stof(argv(1)) / 255;
|
2019-08-03 17:40:34 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-03-25 16:42:36 +00:00
|
|
|
fclose(fileUI);
|
2019-08-03 17:40:34 +00:00
|
|
|
} else {
|
2020-03-25 16:42:36 +00:00
|
|
|
error(sprintf("[MENU] Cannot load UI file %s!", strUIFile));
|
2019-08-10 21:37:56 +00:00
|
|
|
}
|
|
|
|
#endif
|
2020-03-25 16:42:36 +00:00
|
|
|
|
|
|
|
Font_Load("scripts/ui_font.txt", g_fntDefault);
|
|
|
|
precache_pic("textures/ui/steam/icon_radiosel");
|
|
|
|
precache_pic("textures/ui/steam/icon_radiounsel");
|
|
|
|
precache_pic("textures/ui/steam/icon_checked");
|
|
|
|
precache_pic("textures/ui/steam/icon_emptybox");
|
|
|
|
precache_pic("textures/ui/steam/icon_down");
|
|
|
|
precache_pic("textures/ui/steam/icon_up");
|
|
|
|
precache_pic("textures/ui/steam/icon_close");
|
2019-08-03 17:40:34 +00:00
|
|
|
}
|