mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-05 22:09:59 +03:00
1
This commit is contained in:
220
game/client/vgui_bitmappanel.cpp
Normal file
220
game/client/vgui_bitmappanel.cpp
Normal file
@@ -0,0 +1,220 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: This is a panel which is rendered image on top of an entity
|
||||
//
|
||||
// $Revision: $
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#pragma warning (disable: 4514)
|
||||
#include "vgui_bitmappanel.h"
|
||||
#include <KeyValues.h>
|
||||
#include "panelmetaclassmgr.h"
|
||||
#include "vgui_bitmapimage.h"
|
||||
|
||||
#ifdef INVASION_CLIENT_DLL
|
||||
#include "hud_commander_statuspanel.h"
|
||||
#endif
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
DECLARE_BUILD_FACTORY( CBitmapPanel );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CBitmapPanel::CBitmapPanel( ) : BaseClass( NULL, "CBitmapPanel" ), m_pImage(0)
|
||||
{
|
||||
SetPaintBackgroundEnabled( false );
|
||||
m_szMouseOverText[ 0 ] = 0;
|
||||
m_r = m_g = m_b = m_a = 255;
|
||||
m_bOwnsImage = true;
|
||||
}
|
||||
|
||||
CBitmapPanel::CBitmapPanel( vgui::Panel *pParent, const char *pName ) :
|
||||
BaseClass( pParent, pName ), m_pImage(0)
|
||||
{
|
||||
SetPaintBackgroundEnabled( false );
|
||||
m_szMouseOverText[ 0 ] = 0;
|
||||
m_r = m_g = m_b = m_a = 255;
|
||||
m_bOwnsImage = true;
|
||||
}
|
||||
|
||||
CBitmapPanel::~CBitmapPanel()
|
||||
{
|
||||
if (m_pImage && m_bOwnsImage)
|
||||
{
|
||||
delete m_pImage;
|
||||
m_pImage = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// initialization
|
||||
//-----------------------------------------------------------------------------
|
||||
bool CBitmapPanel::Init( KeyValues* pInitData )
|
||||
{
|
||||
Assert( pInitData );
|
||||
|
||||
// modulation color
|
||||
if (!ParseRGBA( pInitData, "color", m_r, m_g, m_b, m_a ))
|
||||
return false;
|
||||
|
||||
int x, y, w, h;
|
||||
if (!ParseRect( pInitData, "position", x, y, w, h ))
|
||||
return false;
|
||||
|
||||
const char *mouseover = pInitData->GetString( "mousehint", "" );
|
||||
if ( mouseover && mouseover[ 0 ] )
|
||||
{
|
||||
Q_strncpy( m_szMouseOverText, mouseover, sizeof( m_szMouseOverText ) );
|
||||
}
|
||||
|
||||
// Set the size...
|
||||
SetPos( x, y );
|
||||
SetSize( w, h );
|
||||
|
||||
char const* pClassImage = pInitData->GetString( "material" );
|
||||
if ( !pClassImage || !pClassImage[ 0 ] )
|
||||
return false;
|
||||
|
||||
// hook in the bitmap
|
||||
m_pImage = new BitmapImage( GetVPanel(), pClassImage );
|
||||
m_bOwnsImage = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// initialization from build-mode dialog style .res files
|
||||
//-----------------------------------------------------------------------------
|
||||
void CBitmapPanel::ApplySettings(KeyValues *pInitData)
|
||||
{
|
||||
BaseClass::ApplySettings(pInitData);
|
||||
|
||||
if (m_pImage && m_bOwnsImage)
|
||||
{
|
||||
delete m_pImage;
|
||||
m_pImage = NULL;
|
||||
}
|
||||
|
||||
// modulation color. Can't use ParseRGBA since this uses a vgui::KeyValues (feh)
|
||||
m_r = m_g = m_b = m_a = 255;
|
||||
const char *pColorString = pInitData->GetString( "color", "255 255 255 255" );
|
||||
if ( pColorString && pColorString[ 0 ] )
|
||||
{
|
||||
// Try and scan them in
|
||||
int r = 0, g = 0, b = 0, a = 0;
|
||||
int scanned;
|
||||
scanned = sscanf( pColorString, "%i %i %i %i", &r, &g, &b, &a );
|
||||
if ( scanned == 4 )
|
||||
{
|
||||
m_r = r; m_g = g; m_b = b; m_a = a;
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning( "Couldn't scan four color values from %s\n", pColorString );
|
||||
}
|
||||
}
|
||||
|
||||
m_szMouseOverText[0] = 0;
|
||||
|
||||
char const* pClassImage = pInitData->GetString( "material" );
|
||||
if ( pClassImage && pClassImage[ 0 ] && m_bOwnsImage )
|
||||
{
|
||||
// hook in the bitmap
|
||||
m_pImage = new BitmapImage( GetVPanel(), pClassImage );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Draws the puppy
|
||||
//-----------------------------------------------------------------------------
|
||||
void CBitmapPanel::Paint( void )
|
||||
{
|
||||
if ( !m_pImage )
|
||||
return;
|
||||
|
||||
Color color;
|
||||
color.SetColor( m_r, m_g, m_b, m_a );
|
||||
m_pImage->SetColor( color );
|
||||
m_pImage->DoPaint( GetVPanel() );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CBitmapPanel::OnCursorEntered()
|
||||
{
|
||||
#ifdef INVASION_CLIENT_DLL
|
||||
if ( m_szMouseOverText[ 0 ] )
|
||||
{
|
||||
StatusPrint( TYPE_HINT, "%s", m_szMouseOverText );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CBitmapPanel::OnCursorExited()
|
||||
{
|
||||
#ifdef INVASION_CLIENT_DLL
|
||||
if ( m_szMouseOverText[ 0 ] )
|
||||
{
|
||||
StatusClear();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
// Output : char const
|
||||
//-----------------------------------------------------------------------------
|
||||
const char *CBitmapPanel::GetMouseOverText( void )
|
||||
{
|
||||
return m_szMouseOverText;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Sets up the panel
|
||||
// Used by panels that aren't created by the commander overlay factory (i.e. aren't parsed from a keyvalues file)
|
||||
//-----------------------------------------------------------------------------
|
||||
void CBitmapPanel::SetImage( BitmapImage *pImage )
|
||||
{
|
||||
m_pImage = pImage;
|
||||
m_bOwnsImage = (pImage == NULL);
|
||||
|
||||
// Get the color from the image
|
||||
if ( m_pImage )
|
||||
{
|
||||
m_pImage->GetColor( m_r, m_g, m_b, m_a );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Set image data directly
|
||||
//-----------------------------------------------------------------------------
|
||||
void CBitmapPanel::SetBitmap( const Bitmap_t &bitmap )
|
||||
{
|
||||
|
||||
// Make sure we have an image that we own
|
||||
if ( m_pImage == NULL || !m_bOwnsImage )
|
||||
{
|
||||
delete m_pImage;
|
||||
m_pImage = new BitmapImage( GetVPanel(), NULL );
|
||||
m_bOwnsImage = true;
|
||||
}
|
||||
|
||||
// Set the bitmap
|
||||
m_pImage->SetBitmap( bitmap );
|
||||
}
|
||||
Reference in New Issue
Block a user