Introducing VGUITheme, so we can start removing the CLASSIC_VGUI ifdef and start overriding visual appearance on any widget or group of widgets.
This commit is contained in:
parent
9fc3503652
commit
90685f2495
11 changed files with 369 additions and 144 deletions
|
@ -1,4 +1,6 @@
|
|||
#includelist
|
||||
../vgui/ui_color.qc
|
||||
../vgui/ui_theme.qc
|
||||
../vgui/ui.qc
|
||||
../vgui/ui_control.qc
|
||||
../vgui/ui_button.qc
|
||||
|
|
|
@ -34,18 +34,6 @@
|
|||
font_s g_fntDefault;
|
||||
var int g_vguiWidgetCount;
|
||||
|
||||
#ifdef CLASSIC_VGUI
|
||||
#ifndef UI_MAINCOLOR
|
||||
#define UI_MAINCOLOR [255,170,0] / 255
|
||||
#endif
|
||||
#ifndef UI_MAINALPHA
|
||||
#define UI_MAINALPHA 255
|
||||
#endif
|
||||
#else
|
||||
var vector UI_MAINCOLOR;
|
||||
var float UI_MAINALPHA;
|
||||
#endif
|
||||
|
||||
/** Return whether a VGUI panel is active on the 2D overlay level. */
|
||||
int
|
||||
VGUI_Active(void)
|
||||
|
@ -118,6 +106,11 @@ public:
|
|||
/** Hide the widget. */
|
||||
nonvirtual void Hide(void);
|
||||
|
||||
/** Sets the VGUITheme to use on this widget (and any children it may have) */
|
||||
nonvirtual void SetTheme(VGUITheme);
|
||||
/** Returns the VGUI that will be used on this widget. */
|
||||
nonvirtual VGUITheme GetTheme(void);
|
||||
|
||||
/** Called when the position of the widget was changed in any capacity. */
|
||||
virtual void PositionChanged(vector, vector);
|
||||
/** Called when the size of the widget has changed in any capacity. */
|
||||
|
@ -143,6 +136,7 @@ private:
|
|||
VGUIWidget m_parent;
|
||||
int m_iFlags;
|
||||
bool m_bVisible;
|
||||
VGUITheme m_theme;
|
||||
};
|
||||
|
||||
void
|
||||
|
@ -160,6 +154,26 @@ VGUIWidget::VGUIWidget(void)
|
|||
Spawned();
|
||||
}
|
||||
|
||||
void
|
||||
VGUIWidget::SetTheme(VGUITheme theme)
|
||||
{
|
||||
m_theme = theme;
|
||||
}
|
||||
|
||||
VGUITheme
|
||||
VGUIWidget::GetTheme(void)
|
||||
{
|
||||
/* if no theme set, but we have a parent... inherit the parents' theme recursively */
|
||||
if (!m_theme && m_parent)
|
||||
return m_parent.GetTheme();
|
||||
|
||||
/* we have nothing, use the default one. */
|
||||
if (!m_theme)
|
||||
m_theme = spawn(VGUITheme);
|
||||
|
||||
return m_theme;
|
||||
}
|
||||
|
||||
bool
|
||||
VGUIWidget::Visible(void)
|
||||
{
|
||||
|
|
|
@ -156,18 +156,12 @@ void
|
|||
VGUIButton::Draw(void)
|
||||
{
|
||||
#ifndef CLASSIC_VGUI
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, m_vecColor, m_flAlpha);
|
||||
VGUITheme theme = GetTheme();
|
||||
|
||||
if (m_iFlags & BUTTON_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
theme.DrawButton(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_STATE_ACTIVE);
|
||||
} else {
|
||||
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, [m_vecSize[0], 1], [1,1,1], 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);
|
||||
theme.DrawButton(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_STATE_NORMAL);
|
||||
}
|
||||
|
||||
float textPadding = 8;
|
||||
|
@ -178,14 +172,14 @@ VGUIButton::Draw(void)
|
|||
|
||||
length = Font_StringWidth(keyText, FALSE, g_fntDefault);
|
||||
textPadding += length + 8;
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [8, 8], keyText, g_fntDefault);
|
||||
theme.DrawText(m_parent.m_vecOrigin + m_vecOrigin + [8, 8], keyText, m_vecSize, g_fntDefault);
|
||||
}
|
||||
|
||||
if (m_strTitle) {
|
||||
if (m_iFlags & BUTTON_HOVER) {
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [textPadding, 8], m_strTitle, g_fntDefault);
|
||||
theme.DrawText(m_parent.m_vecOrigin + m_vecOrigin + [textPadding, 8], m_strTitle, m_vecSize, g_fntDefault);
|
||||
} else {
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [textPadding, 8], m_strTitle, g_fntDefault);
|
||||
theme.DrawText(m_parent.m_vecOrigin + m_vecOrigin + [textPadding, 8], m_strTitle, m_vecSize, g_fntDefault);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -256,9 +250,6 @@ VGUIButton::Input(float flEVType, float flKey, float flChar, float flDevID)
|
|||
if (flKey == K_MOUSE1) {
|
||||
FlagRemove(BUTTON_LASTACTIVE);
|
||||
if (mouseHover) {
|
||||
if (tmpVGUIButton1)
|
||||
tmpVGUIButton1();
|
||||
|
||||
OnMouseDown();
|
||||
|
||||
FlagAdd(BUTTON_DOWN);
|
||||
|
@ -279,6 +270,9 @@ VGUIButton::Input(float flEVType, float flKey, float flChar, float flDevID)
|
|||
if (m_iFlags & BUTTON_DOWN && mouseHover) {
|
||||
OnMouseUp();
|
||||
|
||||
if (tmpVGUIButton1)
|
||||
tmpVGUIButton1();
|
||||
|
||||
if (m_strExec)
|
||||
localcmd(sprintf("%s\n", m_strExec));
|
||||
|
||||
|
|
|
@ -76,13 +76,12 @@ void VGUICheckbox::SetValue (int iValue)
|
|||
void VGUICheckbox::Draw(void)
|
||||
{
|
||||
#ifndef CLASSIC_VGUI
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, m_vecColor, m_flAlpha);
|
||||
VGUITheme theme = GetTheme();
|
||||
|
||||
theme.DrawControlBackground(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_STATE_ACTIVE);
|
||||
|
||||
if (m_iFlags & CHECKBOX_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
theme.DrawBorder(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_BORDER_INSET, __NULL__);
|
||||
}
|
||||
|
||||
if (m_iFlags & CHECKBOX_CHECKED) {
|
||||
|
@ -90,6 +89,10 @@ void VGUICheckbox::Draw(void)
|
|||
} else {
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin, "textures/ui/steam/icon_emptybox", [16,16], [1,1,1], 1.0f, 0);
|
||||
}
|
||||
|
||||
if (m_strTitle) {
|
||||
theme.DrawText(m_parent.m_vecOrigin + m_vecOrigin + [24, 3], m_strTitle, m_vecSize, g_fntDefault);
|
||||
}
|
||||
#else
|
||||
if (m_iFlags & CHECKBOX_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
|
@ -103,10 +106,10 @@ void VGUICheckbox::Draw(void)
|
|||
} else {
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin, "textures/ui/steam/icon_emptybox", [16,16], m_vecColor, 1.0f, 0);
|
||||
}
|
||||
#endif
|
||||
if (m_strTitle) {
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [24, 3], m_strTitle, g_fntDefault);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool VGUICheckbox::Input (float flEVType, float flKey, float flChar, float flDevID)
|
||||
|
|
48
src/vgui/ui_color.qc
Normal file
48
src/vgui/ui_color.qc
Normal file
|
@ -0,0 +1,48 @@
|
|||
|
||||
/** Container class that'll deal with handling colors via a variety of different means. */
|
||||
class VGUIColor
|
||||
{
|
||||
public:
|
||||
void VGUIColor(void);
|
||||
|
||||
nonvirtual void SetColor(vector);
|
||||
nonvirtual void SetColorWithAlpha(vector, float);
|
||||
nonvirtual vector GetColor(void);
|
||||
nonvirtual float GetAlpha(void);
|
||||
|
||||
private:
|
||||
vector m_colorValue;
|
||||
float m_alphaValue;
|
||||
};
|
||||
|
||||
void
|
||||
VGUIColor::VGUIColor(void)
|
||||
{
|
||||
m_colorValue = [0.0f, 0.0f, 0.0f];
|
||||
m_alphaValue = 1.0f;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIColor::SetColor(vector value)
|
||||
{
|
||||
m_colorValue = value;
|
||||
}
|
||||
|
||||
void
|
||||
VGUIColor::SetColorWithAlpha(vector color, float alpha)
|
||||
{
|
||||
m_colorValue = color;
|
||||
m_alphaValue = alpha;
|
||||
}
|
||||
|
||||
vector
|
||||
VGUIColor::GetColor(void)
|
||||
{
|
||||
return m_colorValue;
|
||||
}
|
||||
|
||||
float
|
||||
VGUIColor::GetAlpha(void)
|
||||
{
|
||||
return m_alphaValue;
|
||||
}
|
|
@ -14,28 +14,6 @@
|
|||
* 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:
|
||||
|
|
|
@ -85,19 +85,22 @@ void VGUIRadio::SetFunc (void(void) vFunc)
|
|||
void VGUIRadio::Draw(void)
|
||||
{
|
||||
#ifndef CLASSIC_VGUI
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, m_vecColor, m_flAlpha);
|
||||
VGUITheme theme = GetTheme();
|
||||
|
||||
theme.DrawControlBackground(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_STATE_ACTIVE);
|
||||
|
||||
if (m_iFlags & RADIO_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, m_vecSize[1] - 1], [m_vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, m_vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [m_vecSize[0] - 1, 1], [1, m_vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
theme.DrawBorder(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_BORDER_INSET, __NULL__);
|
||||
}
|
||||
if (m_iFlags & RADIO_ACTIVE) {
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin, "textures/ui/steam/icon_radiosel", [16,16], [1,1,1], 1.0f, 0);
|
||||
} else {
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin, "textures/ui/steam/icon_radiounsel", [16,16], [1,1,1], 1.0f, 0);
|
||||
}
|
||||
|
||||
if (m_strTitle) {
|
||||
theme.DrawText(m_parent.m_vecOrigin + m_vecOrigin + [24, 3], m_strTitle, m_vecSize, g_fntDefault);
|
||||
}
|
||||
#else
|
||||
if (m_iFlags & RADIO_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], m_vecColor, 1.0f);
|
||||
|
@ -110,11 +113,11 @@ void VGUIRadio::Draw(void)
|
|||
} else {
|
||||
drawpic(m_parent.m_vecOrigin + m_vecOrigin, "textures/ui/steam/icon_radiounsel", [16,16], m_vecColor, 1.0f, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_strTitle) {
|
||||
Font_DrawText(m_parent.m_vecOrigin + m_vecOrigin + [24, 3], m_strTitle, g_fntDefault);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool VGUIRadio::Input (float flEVType, float flKey, float flChar, float flDevID)
|
||||
|
|
|
@ -66,64 +66,49 @@ void VGUIScrollbar::VGUIScrollbar(void)
|
|||
void VGUIScrollbar::Draw(void)
|
||||
{
|
||||
vector vecSize = [20, m_iLength];
|
||||
vector vecUpPos = m_parent.m_vecOrigin + m_vecOrigin;
|
||||
vector vecDownPos = m_parent.m_vecOrigin + m_vecOrigin + [0, m_iLength - 20];
|
||||
vector vecSliderPos = m_parent.m_vecOrigin + m_vecOrigin + [0, 20];
|
||||
|
||||
#ifndef CLASSIC_VGUI
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, vecSize, m_vecColor, m_flAlpha);
|
||||
VGUITheme theme = GetTheme();
|
||||
|
||||
vecSliderPos[1] += (m_iLength - 60) * (m_flValue / m_flMax);
|
||||
|
||||
if (m_iFlags & BUTTON_DOWN) {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, vecSize[1] - 1], [vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [vecSize[0] - 1, 1], [1, vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
theme.DrawScrollbar(m_parent.m_vecOrigin + m_vecOrigin, vecSize, VGUI_STATE_ACTIVE);
|
||||
} else {
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, vecSize[1] - 1], [vecSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [vecSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, vecSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [vecSize[0] - 1, 1], [1, vecSize[1] - 2], [0,0,0], 0.5f);
|
||||
theme.DrawScrollbar(m_parent.m_vecOrigin + m_vecOrigin, vecSize, VGUI_STATE_NORMAL);
|
||||
}
|
||||
|
||||
// Slider Button
|
||||
if (m_iFlags & SCROLLBAR_SLIDER_DOWN) {
|
||||
theme.DrawScroller(vecSliderPos, [20,20], VGUI_STATE_ACTIVE);
|
||||
} else {
|
||||
theme.DrawScroller(vecSliderPos, [20,20], VGUI_STATE_NORMAL);
|
||||
}
|
||||
|
||||
// Button UP
|
||||
if (m_iFlags & SCROLLBAR_UP_DOWN) {
|
||||
theme.DrawButton(vecUpPos, [20,20], VGUI_STATE_ACTIVE);
|
||||
} else {
|
||||
theme.DrawButton(vecUpPos, [20,20], VGUI_STATE_NORMAL);
|
||||
}
|
||||
drawpic(vecUpPos + [2,2], "textures/ui/steam/icon_up", [16,16], [1,1,1], 1.0f, 0);
|
||||
|
||||
if (m_iFlags & SCROLLBAR_DN_DOWN) {
|
||||
theme.DrawButton(vecDownPos, [20,20], VGUI_STATE_ACTIVE);
|
||||
} else {
|
||||
theme.DrawButton(vecDownPos, [20,20], VGUI_STATE_NORMAL);
|
||||
}
|
||||
drawpic(vecDownPos + [2,2], "textures/ui/steam/icon_down", [16,16], [1,1,1], 1.0f, 0);
|
||||
|
||||
#else
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, vecSize[1] - 1], [vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [vecSize[0], 1], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [0, 1], [1, vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin + [vecSize[0] - 1, 1], [1, vecSize[1] - 2], m_vecColor, 1.0f);
|
||||
#endif
|
||||
|
||||
vector vecUpPos = m_parent.m_vecOrigin + m_vecOrigin;
|
||||
vector vecDownPos = m_parent.m_vecOrigin + m_vecOrigin + [0, m_iLength - 20];
|
||||
vector vecSliderPos = m_parent.m_vecOrigin + m_vecOrigin + [0, 20];
|
||||
|
||||
vecSliderPos[1] += (m_iLength - 60) * (m_flValue / m_flMax);
|
||||
|
||||
// Slider Button
|
||||
drawfill(vecSliderPos, [20,20], m_vecColor, m_flAlpha);
|
||||
if (m_iFlags & SCROLLBAR_SLIDER_DOWN) {
|
||||
drawfill(vecSliderPos, [20, 1], [0,0,0], 0.5f);
|
||||
drawfill(vecSliderPos + [0, 19], [20, 1], [1,1,1], 0.5f);
|
||||
drawfill(vecSliderPos + [0, 1], [1, 18], [0,0,0], 0.5f);
|
||||
drawfill(vecSliderPos + [19, 1], [1, 18], [1,1,1], 0.5f);
|
||||
} else {
|
||||
drawfill(vecSliderPos, [20, 1], [1,1,1], 0.5f);
|
||||
drawfill(vecSliderPos + [0, 19], [20, 1], [0,0,0], 0.5f);
|
||||
drawfill(vecSliderPos + [0, 1], [1, 18], [1,1,1], 0.5f);
|
||||
drawfill(vecSliderPos + [19, 1], [1, 18], [0,0,0], 0.5f);
|
||||
}
|
||||
|
||||
// Button UP
|
||||
#ifndef CLASSIC_VGUI
|
||||
drawfill(vecUpPos, [20,20], m_vecColor, m_flAlpha);
|
||||
if (m_iFlags & SCROLLBAR_UP_DOWN) {
|
||||
drawfill(vecUpPos, [20, 1], [0,0,0], 0.5f);
|
||||
drawfill(vecUpPos + [0, 19], [20, 1], [1,1,1], 0.5f);
|
||||
drawfill(vecUpPos + [0, 1], [1, 18], [0,0,0], 0.5f);
|
||||
drawfill(vecUpPos + [19, 1], [1, 18], [1,1,1], 0.5f);
|
||||
} else {
|
||||
drawfill(vecUpPos, [20, 1], [1,1,1], 0.5f);
|
||||
drawfill(vecUpPos + [0, 19], [20, 1], [0,0,0], 0.5f);
|
||||
drawfill(vecUpPos + [0, 1], [1, 18], [1,1,1], 0.5f);
|
||||
drawfill(vecUpPos + [19, 1], [1, 18], [0,0,0], 0.5f);
|
||||
}
|
||||
drawpic(vecUpPos + [2,2], "textures/ui/steam/icon_up", [16,16], [1,1,1], 1.0f, 0);
|
||||
#else
|
||||
if (m_iFlags & SCROLLBAR_UP_DOWN) {
|
||||
drawfill(vecUpPos, [20,20], m_vecColor, 0.25f);
|
||||
drawfill(vecUpPos, [20, 1], m_vecColor, 1.0f);
|
||||
|
@ -137,23 +122,8 @@ void VGUIScrollbar::Draw(void)
|
|||
drawfill(vecUpPos + [19, 1], [1, 18], m_vecColor, 1.0f);
|
||||
}
|
||||
drawpic(vecUpPos + [2,2], "textures/ui/steam/icon_up", [16,16], m_vecColor, 1.0f, 0);
|
||||
#endif
|
||||
|
||||
// Button DOWN
|
||||
#ifndef CLASSIC_VGUI
|
||||
drawfill(vecDownPos, [20,20], m_vecColor, m_flAlpha);
|
||||
if (m_iFlags & SCROLLBAR_DN_DOWN) {
|
||||
drawfill(vecDownPos, [20, 1], [0,0,0], 0.5f);
|
||||
drawfill(vecDownPos + [0, 19], [20, 1], [1,1,1], 0.5f);
|
||||
drawfill(vecDownPos + [0, 1], [1, 18], [0,0,0], 0.5f);
|
||||
drawfill(vecDownPos + [19, 1], [1, 18], [1,1,1], 0.5f);
|
||||
} else {
|
||||
drawfill(vecDownPos, [20, 1], [1,1,1], 0.5f);
|
||||
drawfill(vecDownPos+ [0, 19], [20, 1], [0,0,0], 0.5f);
|
||||
drawfill(vecDownPos + [0, 1], [1, 18], [1,1,1], 0.5f);
|
||||
drawfill(vecDownPos + [19, 1], [1, 18], [0,0,0], 0.5f);
|
||||
}
|
||||
drawpic(vecDownPos + [2,2], "textures/ui/steam/icon_down", [16,16], [1,1,1], 1.0f, 0);
|
||||
#else
|
||||
if (m_iFlags & SCROLLBAR_DN_DOWN) {
|
||||
drawfill(vecDownPos, [20,20], m_vecColor, 0.25f);
|
||||
drawfill(vecDownPos, [20, 1], m_vecColor, 1.0f);
|
||||
|
|
|
@ -67,10 +67,9 @@ void VGUITextBox::Draw(void)
|
|||
{
|
||||
|
||||
#ifdef CLASSIC_VGUI
|
||||
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, [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);
|
||||
VGUITheme theme = GetTheme();
|
||||
|
||||
theme. DrawTextBackground(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, VGUI_STATE_NORMAL);
|
||||
#else
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, m_vecSize, [0,0,0], 0.25f);
|
||||
drawfill(m_parent.m_vecOrigin + m_vecOrigin, [m_vecSize[0], 1], [0,0,0], 0.5f);
|
||||
|
|
207
src/vgui/ui_theme.qc
Normal file
207
src/vgui/ui_theme.qc
Normal file
|
@ -0,0 +1,207 @@
|
|||
/* For VGUITheme, we want to allow everyone some basic overrides to handle most of the drawing
|
||||
tasks. However, this is matter that will slowly expand to encompass more features.
|
||||
If you plan on doing something really 'out there' that you can't do within this Theme framework,
|
||||
I encourage you to just maintain your own objects with overridden draw functions for best
|
||||
forward compatibility.
|
||||
|
||||
Why does this exist? Because the support for VGUI type elements needs variable appearances
|
||||
and we can't rely on ifdefs to do the bulk of the work, that's why. The official inspiration
|
||||
also referred to as TrackerUI has changed many times in appearance and we'd like to offer
|
||||
means of handling any such styles.
|
||||
*/
|
||||
|
||||
#ifdef CLASSIC_VGUI
|
||||
#ifndef UI_MAINCOLOR
|
||||
#define UI_MAINCOLOR [255,170,0] / 255
|
||||
#endif
|
||||
#ifndef UI_MAINALPHA
|
||||
#define UI_MAINALPHA 255
|
||||
#endif
|
||||
#else
|
||||
var vector UI_MAINCOLOR;
|
||||
var float UI_MAINALPHA;
|
||||
#endif
|
||||
|
||||
/** State of the widget we're going to draw. */
|
||||
typedef enum
|
||||
{
|
||||
VGUI_STATE_NORMAL, /** The widget is in normal operation. */
|
||||
VGUI_STATE_ACTIVE, /** The widget is active. */
|
||||
VGUI_STATE_HOVER, /** The mouse or another pointing device is hovering over the widget. */
|
||||
VGUI_STATE_FOCUSED, /** The widget is focused. */
|
||||
VGUI_STATE_DISABLED, /** The widget is disabled. */
|
||||
VGUI_STATE_CHECKED /** The widget is pressed or enabled. */
|
||||
} VGUIDrawState_t;
|
||||
|
||||
/** Style of the border to be drawn within the VGUITheme. */
|
||||
typedef enum
|
||||
{
|
||||
VGUI_BORDER_LINE, /**< Thin line border. */
|
||||
VGUI_BORDER_INSET, /**< Inset border, used for control elements. */
|
||||
VGUI_BORDER_OUTSET, /**< Outset border, often used for windows. */
|
||||
//VGUI_BORDER_DOTTED,
|
||||
//VGUI_BORDER_DASHED,
|
||||
//VGUI_BORDER_RIDGE,
|
||||
//VGUI_BORDER_GROOVE
|
||||
VGUI_BORDER_NONE /**< No border */
|
||||
} VGUIBorderStyle_t;
|
||||
|
||||
/** Abstract class than can be set/overriden to customize to final appearance of GUI widgets */
|
||||
class
|
||||
VGUITheme
|
||||
{
|
||||
public:
|
||||
virtual void VGUITheme(void);
|
||||
|
||||
/** Draw a border at the specified position, size and VGUIBorderStyle_t. */
|
||||
virtual void DrawBorder(vector, vector, VGUIBorderStyle_t, VGUIColor);
|
||||
/** Draw a control item background at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawControlBackground(vector, vector, VGUIDrawState_t);
|
||||
/** Draw a text field background at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawTextBackground(vector, vector, VGUIDrawState_t);
|
||||
/** Draw a window background at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawWindowBackground(vector, vector, VGUIDrawState_t);
|
||||
/** Draw a button body at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawButton(vector, vector, VGUIDrawState_t);
|
||||
/** Draw a scroller at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawScroller(vector, vector, VGUIDrawState_t);
|
||||
/** Draw a scrollbar at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawScrollbar(vector, vector, VGUIDrawState_t);
|
||||
/** Draw a progress indicator at the specified position, size and VGUIDrawState_t. */
|
||||
virtual void DrawProgressIndicator(vector, vector, float, VGUIDrawState_t);
|
||||
/** Draws generic text onto a widget. */
|
||||
virtual void DrawText(vector, string, vector, font_s);
|
||||
/** Draw a window body. */
|
||||
virtual void DrawWindow(vector, vector, VGUIDrawState_t);
|
||||
|
||||
private:
|
||||
VGUIColor m_controlBackgroundColor;
|
||||
VGUIColor m_windowBackgroundColor;
|
||||
VGUIColor m_textBackgroundColor;
|
||||
VGUIColor m_textColor;
|
||||
VGUIColor m_windowBorderColor;
|
||||
};
|
||||
|
||||
void
|
||||
VGUITheme::VGUITheme(void)
|
||||
{
|
||||
m_controlBackgroundColor = spawn(VGUIColor);
|
||||
//m_controlBackgroundColor.SetColor([0.298, 0.345, 0.267]);
|
||||
m_controlBackgroundColor.SetColor(UI_MAINCOLOR);
|
||||
m_windowBackgroundColor = spawn(VGUIColor);
|
||||
//m_windowBackgroundColor.SetColor([0.298, 0.345, 0.267]);
|
||||
m_windowBackgroundColor.SetColor(UI_MAINCOLOR);
|
||||
m_textBackgroundColor = spawn(VGUIColor);
|
||||
//m_textBackgroundColor.SetColor([0.243, 0.275, 0.216]);
|
||||
m_textBackgroundColor.SetColor(UI_MAINCOLOR);
|
||||
m_textColor = spawn(VGUIColor);
|
||||
//m_textColor.SetColor([0.847, 0.871, 0.827]);
|
||||
m_textColor.SetColor(UI_MAINCOLOR);
|
||||
m_windowBorderColor = spawn(VGUIColor);
|
||||
//m_windowBorderColor.SetColor([0.533, 0.569, 0.502]);
|
||||
m_windowBorderColor.SetColor(UI_MAINCOLOR);
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawBorder(vector atPos, vector withSize, VGUIBorderStyle_t borderStyle, VGUIColor color)
|
||||
{
|
||||
switch (borderStyle) {
|
||||
case VGUI_BORDER_INSET:
|
||||
drawfill(atPos + [0, withSize[1] - 1], [withSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(atPos, [withSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(atPos + [0, 1], [1, withSize[1] - 2], [0,0,0], 0.5f);
|
||||
drawfill(atPos + [withSize[0] - 1, 1], [1, withSize[1] - 2], [1,1,1], 0.5f);
|
||||
break;
|
||||
case VGUI_BORDER_OUTSET:
|
||||
drawfill(atPos + [0, withSize[1] - 1], [withSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(atPos, [withSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(atPos + [0, 1], [1, withSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(atPos + [withSize[0] - 1, 1], [1, withSize[1] - 2], [0,0,0], 0.5f);
|
||||
break;
|
||||
case VGUI_BORDER_LINE:
|
||||
drawfill(atPos + [0, withSize[1] - 1], [withSize[0], 1], color.GetColor(), color.GetAlpha());
|
||||
drawfill(atPos, [withSize[0], 1], color.GetColor(), color.GetAlpha());
|
||||
drawfill(atPos + [0, 1], [1, withSize[1] - 2], color.GetColor(), color.GetAlpha());
|
||||
drawfill(atPos + [withSize[0] - 1, 1], [1, withSize[1] - 2], color.GetColor(), color.GetAlpha());
|
||||
break;
|
||||
default:
|
||||
case VGUI_BORDER_NONE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawControlBackground(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
drawfill(atPos, withSize, m_controlBackgroundColor.GetColor(), m_controlBackgroundColor.GetAlpha());
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawTextBackground(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
drawfill(atPos, withSize, m_textBackgroundColor.GetColor(), m_textBackgroundColor.GetAlpha());
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawWindowBackground(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
drawfill(atPos, withSize, m_windowBackgroundColor.GetColor(), m_windowBackgroundColor.GetAlpha());
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawButton(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
DrawControlBackground(atPos, withSize, drawStyle);
|
||||
|
||||
if (drawStyle == VGUI_STATE_ACTIVE) {
|
||||
drawfill(atPos + [0, withSize[1] - 1], [withSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(atPos, [withSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(atPos + [0, 1], [1, withSize[1] - 2], [0,0,0], 0.5f);
|
||||
drawfill(atPos + [withSize[0] - 1, 1], [1, withSize[1] - 2], [1,1,1], 0.5f);
|
||||
} else {
|
||||
drawfill(atPos + [0, withSize[1] - 1], [withSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(atPos, [withSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(atPos + [0, 1], [1, withSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(atPos + [withSize[0] - 1, 1], [1, withSize[1] - 2], [0,0,0], 0.5f);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawScroller(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
DrawControlBackground(atPos, withSize, drawStyle);
|
||||
drawfill(atPos + [0, withSize[1] - 1], [withSize[0], 1], [0,0,0], 0.5f);
|
||||
drawfill(atPos, [withSize[0], 1], [1,1,1], 0.5f);
|
||||
drawfill(atPos + [0, 1], [1, withSize[1] - 2], [1,1,1], 0.5f);
|
||||
drawfill(atPos + [withSize[0] - 1, 1], [1, withSize[1] - 2], [0,0,0], 0.5f);
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawScrollbar(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
DrawTextBackground(atPos, withSize, drawStyle);
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawProgressIndicator(vector atPos, vector withSize, float progressValue, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
float barLength = (withSize[0] - 4) * progressValue;
|
||||
DrawTextBackground(atPos, withSize, drawStyle);
|
||||
drawfill(atPos + [2, 2], [barLength, withSize[1] - 4], [1,1,1], 1.0f);
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawText(vector atPos, string withText, vector boundSize, font_s textFont)
|
||||
{
|
||||
//drawsetcliparea(atPos[0], atPos[1], boundSize[0], boundSize[1]);
|
||||
//drawfill(atPos, boundSize, [1,1,1], 0.5f);
|
||||
Font_DrawText(atPos, withText, textFont);
|
||||
//drawresetcliparea();
|
||||
}
|
||||
|
||||
void
|
||||
VGUITheme::DrawWindow(vector atPos, vector withSize, VGUIDrawState_t drawStyle)
|
||||
{
|
||||
DrawWindowBackground(atPos, withSize, drawStyle);
|
||||
DrawBorder(atPos, withSize, VGUI_BORDER_OUTSET, m_windowBorderColor);
|
||||
}
|
|
@ -212,23 +212,6 @@ void VGUIWindow::Draw(void)
|
|||
if (m_styleMask & VGUIWindowResizeable) {
|
||||
drawpic(m_vecOrigin + m_vecSize - [16,16], "textures/ui/steam/icon_resizer", [16,16], m_vecColor, 1.0f, 0);
|
||||
}
|
||||
#else
|
||||
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);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_styleMask & VGUIWindowTitled)
|
||||
if (m_strTitle) {
|
||||
|
@ -239,6 +222,30 @@ void VGUIWindow::Draw(void)
|
|||
Font_DrawText(m_vecOrigin + [8, 8], m_strTitle, g_fntDefault);
|
||||
}
|
||||
}
|
||||
#else
|
||||
VGUITheme theme = GetTheme();
|
||||
|
||||
if (m_styleMask & VGUIWindowFullscreen)
|
||||
theme.DrawWindowBackground([0, 0], video_res, VGUI_STATE_ACTIVE);
|
||||
else if (!(m_styleMask & VGUIWindowBorderless))
|
||||
theme.DrawWindow(m_vecOrigin, m_vecSize, VGUI_STATE_ACTIVE);
|
||||
else
|
||||
theme.DrawWindowBackground(m_vecOrigin, m_vecSize, VGUI_STATE_ACTIVE);
|
||||
|
||||
if (m_styleMask & VGUIWindowResizeable) {
|
||||
drawpic(m_vecOrigin + m_vecSize - [16,16], "textures/ui/steam/icon_resizer", [16,16], m_vecColor, 1.0f, 0);
|
||||
}
|
||||
|
||||
if (m_styleMask & VGUIWindowTitled)
|
||||
if (m_strTitle) {
|
||||
if (m_strIcon) {
|
||||
theme.DrawText(m_vecOrigin + [26, 8], m_strTitle, m_vecSize, g_fntDefault);
|
||||
drawpic(m_vecOrigin + [4, 4], m_strIcon, [16,16], [1,1,1], 1.0f, 0);
|
||||
} else {
|
||||
theme.DrawText(m_vecOrigin + [8, 8], m_strTitle, m_vecSize, g_fntDefault);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef UI_DEVELOPER
|
||||
if (m_iFlags & WINDOW_DRAGGING) {
|
||||
|
|
Loading…
Reference in a new issue