diff options
Diffstat (limited to 'game/client/vgui_basepanel.cpp')
| -rw-r--r-- | game/client/vgui_basepanel.cpp | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/game/client/vgui_basepanel.cpp b/game/client/vgui_basepanel.cpp new file mode 100644 index 0000000..2054d47 --- /dev/null +++ b/game/client/vgui_basepanel.cpp @@ -0,0 +1,244 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "vgui_basepanel.h" +#include <KeyValues.h> +#include <vgui/IScheme.h> +#include <vgui/IVGui.h> + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CBasePanel::CBasePanel( vgui::Panel *pParent, const char *panelName ) : BaseClass( pParent, panelName ) +{ + m_bTexturedBackground = false; + m_nBackgroundMaterial = -1; + m_szBgTexture[ 0 ] = 0; + m_bTiled = false; + m_nTextureSize[ 0 ] = 0; + m_nTextureSize[ 1 ] = 0; + + m_bReflectMouse = false; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : x - +// y - +// w - +// h - +//----------------------------------------------------------------------------- +CBasePanel::CBasePanel( vgui::Panel *pParent, const char *panelName, int x, int y, int w, int h ) : + Panel( pParent, panelName ) +{ + SetBounds( x, y, w, h ); + m_bTexturedBackground = false; + m_nBackgroundMaterial = -1; + m_szBgTexture[ 0 ] = 0; + m_bTiled = false; + m_nTextureSize[ 0 ] = 0; + m_nTextureSize[ 1 ] = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CBasePanel::~CBasePanel( void ) +{ + if ( vgui::surface() && m_nBackgroundMaterial != -1 ) + { + vgui::surface()->DestroyTextureID( m_nBackgroundMaterial ); + m_nBackgroundMaterial = -1; + } +} + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CBasePanel::PaintBackground( void ) +{ + if ( !m_bTexturedBackground ) + { + BaseClass::PaintBackground(); + return; + } + + if ( m_nBackgroundMaterial == -1 ) + { + m_nBackgroundMaterial = vgui::surface()->CreateNewTextureID(); + vgui::surface()->DrawSetTextureFile( m_nBackgroundMaterial, m_szBgTexture, true, true ); + } + + vgui::surface()->DrawSetColor( GetFgColor() ); + + // Draw it with texture + vgui::surface()->DrawSetTexture( m_nBackgroundMaterial ); + + if ( m_bTiled && ( !m_nTextureSize[ 0 ] ) ) + { + vgui::surface()->DrawGetTextureSize( m_nBackgroundMaterial, m_nTextureSize[ 0 ], m_nTextureSize[ 1 ] ); + } + + int wide, tall; + GetSize( wide, tall ); + + if ( m_bTiled && m_nTextureSize[ 0 ] && m_nTextureSize[ 1 ] ) + { + int x = 0; + int y = 0; + + while ( y < tall ) + { + vgui::surface()->DrawTexturedRect( 0, 0, m_nTextureSize[ 0 ], m_nTextureSize[ 1 ] ); + + x += m_nTextureSize[ 0 ]; + + if ( x >= wide ) + { + x = 0; + y += m_nTextureSize[ 1 ]; + } + } + } + else + { + vgui::surface()->DrawTexturedRect( 0, 0, wide, tall ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *texname - +//----------------------------------------------------------------------------- +void CBasePanel::SetTexture( const char *texname, bool tiled /*=false*/ ) +{ + m_bTexturedBackground = true; + m_bTiled = tiled; + Q_strncpy( m_szBgTexture, texname, sizeof( m_szBgTexture ) ); + + if ( m_nBackgroundMaterial == -1 ) + { + m_nBackgroundMaterial = vgui::surface()->CreateNewTextureID(); + } + vgui::surface()->DrawSetTextureFile( m_nBackgroundMaterial, m_szBgTexture , true, true); +} + +void CBasePanel::SetReflectMouse( bool reflect ) +{ + m_bReflectMouse = true; +} + +void CBasePanel::OnCursorMoved(int x,int y) +{ + if ( !m_bReflectMouse ) + return; + + if ( !GetParent() ) + return; + + LocalToScreen( x, y ); + + vgui::ivgui()->PostMessage( + GetParent()->GetVPanel(), + new KeyValues( "CursorMoved", "xpos", x, "ypos", y ), + GetVPanel() ); +} + +void CBasePanel::OnMousePressed(vgui::MouseCode code) +{ + if ( !m_bReflectMouse ) + return; + + if ( !GetParent() ) + return; + + vgui::ivgui()->PostMessage( + GetParent()->GetVPanel(), + new KeyValues( "MousePressed", "code", code ), + GetVPanel() ); +} + +void CBasePanel::OnMouseDoublePressed(vgui::MouseCode code) +{ + if ( !m_bReflectMouse ) + return; + + if ( !GetParent() ) + return; + + vgui::ivgui()->PostMessage( + GetParent()->GetVPanel(), + new KeyValues( "MouseDoublePressed", "code", code ), + GetVPanel() ); +} + +void CBasePanel::OnMouseReleased(vgui::MouseCode code) +{ + if ( !m_bReflectMouse ) + return; + + if ( !GetParent() ) + return; + + vgui::ivgui()->PostMessage( + GetParent()->GetVPanel(), + new KeyValues( "MouseReleased", "code", code ), + GetVPanel() ); +} + +void CBasePanel::OnMouseWheeled(int delta) +{ + if ( !m_bReflectMouse ) + return; + + if ( !GetParent() ) + return; + + vgui::ivgui()->PostMessage( + GetParent()->GetVPanel(), + new KeyValues( "MouseWheeled", "delta", delta ), + GetVPanel() ); +} + +void CBasePanel::OnTick( void ) +{ + // Nothing +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CHudLabel::CHudLabel( vgui::Panel *parent, const char *panelName, const char *text) : + vgui::Label( parent,panelName,text ) +{ + m_bSelected = false; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CHudLabel::ApplySchemeSettings(vgui::IScheme *pScheme) +{ + Panel::ApplySchemeSettings(pScheme); + + if ( m_bSelected ) + { + SetBgColor( GetSchemeColor("HudStatusSelectedBgColor", pScheme) ); + } + else + { + SetBgColor( GetSchemeColor("HudStatusBgColor", pScheme) ); + } +} + + + |