//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #include "BitmapImagePanel.h" #include // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" using namespace vgui; CBitmapImagePanel::CBitmapImagePanel( Panel *parent, char const *panelName, char const *filename /*= NULL*/ ) : Panel( parent, panelName ) { m_szTexture[ 0 ] = 0; m_bUploaded = false; m_nTextureId = -1; SetBounds( 0, 0, 100, 100 ); if ( filename && filename[ 0 ] ) { Q_strncpy( m_szTexture, filename, sizeof( m_szTexture ) ); } } CBitmapImagePanel::~CBitmapImagePanel() { if ( vgui::surface() && m_nTextureId != -1 ) { vgui::surface()->DestroyTextureID( m_nTextureId ); m_nTextureId = -1; } } void CBitmapImagePanel::PaintBackground() { if (!m_szTexture[0]) return; if ( !m_bUploaded ) forceUpload(); int w, h; GetSize( w, h ); surface()->DrawSetColor( Color( 255, 255, 255, 255 ) ); surface()->DrawSetTexture( m_nTextureId ); surface()->DrawTexturedRect( 0, 0, w, h ); } void CBitmapImagePanel::setTexture( char const *filename ) { Q_strncpy( m_szTexture, filename, sizeof( m_szTexture ) ); if ( m_bUploaded ) { forceReload(); } else { forceUpload(); } } void CBitmapImagePanel::forceUpload() { if ( !m_szTexture[ 0 ] ) return; m_bUploaded = true; m_nTextureId = surface()->CreateNewTextureID(); surface()->DrawSetTextureFile( m_nTextureId, m_szTexture, false, true); } void CBitmapImagePanel::forceReload( void ) { if ( !m_bUploaded ) return; // Force texture to re-upload to video card surface()->DrawSetTextureFile( m_nTextureId, m_szTexture, false, true); }