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.
245 lines
8.1 KiB
245 lines
8.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include <vgui_controls/EditablePanel.h> |
|
#include <vgui_controls/ImagePanel.h> |
|
#include <vgui/ISurface.h> |
|
#include <KeyValues.h> |
|
#include "dodcornercutpanel.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CDoDCutEditablePanel::CDoDCutEditablePanel( vgui::Panel *parent, const char *name ) : vgui::EditablePanel( parent, name ) |
|
{ |
|
m_nCornerToCut = DOD_CORNERCUT_PANEL_BOTTOMRIGHT; |
|
m_nCornerCutSize = 1; |
|
|
|
memset( m_szBackgroundTexture, 0, sizeof( m_szBackgroundTexture ) ); |
|
memset( m_szBackgroudColor, 0, sizeof( m_szBackgroudColor ) ); |
|
memset( m_szBorderColor, 0, sizeof( m_szBorderColor ) ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::SetBorder( vgui::IBorder *border ) |
|
{ |
|
BaseClass::SetBorder( border ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::ApplySettings( KeyValues *inResourceData ) |
|
{ |
|
BaseClass::ApplySettings( inResourceData ); |
|
|
|
// check to see if we have a new name assigned |
|
Q_strncpy( m_szBackgroundTexture, inResourceData->GetString( "BackgroundTexture", "vgui/white" ), sizeof( m_szBackgroundTexture ) ); |
|
Q_strncpy( m_szBackgroudColor, inResourceData->GetString( "BackgroundColor", "HudPanelForeground" ), sizeof( m_szBackgroudColor ) ); |
|
Q_strncpy( m_szBorderColor, inResourceData->GetString( "BackgroundBorder", "HudPanelBorder" ), sizeof( m_szBorderColor ) ); |
|
|
|
m_iBackgroundTexture = vgui::surface()->DrawGetTextureId( m_szBackgroundTexture ); |
|
if ( m_iBackgroundTexture == -1 ) |
|
{ |
|
m_iBackgroundTexture = vgui::surface()->CreateNewTextureID(); |
|
} |
|
|
|
vgui::surface()->DrawSetTextureFile( m_iBackgroundTexture, m_szBackgroundTexture, true, true ); |
|
|
|
m_nCornerCutSize = inResourceData->GetInt( "CornerCutSize", 1 ); |
|
|
|
// scale the cut size to our screen co-ords |
|
if ( IsProportional() ) |
|
{ |
|
m_nCornerCutSize = vgui::scheme()->GetProportionalScaledValueEx( GetScheme(), m_nCornerCutSize ); |
|
} |
|
|
|
const char *pszCorner = inResourceData->GetString( "CornerToCut", "" ); |
|
if ( pszCorner ) |
|
{ |
|
if ( !Q_strcmp( pszCorner, "bottom_right" ) ) |
|
{ |
|
m_nCornerToCut = DOD_CORNERCUT_PANEL_BOTTOMRIGHT; |
|
} |
|
else if ( !Q_strcmp( pszCorner, "bottom_left" ) ) |
|
{ |
|
m_nCornerToCut = DOD_CORNERCUT_PANEL_BOTTOMLEFT; |
|
} |
|
else if ( !Q_strcmp( pszCorner, "top_right" ) ) |
|
{ |
|
m_nCornerToCut = DOD_CORNERCUT_PANEL_TOPRIGHT; |
|
|
|
} |
|
else if ( !Q_strcmp( pszCorner, "top_left" ) ) |
|
{ |
|
m_nCornerToCut = DOD_CORNERCUT_PANEL_TOPLEFT; |
|
} |
|
} |
|
|
|
InvalidateLayout( false, true ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::GetSettings( KeyValues *outResourceData ) |
|
{ |
|
BaseClass::GetSettings( outResourceData ); |
|
|
|
outResourceData->SetString( "BackgroundTexture", m_szBackgroundTexture); |
|
outResourceData->SetString( "BackgroundColor", m_szBackgroudColor); |
|
outResourceData->SetString( "BackgroundBorder", m_szBorderColor); |
|
outResourceData->SetFloat( "CornerCutSize", m_nCornerCutSize ); |
|
|
|
const char *pszCorner = NULL; |
|
switch( m_nCornerToCut ) |
|
{ |
|
case DOD_CORNERCUT_PANEL_TOPLEFT: |
|
pszCorner = "top_left"; |
|
break; |
|
case DOD_CORNERCUT_PANEL_TOPRIGHT: |
|
pszCorner = "top_right"; |
|
break; |
|
case DOD_CORNERCUT_PANEL_BOTTOMLEFT: |
|
pszCorner = "bottom_left"; |
|
break; |
|
case DOD_CORNERCUT_PANEL_BOTTOMRIGHT: |
|
default: |
|
pszCorner = "bottom_right"; |
|
break; |
|
} |
|
outResourceData->SetString( "CornerToCut", pszCorner ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
SetBorder( NULL ); |
|
|
|
m_clrBackground = pScheme->GetColor( m_szBackgroudColor, GetFgColor() ); |
|
m_clrBorder = pScheme->GetColor( m_szBorderColor, GetBgColor() ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::PaintBackground() |
|
{ |
|
vgui::Vertex_t lineverts[5]; |
|
vgui::Vertex_t verts[5]; |
|
|
|
int nwide, ntall; |
|
GetSize( nwide, ntall ); |
|
|
|
int wide = nwide - 1; // -1 because we can't draw all the way out to the width of our panel (it gets clipped), we can only draw to width - 1 |
|
int tall = ntall - 1; // (same as above) |
|
|
|
switch ( m_nCornerToCut ) |
|
{ |
|
case DOD_CORNERCUT_PANEL_TOPLEFT: |
|
verts[0].Init( Vector2D( m_nCornerCutSize, 0 ) ); |
|
verts[1].Init( Vector2D( wide, 0 ) ); |
|
verts[2].Init( Vector2D( wide, tall ) ); |
|
verts[3].Init( Vector2D( 0, tall ) ); |
|
verts[4].Init( Vector2D( 0, m_nCornerCutSize ) ); |
|
|
|
lineverts[0].Init( Vector2D( m_nCornerCutSize-1, 0 ) ); |
|
lineverts[1].Init( Vector2D( wide, 0 ) ); |
|
lineverts[2].Init( Vector2D( wide, tall ) ); |
|
lineverts[3].Init( Vector2D( 0, tall ) ); |
|
lineverts[4].Init( Vector2D( 0, m_nCornerCutSize-1 ) ); |
|
|
|
break; |
|
|
|
case DOD_CORNERCUT_PANEL_TOPRIGHT: |
|
verts[0].Init( Vector2D( 0, 0 ) ); |
|
verts[1].Init( Vector2D( wide - m_nCornerCutSize, 0 ) ); |
|
verts[2].Init( Vector2D( wide, m_nCornerCutSize ) ); |
|
verts[3].Init( Vector2D( wide, tall ) ); |
|
verts[4].Init( Vector2D( 0, tall ) ); |
|
|
|
lineverts[0].Init( Vector2D( 0, 0 ) ); |
|
lineverts[1].Init( Vector2D( wide - m_nCornerCutSize, 0 ) ); |
|
lineverts[2].Init( Vector2D( wide, m_nCornerCutSize ) ); |
|
lineverts[3].Init( Vector2D( wide, tall ) ); |
|
lineverts[4].Init( Vector2D( 0, tall ) ); |
|
|
|
break; |
|
|
|
case DOD_CORNERCUT_PANEL_BOTTOMLEFT: |
|
verts[0].Init( Vector2D( 0, 0 ) ); |
|
verts[1].Init( Vector2D( wide, 0 ) ); |
|
verts[2].Init( Vector2D( wide, tall ) ); |
|
verts[3].Init( Vector2D( m_nCornerCutSize, tall ) ); |
|
verts[4].Init( Vector2D( 0, tall - m_nCornerCutSize ) ); |
|
|
|
lineverts[0].Init( Vector2D( 0, 0 ) ); |
|
lineverts[1].Init( Vector2D( wide, 0 ) ); |
|
lineverts[2].Init( Vector2D( wide, tall ) ); |
|
lineverts[3].Init( Vector2D( m_nCornerCutSize, tall ) ); |
|
lineverts[4].Init( Vector2D( 0, tall - m_nCornerCutSize ) ); |
|
|
|
break; |
|
|
|
case DOD_CORNERCUT_PANEL_BOTTOMRIGHT: |
|
default: |
|
verts[0].Init( Vector2D( 0, 0 ) ); |
|
verts[1].Init( Vector2D( wide, 0 ) ); |
|
verts[2].Init( Vector2D( wide, tall - m_nCornerCutSize + 1 ) ); |
|
verts[3].Init( Vector2D( wide - m_nCornerCutSize + 1, tall ) ); |
|
verts[4].Init( Vector2D( 0, tall ) ); |
|
|
|
lineverts[0].Init( Vector2D( 0, 0 ) ); |
|
lineverts[1].Init( Vector2D( wide, 0 ) ); |
|
lineverts[2].Init( Vector2D( wide, tall - m_nCornerCutSize ) ); |
|
lineverts[3].Init( Vector2D( wide - m_nCornerCutSize, tall ) ); |
|
lineverts[4].Init( Vector2D( 0, tall ) ); |
|
|
|
break; |
|
} |
|
|
|
vgui::surface()->DrawSetTexture( m_iBackgroundTexture ); |
|
vgui::surface()->DrawSetColor( m_clrBackground ); |
|
vgui::surface()->DrawTexturedPolygon( 5, verts ); |
|
|
|
vgui::surface()->DrawSetColor( m_clrBorder ); |
|
vgui::surface()->DrawTexturedPolyLine( lineverts, 5 ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::SetBackGroundColor( const char *pszNewColor ) |
|
{ |
|
if ( !pszNewColor ) |
|
{ |
|
return; |
|
} |
|
|
|
Q_strncpy( m_szBackgroudColor, pszNewColor, sizeof( m_szBackgroudColor ) ); |
|
InvalidateLayout( false, true ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDoDCutEditablePanel::SetBorderColor( const char *pszNewColor ) |
|
{ |
|
if ( !pszNewColor ) |
|
{ |
|
return; |
|
} |
|
|
|
Q_strncpy( m_szBorderColor, pszNewColor, sizeof( m_szBorderColor ) ); |
|
InvalidateLayout( false, true ); |
|
} |