diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/vgui_bitmappanel.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/vgui_bitmappanel.cpp')
| -rw-r--r-- | game/client/vgui_bitmappanel.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/game/client/vgui_bitmappanel.cpp b/game/client/vgui_bitmappanel.cpp new file mode 100644 index 0000000..d28d26d --- /dev/null +++ b/game/client/vgui_bitmappanel.cpp @@ -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 ); +} |