You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
5.7 KiB
244 lines
5.7 KiB
//========= 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) ); |
|
} |
|
} |
|
|
|
|
|
|
|
|