diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/vgui_bitmappanel.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/client/vgui_bitmappanel.cpp')
| -rw-r--r-- | mp/src/game/client/vgui_bitmappanel.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/mp/src/game/client/vgui_bitmappanel.cpp b/mp/src/game/client/vgui_bitmappanel.cpp new file mode 100644 index 00000000..8fcb9f60 --- /dev/null +++ b/mp/src/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 );
+}
|