VGUI: Stability improvements, start allowing overrides for VGUIButton and VGUIWindow based classes.
This commit is contained in:
parent
41c20663a8
commit
8c58d635d3
14 changed files with 340 additions and 69 deletions
|
@ -355,3 +355,22 @@ dirname(string input)
|
|||
|
||||
return newpath;
|
||||
}
|
||||
|
||||
string
|
||||
textfile_to_string(string filename)
|
||||
{
|
||||
string fileContents = __NULL__;
|
||||
|
||||
filestream fileHandle = fopen(filename, FILE_READ);
|
||||
string temp;
|
||||
|
||||
if (fileHandle != -1) {
|
||||
while ((temp = fgets(fileHandle))) {
|
||||
fileContents = strcat(fileContents, temp, "\n");
|
||||
}
|
||||
} else {
|
||||
fileContents = __NULL__;
|
||||
}
|
||||
|
||||
return fileContents;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
#includelist
|
||||
../vgui/ui.qc
|
||||
../vgui/ui_control.qc
|
||||
../vgui/ui_button.qc
|
||||
../vgui/ui_menubutton.qc
|
||||
../vgui/ui_radio.qc
|
||||
../vgui/ui_checkbox.qc
|
||||
../vgui/ui_window.qc
|
||||
../vgui/ui_frame.qc
|
||||
../vgui/ui_label.qc
|
||||
../vgui/ui_pic.qc
|
||||
../vgui/ui_3dview.qc
|
||||
|
|
|
@ -36,7 +36,7 @@ var int g_vguiWidgetCount;
|
|||
|
||||
#ifdef CLASSIC_VGUI
|
||||
#ifndef UI_MAINCOLOR
|
||||
#define UI_MAINCOLOR [255,200,0] / 255
|
||||
#define UI_MAINCOLOR [255,170,0] / 255
|
||||
#endif
|
||||
#ifndef UI_MAINALPHA
|
||||
#define UI_MAINALPHA 255
|
||||
|
@ -79,6 +79,9 @@ public:
|
|||
nonvirtual void FlagAdd(int);
|
||||
/** Remove a flag from the widget. */
|
||||
nonvirtual void FlagRemove(int);
|
||||
/** Check if the VGUIWidget has a flag attached. */
|
||||
nonvirtual bool HasFlag(int);
|
||||
|
||||
/** Set the position within its context. */
|
||||
nonvirtual void SetPos(vector);
|
||||
/** Return the position of the widget within its context. */
|
||||
|
@ -277,6 +280,12 @@ VGUIWidget::FlagRemove(int iFlag)
|
|||
m_iFlags -= (m_iFlags & iFlag);
|
||||
}
|
||||
|
||||
bool
|
||||
VGUIWidget::HasFlag(int flag)
|
||||
{
|
||||
return (m_iFlags & flag) ? true : false;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIWidget::Reposition(void)
|
||||
{
|
||||
|
|
|
@ -21,6 +21,9 @@ noref .vector maxs;
|
|||
noref .string model;
|
||||
noref .float frame, frame2, lerpfrac, renderflags, frame1time;
|
||||
|
||||
.void(void) tmpVGUI3DView1;
|
||||
.float(float,float,float,float) tmpVGUI3DView2;
|
||||
|
||||
class VGUI3DView:VGUIWidget
|
||||
{
|
||||
public:
|
||||
|
@ -48,8 +51,6 @@ private:
|
|||
vector m_vec3DPos;
|
||||
vector m_vec3DAngles;
|
||||
float m_flFOV;
|
||||
virtual void(void) m_vDrawFunc = 0;
|
||||
virtual float(float, float, float, float) m_vInputFunc = 0;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -92,19 +93,19 @@ VGUI3DView::Get3DPos(void)
|
|||
void
|
||||
VGUI3DView::SetDrawFunc(void(void) vFunc)
|
||||
{
|
||||
m_vDrawFunc = vFunc;
|
||||
tmpVGUI3DView1 = vFunc;
|
||||
}
|
||||
|
||||
void
|
||||
VGUI3DView::SetInputFunc(float(float, float, float, float) vFunc)
|
||||
{
|
||||
m_vInputFunc = vFunc;
|
||||
tmpVGUI3DView2 = vFunc;
|
||||
}
|
||||
|
||||
void
|
||||
VGUI3DView::Draw(void)
|
||||
{
|
||||
if (!m_vDrawFunc) {
|
||||
if (!tmpVGUI3DView1) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -113,16 +114,16 @@ VGUI3DView::Draw(void)
|
|||
setproperty(VF_AFOV, 90);
|
||||
setproperty(VF_ORIGIN, m_vec3DPos);
|
||||
setproperty(VF_ANGLES, m_vec3DAngles);
|
||||
m_vDrawFunc();
|
||||
tmpVGUI3DView1();
|
||||
renderscene();
|
||||
}
|
||||
|
||||
bool
|
||||
VGUI3DView::Input(float flEVType, float flKey, float flChar, float flDevID)
|
||||
{
|
||||
if (!m_vInputFunc) {
|
||||
if (!tmpVGUI3DView2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_vInputFunc(flEVType, flKey, flChar, flDevID);
|
||||
return tmpVGUI3DView2(flEVType, flKey, flChar, flDevID);
|
||||
}
|
||||
|
|
|
@ -21,7 +21,10 @@ enumflags
|
|||
BUTTON_LASTACTIVE
|
||||
};
|
||||
|
||||
class VGUIButton:VGUIWidget
|
||||
/* TODO: MOVE THESE INTO VGUIButton! COMPILER NEEDS TO BE FIXED FIRST HOWEVER. */
|
||||
.void(void) tmpVGUIButton1;
|
||||
|
||||
class VGUIButton:VGUIControl
|
||||
{
|
||||
public:
|
||||
void VGUIButton(void);
|
||||
|
@ -34,8 +37,13 @@ public:
|
|||
nonvirtual void SetColor(vector);
|
||||
/** Sets the color of the icon on the button. */
|
||||
nonvirtual void SetIconColor(vector);
|
||||
|
||||
/** Gets the title of the button. */
|
||||
nonvirtual string GetTitle(void);
|
||||
|
||||
/** Sets the function to call when the button is pressed. */
|
||||
nonvirtual void SetFunc(void(void));
|
||||
|
||||
/** Sets the command to execute when the button is pressed. */
|
||||
nonvirtual void SetExec(string);
|
||||
|
||||
|
@ -43,7 +51,6 @@ public:
|
|||
virtual void Draw(void);
|
||||
virtual bool Input(float,float,float,float);
|
||||
virtual void Spawned(void);
|
||||
|
||||
private:
|
||||
vector m_vecIMGSize;
|
||||
vector m_vecColor;
|
||||
|
@ -53,7 +60,6 @@ private:
|
|||
string m_strTitleActive;
|
||||
string m_strIcon;
|
||||
string m_strExec;
|
||||
virtual void m_vFunc(void) = 0;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -89,13 +95,20 @@ VGUIButton::SetTitle(string strName)
|
|||
|
||||
m_strTitle = strName;
|
||||
m_strTitleActive = sprintf("^3%s", m_strTitle);
|
||||
m_strTitle = sprintf("%s%s", Font_RGBtoHex(UI_MAINCOLOR), strName);
|
||||
//m_strTitle = sprintf("%s%s", Font_RGBtoHex(UI_MAINCOLOR), strName);
|
||||
drawfont = g_fntDefault.iID;
|
||||
|
||||
newsize[0] = stringwidth(m_strTitle, TRUE, [g_fntDefault.iScaleX, g_fntDefault.iScaleY]) + 16;
|
||||
newsize[1] = 24;
|
||||
SetSize(newsize);
|
||||
}
|
||||
|
||||
string
|
||||
VGUIButton::GetTitle(void)
|
||||
{
|
||||
return m_strTitle;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIButton::SetIcon(string strName)
|
||||
{
|
||||
|
@ -107,9 +120,11 @@ VGUIButton::SetIcon(string strName)
|
|||
}
|
||||
}
|
||||
void
|
||||
VGUIButton::SetFunc(void(void) vFunc)
|
||||
VGUIButton::SetFunc(void(void) func)
|
||||
{
|
||||
m_vFunc = vFunc;
|
||||
//#warning "SetFunc in VGUIButton is DEPRECATED. Compiler IS generating JUNK in the old way. Please override VGUIButton and define a OnMouseDown/Up method instead"
|
||||
//m_vFunc = vFunc;
|
||||
tmpVGUIButton1 = func;
|
||||
}
|
||||
void
|
||||
VGUIButton::SetExec(string exe)
|
||||
|
@ -117,6 +132,7 @@ VGUIButton::SetExec(string exe)
|
|||
m_strExec = exe;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
VGUIButton::Draw(void)
|
||||
{
|
||||
|
@ -134,6 +150,21 @@ VGUIButton::Draw(void)
|
|||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
}
|
||||
|
||||
if (m_strTitle) {
|
||||
if (m_iFlags & BUTTON_HOVER) {
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [8, 8], m_strTitle, g_fntDefault);
|
||||
} else {
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [8, 8], m_strTitle, g_fntDefault);
|
||||
}
|
||||
}
|
||||
if (m_strIcon) {
|
||||
if (m_iFlags & BUTTON_DOWN)
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin + [2,2], m_strIcon, m_vecIMGSize, m_vecIconColor * 0.25, 1.0f, 0);
|
||||
else
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin + [2,2], m_strIcon, m_vecIMGSize, m_vecIconColor, 1.0f, 0);
|
||||
}
|
||||
|
||||
#else
|
||||
if (m_iFlags & BUTTON_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, m_vecColor, 0.25f);
|
||||
|
@ -142,7 +173,7 @@ VGUIButton::Draw(void)
|
|||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
#endif
|
||||
|
||||
|
||||
if (m_strTitle) {
|
||||
if (m_iFlags & BUTTON_LASTACTIVE) {
|
||||
|
@ -157,6 +188,7 @@ VGUIButton::Draw(void)
|
|||
else
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin + [2,2], m_strIcon, m_vecIMGSize, m_vecIconColor, 1.0f, 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -164,10 +196,29 @@ VGUIButton::Input(float flEVType, float flKey, float flChar, float flDevID)
|
|||
{
|
||||
bool ret = false;
|
||||
|
||||
bool mouseHover = false;
|
||||
|
||||
if (Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
||||
mouseHover = true;
|
||||
}
|
||||
|
||||
if (mouseHover == true && HasFlag(BUTTON_HOVER) == false) {
|
||||
FlagAdd(BUTTON_HOVER);
|
||||
OnMouseEntered();
|
||||
} else if (HasFlag(BUTTON_HOVER)) {
|
||||
FlagRemove(BUTTON_HOVER);
|
||||
OnMouseExited();
|
||||
}
|
||||
|
||||
if (flEVType == IE_KEYDOWN) {
|
||||
if (flKey == K_MOUSE1) {
|
||||
FlagRemove(BUTTON_LASTACTIVE);
|
||||
if (Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
||||
if (mouseHover) {
|
||||
if (tmpVGUIButton1)
|
||||
tmpVGUIButton1();
|
||||
|
||||
OnMouseDown();
|
||||
|
||||
FlagAdd(BUTTON_DOWN);
|
||||
FlagAdd(BUTTON_LASTACTIVE);
|
||||
ret = true;
|
||||
|
@ -175,9 +226,9 @@ VGUIButton::Input(float flEVType, float flKey, float flChar, float flDevID)
|
|||
}
|
||||
} else if (flEVType == IE_KEYUP) {
|
||||
if (flKey == K_MOUSE1) {
|
||||
if (m_iFlags & BUTTON_DOWN && Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
||||
if (m_vFunc)
|
||||
m_vFunc();
|
||||
if (m_iFlags & BUTTON_DOWN && mouseHover) {
|
||||
OnMouseUp();
|
||||
|
||||
if (m_strExec)
|
||||
localcmd(sprintf("%s\n", m_strExec));
|
||||
|
||||
|
|
63
src/vgui/ui_control.qc
Normal file
63
src/vgui/ui_control.qc
Normal file
|
@ -0,0 +1,63 @@
|
|||
/** An abstract control class for various VGUI related widgets. */
|
||||
class
|
||||
VGUIControl:VGUIWidget
|
||||
{
|
||||
public:
|
||||
virtual void VGUIControl(void);
|
||||
|
||||
/** Set the control tag. Used for identification purposes. */
|
||||
nonvirtual void SetTag(int);
|
||||
/** Returns the control tag. Used for identification purposes. */
|
||||
nonvirtual int GetTag(void);
|
||||
|
||||
/* overridable */
|
||||
/** Called when the mouse starts hovering over this element. */
|
||||
virtual void OnMouseEntered(void);
|
||||
/** Called when the mouse stops hovering over this element. */
|
||||
virtual void OnMouseExited(void);
|
||||
/** Called when the mouse starts klicking down on this element. */
|
||||
virtual void OnMouseDown(void);
|
||||
/** Called when the mouse stops klicking down on this element. This is when actions usually need to be triggered. */
|
||||
virtual void OnMouseUp(void);
|
||||
|
||||
private:
|
||||
int m_iTag;
|
||||
};
|
||||
|
||||
void
|
||||
VGUIControl::VGUIControl(void)
|
||||
{
|
||||
m_iTag = 0i;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIControl::SetTag(int val)
|
||||
{
|
||||
m_iTag = val;
|
||||
}
|
||||
|
||||
int
|
||||
VGUIControl::GetTag(void)
|
||||
{
|
||||
return m_iTag;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIControl::OnMouseEntered(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
VGUIControl::OnMouseExited(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
VGUIControl::OnMouseDown(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
VGUIControl::OnMouseUp(void)
|
||||
{
|
||||
}
|
73
src/vgui/ui_frame.qc
Normal file
73
src/vgui/ui_frame.qc
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2022 Vera Visions LLC.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
enumflags
|
||||
{
|
||||
WINDOW_DRAGGING,
|
||||
WINDOW_RESIZING,
|
||||
};
|
||||
|
||||
typedef enumflags
|
||||
{
|
||||
VGUIFrameBorderless,
|
||||
VGUIFrameTitled,
|
||||
VGUIFrameClosable,
|
||||
VGUIFrameMiniaturizable,
|
||||
VGUIFrameResizeable,
|
||||
VGUIFrameMovable,
|
||||
} VGUIFrameStyle_t;
|
||||
|
||||
#define VGUIFrameStyleDefault VGUIFrameMovable | \
|
||||
VGUIFrameTitled | \
|
||||
VGUIFrameClosable | \
|
||||
VGUIFrameMiniaturizable
|
||||
|
||||
/** Top-most window class in VGUILib */
|
||||
class VGUIFrame:VGUIWidget
|
||||
{
|
||||
public:
|
||||
void VGUIFrame(void);
|
||||
|
||||
/* overrides */
|
||||
virtual void Draw(void);
|
||||
|
||||
private:
|
||||
vector m_vecColor;
|
||||
float m_flAlpha;
|
||||
};
|
||||
|
||||
void
|
||||
VGUIFrame::VGUIFrame(void)
|
||||
{
|
||||
m_vecColor = UI_MAINCOLOR;
|
||||
m_flAlpha = 1.0f;
|
||||
}
|
||||
|
||||
void VGUIFrame::Draw(void)
|
||||
{
|
||||
#ifdef CLASSIC_VGUI
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
#else
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -43,7 +43,7 @@ VGUILabel::VGUILabel(void)
|
|||
void
|
||||
VGUILabel::Spawned(void)
|
||||
{
|
||||
SetSize([96,16]);
|
||||
SetSize([0,0]);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -56,9 +56,11 @@ VGUILabel::SetTitle (string strName)
|
|||
#endif
|
||||
drawfont = g_fntDefault.iID;
|
||||
|
||||
if (GetSize() == [0,0]) {
|
||||
/* hack, add 2 just to make sure it doesn't immediately wrap. bug
|
||||
* in engines' textfield thing in combo with ttf. */
|
||||
SetSize([2 + stringwidth(m_strTitle, TRUE, [g_fntDefault.iScaleX, g_fntDefault.iScaleY]), 16]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
.void(void) tmpVGUIList1;
|
||||
|
||||
class VGUIList:VGUIWidget
|
||||
{
|
||||
public:
|
||||
|
@ -46,7 +48,6 @@ private:
|
|||
int m_iItemCount;
|
||||
int m_iSelected;
|
||||
int m_iDrawOffset;
|
||||
virtual void(void) m_vScrollCB = 0;
|
||||
};
|
||||
|
||||
void VGUIList::VGUIList(void)
|
||||
|
@ -140,8 +141,8 @@ void VGUIList::SetOffset (int iOffset, int iCallBack)
|
|||
int iMaxDisplay = bound(0, m_iItemCount, floor(m_vecSize[1] / 20));
|
||||
m_iDrawOffset = bound(0, iOffset, m_iItemCount - iMaxDisplay);
|
||||
|
||||
if (m_vScrollCB && iCallBack) {
|
||||
m_vScrollCB();
|
||||
if (tmpVGUIList1 && iCallBack) {
|
||||
tmpVGUIList1();
|
||||
}
|
||||
}
|
||||
int VGUIList::GetOffset(void)
|
||||
|
@ -198,5 +199,5 @@ void VGUIList::AddItem (string strItem)
|
|||
|
||||
void VGUIList::CallOnScroll (void(void) vFunc)
|
||||
{
|
||||
m_vScrollCB = vFunc;
|
||||
tmpVGUIList1 = vFunc;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ enumflags
|
|||
MBUTTON_SHOWMP
|
||||
};
|
||||
|
||||
.void(void) tmpVGUIMenuButton1;
|
||||
|
||||
class
|
||||
VGUIMenuButton:VGUIWidget
|
||||
{
|
||||
|
@ -44,8 +46,6 @@ private:
|
|||
float m_flAlpha;
|
||||
string m_strTitle;
|
||||
string m_strIcon;
|
||||
|
||||
virtual void(void) m_vFunc = 0;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -139,8 +139,8 @@ VGUIMenuButton::Input (float flEVType, float flKey, float flChar, float flDevID)
|
|||
} else if (flEVType == IE_KEYUP) {
|
||||
if (flKey == K_MOUSE1) {
|
||||
if (m_iFlags & MBUTTON_DOWN && Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
||||
if (m_vFunc) {
|
||||
m_vFunc();
|
||||
if (tmpVGUIMenuButton1) {
|
||||
tmpVGUIMenuButton1();
|
||||
}
|
||||
ret = true;
|
||||
}
|
||||
|
@ -165,6 +165,6 @@ VGUIMenuButton::SetIcon (string strName)
|
|||
void
|
||||
VGUIMenuButton::SetFunc (void(void) vFunc)
|
||||
{
|
||||
m_vFunc = vFunc;
|
||||
tmpVGUIMenuButton1 = vFunc;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -45,7 +45,7 @@ VGUIPic::VGUIPic(void)
|
|||
void
|
||||
VGUIPic::Spawned(void)
|
||||
{
|
||||
SetSize([16,16]);
|
||||
SetSize([16,16, 0]);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -66,6 +66,7 @@ void
|
|||
VGUIPic::SetImage (string strName)
|
||||
{
|
||||
m_strImage = strName;
|
||||
SetSize(drawgetimagesize(m_strImage));
|
||||
}
|
||||
|
||||
string
|
||||
|
|
|
@ -21,6 +21,8 @@ enumflags
|
|||
RADIO_ACTIVE
|
||||
};
|
||||
|
||||
.void(void) tmpVGUIRadio1;
|
||||
|
||||
class VGUIRadio:VGUIWidget
|
||||
{
|
||||
public:
|
||||
|
@ -40,7 +42,6 @@ private:
|
|||
float m_flAlpha;
|
||||
vector m_vecSize;
|
||||
string m_strTitle;
|
||||
virtual void(void) m_vFunc = 0;
|
||||
};
|
||||
|
||||
void VGUIRadio::VGUIRadio(void)
|
||||
|
@ -78,7 +79,7 @@ void VGUIRadio::SetValue (int iValue)
|
|||
}
|
||||
void VGUIRadio::SetFunc (void(void) vFunc)
|
||||
{
|
||||
m_vFunc = vFunc;
|
||||
tmpVGUIRadio1 = vFunc;
|
||||
}
|
||||
|
||||
void VGUIRadio::Draw(void)
|
||||
|
@ -130,8 +131,8 @@ bool VGUIRadio::Input (float flEVType, float flKey, float flChar, float flDevID)
|
|||
} else if (flEVType == IE_KEYUP) {
|
||||
if (flKey == K_MOUSE1) {
|
||||
if (m_iFlags & RADIO_DOWN && Util_MouseAbove(g_vecMousePos, m_parent.m_vecOrigin + m_vecOrigin, m_vecSize)) {
|
||||
if (m_vFunc) {
|
||||
m_vFunc();
|
||||
if (tmpVGUIRadio1) {
|
||||
tmpVGUIRadio1();
|
||||
}
|
||||
SetValue(TRUE);
|
||||
ret = true;
|
||||
|
|
|
@ -21,6 +21,8 @@ enumflags
|
|||
SCROLLBAR_SLIDER_DOWN
|
||||
};
|
||||
|
||||
.void(void) tmpVGUIScrollbar1;
|
||||
|
||||
/** This is a scollbar widget. It needs rework. */
|
||||
class VGUIScrollbar:VGUIWidget
|
||||
{
|
||||
|
@ -53,8 +55,6 @@ private:
|
|||
float m_flMax;
|
||||
float m_flStep;
|
||||
float m_flValue;
|
||||
|
||||
virtual void(void) m_vChangedCB = 0;
|
||||
};
|
||||
|
||||
void VGUIScrollbar::VGUIScrollbar(void)
|
||||
|
@ -244,8 +244,8 @@ void VGUIScrollbar::SetValue (float flVal, int iCallBack)
|
|||
{
|
||||
m_flValue = bound(m_flMin, flVal, m_flMax);
|
||||
|
||||
if (m_vChangedCB && iCallBack) {
|
||||
m_vChangedCB();
|
||||
if (tmpVGUIScrollbar1 && iCallBack) {
|
||||
tmpVGUIScrollbar1();
|
||||
}
|
||||
}
|
||||
float VGUIScrollbar::GetValue(void)
|
||||
|
@ -255,5 +255,5 @@ float VGUIScrollbar::GetValue(void)
|
|||
|
||||
void VGUIScrollbar::CallOnChange (void(void) vFunc)
|
||||
{
|
||||
m_vChangedCB = vFunc;
|
||||
tmpVGUIScrollbar1 = vFunc;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ typedef enumflags
|
|||
VGUIWindowMiniaturizable,
|
||||
VGUIWindowResizeable,
|
||||
VGUIWindowMovable,
|
||||
VGUIWindowFullscreen
|
||||
} vguiWindowStyle_t;
|
||||
|
||||
#define VGUIWindowStyleDefault VGUIWindowMovable | \
|
||||
|
@ -35,6 +36,10 @@ typedef enumflags
|
|||
VGUIWindowClosable | \
|
||||
VGUIWindowMiniaturizable
|
||||
|
||||
/* TODO: MOVE THESE INTO VGUIWindow! COMPILER NEEDS TO BE FIXED FIRST HOWEVER. */
|
||||
.void(void) tmpVGUIWindow1;
|
||||
.void(void) tmpVGUIWindow2;
|
||||
|
||||
/** Top-most window class in VGUILib */
|
||||
class VGUIWindow:VGUIWidget
|
||||
{
|
||||
|
@ -51,13 +56,20 @@ public:
|
|||
/** Returns the icon of the window widget. */
|
||||
nonvirtual string GetIcon(void);
|
||||
|
||||
/** Sets the style mask of the specified window. */
|
||||
nonvirtual void SetStyleMask(vguiWindowStyle_t);
|
||||
|
||||
/** Called when the window is was resized by the user. */
|
||||
nonvirtual void CallOnResize(void(void) vFunc);
|
||||
/** Called when the window has been repositioned by the user. */
|
||||
nonvirtual void CallOnMove(void(void) vFunc);
|
||||
|
||||
/** Sets the style mask of the specified window. */
|
||||
nonvirtual void SetStyleMask(vguiWindowStyle_t);
|
||||
/** Called when the VGUIWindow got moved successfully. */
|
||||
virtual void WindowDidMove(vector, vector);
|
||||
/** Called when the VGUIWindow got resized successfully. */
|
||||
virtual void WindowDidResize(vector, vector);
|
||||
/** Called when the VGUIWindow was successfully closed. */
|
||||
virtual void WindowDidClose(void);
|
||||
|
||||
/* overrides */
|
||||
virtual void Draw(void);
|
||||
|
@ -74,9 +86,6 @@ private:
|
|||
vguiWindowStyle_t m_styleMask;
|
||||
|
||||
VGUIButton m_btnClose;
|
||||
|
||||
virtual void(void) m_vResizeCB = 0;
|
||||
virtual void(void) m_vMoveCB = 0;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -97,11 +106,29 @@ VGUIWindow::SetStyleMask(vguiWindowStyle_t val)
|
|||
m_styleMask = val;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIWindow::CallOnResize(void(void) func)
|
||||
{
|
||||
//#warning "SetFunc in VGUIButton is DEPRECATED. Compiler IS generating JUNK in the old way. Please override VGUIButton and define a OnMouseDown/Up method instead"
|
||||
//m_vFunc = vFunc;
|
||||
tmpVGUIWindow1 = func;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIWindow::CallOnMove(void(void) func)
|
||||
{
|
||||
//#warning "SetFunc in VGUIButton is DEPRECATED. Compiler IS generating JUNK in the old way. Please override VGUIButton and define a OnMouseDown/Up method instead"
|
||||
//m_vFunc = vFunc;
|
||||
tmpVGUIWindow2 = func;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
VGUIWindow::Spawned(void)
|
||||
{
|
||||
static void WindowButtonClose(void) {
|
||||
m_parent.Hide();
|
||||
static void VGUIWindowButtonClose(void) {
|
||||
VGUIButton winSelf = (VGUIButton)self;
|
||||
winSelf.m_parent.Hide();
|
||||
}
|
||||
|
||||
SetMinSize([64,64]);
|
||||
|
@ -119,7 +146,7 @@ VGUIWindow::Spawned(void)
|
|||
m_btnClose.SetIconColor([1,1,1]);
|
||||
#endif
|
||||
m_btnClose.SetColor(m_vecColor);
|
||||
m_btnClose.SetFunc(WindowButtonClose);
|
||||
m_btnClose.SetFunc(VGUIWindowButtonClose);
|
||||
m_btnClose.SetSize([20,20]);
|
||||
Add(m_btnClose);
|
||||
|
||||
|
@ -144,40 +171,59 @@ string VGUIWindow::GetIcon(void)
|
|||
return m_strIcon;
|
||||
}
|
||||
|
||||
void VGUIWindow:: SizeChanged (vector vecOld, vector vecNew)
|
||||
void VGUIWindow::SizeChanged (vector vecOld, vector vecNew)
|
||||
{
|
||||
m_btnClose.SetPos([vecNew[0] - 24, 4]);
|
||||
}
|
||||
|
||||
void VGUIWindow::CallOnMove (void(void) vFunc)
|
||||
void
|
||||
VGUIWindow::WindowDidMove(vector oldPosition, vector newPosition)
|
||||
{
|
||||
m_vMoveCB = vFunc;
|
||||
}
|
||||
void VGUIWindow::CallOnResize (void(void) vFunc)
|
||||
{
|
||||
m_vResizeCB = vFunc;
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
VGUIWindow::WindowDidResize(vector oldSize, vector newSize)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
VGUIWindow::WindowDidClose(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VGUIWindow::Draw(void)
|
||||
{
|
||||
#ifdef CLASSIC_VGUI
|
||||
drawfill(m_vecOrigin, m_vecSize, [0,0,0], 0.5);
|
||||
if (m_styleMask & VGUIWindowFullscreen)
|
||||
drawfill([0,0], video_res, [0,0,0], 0.5);
|
||||
else
|
||||
drawfill(m_vecOrigin, m_vecSize, [0,0,0], 0.5);
|
||||
|
||||
if (!(m_styleMask & VGUIWindowBorderless)) {
|
||||
drawfill(m_vecOrigin, [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
drawfill(m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
}
|
||||
|
||||
if (m_styleMask & VGUIWindowResizeable) {
|
||||
drawpic(m_vecOrigin + m_vecSize - [16,16], "textures/ui/steam/icon_resizer", [16,16], m_vecColor, 1.0f, 0);
|
||||
}
|
||||
#else
|
||||
drawfill(m_vecOrigin, m_vecSize, m_vecColor, m_flAlpha);
|
||||
if (m_styleMask & VGUIWindowFullscreen)
|
||||
drawfill([0,0], video_res, m_vecColor, m_flAlpha);
|
||||
else
|
||||
drawfill(m_vecOrigin, m_vecSize, m_vecColor, m_flAlpha);
|
||||
|
||||
if (!(m_styleMask & VGUIWindowBorderless)) {
|
||||
drawfill(m_vecOrigin, [m_vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
}
|
||||
|
||||
if (m_styleMask & VGUIWindowResizeable) {
|
||||
drawpic(m_vecOrigin + m_vecSize - [16,16], "textures/ui/steam/icon_resizer", [16,16], m_vecColor, 1.0f, 0);
|
||||
|
@ -226,22 +272,24 @@ bool VGUIWindow::Input (float flEVType, float flKey, float flChar, float flDevID
|
|||
|
||||
if (m_iFlags & WINDOW_RESIZING) {
|
||||
if (flEVType == IE_MOUSEABS) {
|
||||
vector vNewScale = [flKey, flChar] - m_vecOrigin - m_vecSize;
|
||||
SetSize(GetSize() + vNewScale);
|
||||
|
||||
if (m_vResizeCB) {
|
||||
m_vResizeCB();
|
||||
}
|
||||
vector oldSize = m_vecSize;
|
||||
vector newSize = GetSize() + ([flKey, flChar] - m_vecOrigin - m_vecSize);
|
||||
SetSize(newSize);
|
||||
WindowDidResize(oldSize, newSize);
|
||||
|
||||
if (tmpVGUIWindow1)
|
||||
tmpVGUIWindow1();
|
||||
}
|
||||
ret = true;
|
||||
} else if (m_iFlags & WINDOW_DRAGGING) {
|
||||
if (flEVType == IE_MOUSEABS) {
|
||||
vector vNewPos = [flKey, flChar] - m_vecOrigin;
|
||||
SetPos(GetPos() + vNewPos + m_vecDragOffset);
|
||||
|
||||
if (m_vMoveCB) {
|
||||
m_vMoveCB();
|
||||
}
|
||||
vector oldPos = m_vecOrigin;
|
||||
vector newPos = GetPos() + ([flKey, flChar] - m_vecOrigin) + m_vecDragOffset;
|
||||
SetPos(newPos);
|
||||
WindowDidMove(oldPos, newPos);
|
||||
|
||||
if (tmpVGUIWindow2)
|
||||
tmpVGUIWindow2();
|
||||
}
|
||||
ret = true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue