From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/client/vgui_centerstringpanel.cpp | 310 ++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 mp/src/game/client/vgui_centerstringpanel.cpp (limited to 'mp/src/game/client/vgui_centerstringpanel.cpp') diff --git a/mp/src/game/client/vgui_centerstringpanel.cpp b/mp/src/game/client/vgui_centerstringpanel.cpp new file mode 100644 index 00000000..b011a1ee --- /dev/null +++ b/mp/src/game/client/vgui_centerstringpanel.cpp @@ -0,0 +1,310 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include +#include "vguicenterprint.h" +#include "ivrenderview.h" +#include +#include "VGuiMatSurface/IMatSystemSurface.h" +#include +#include +#include +#include + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + + +#ifdef TF_CLIENT_DLL +static ConVar scr_centertime( "scr_centertime", "5" ); +#else +static ConVar scr_centertime( "scr_centertime", "2" ); +#endif + +//----------------------------------------------------------------------------- +// Purpose: Implements Center String printing +//----------------------------------------------------------------------------- +class CCenterStringLabel : public vgui::Label +{ + DECLARE_CLASS_SIMPLE( CCenterStringLabel, vgui::Label ); + +public: + CCenterStringLabel( vgui::VPANEL parent ); + virtual ~CCenterStringLabel( void ); + + // vgui::Panel + virtual void ApplySchemeSettings(vgui::IScheme *pScheme); + virtual void OnTick( void ); + virtual bool ShouldDraw( void ); + + // CVGuiCenterPrint + virtual void SetTextColor( int r, int g, int b, int a ); + virtual void Print( char *text ); + virtual void Print( wchar_t *text ); + virtual void ColorPrint( int r, int g, int b, int a, char *text ); + virtual void ColorPrint( int r, int g, int b, int a, wchar_t *text ); + virtual void Clear( void ); + +protected: + MESSAGE_FUNC_INT_INT( OnScreenSizeChanged, "OnScreenSizeChanged", oldwide, oldtall ); + +private: + void ComputeSize( void ); + + vgui::HFont m_hFont; + + float m_flCentertimeOff; +}; + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *parent - +//----------------------------------------------------------------------------- +CCenterStringLabel::CCenterStringLabel( vgui::VPANEL parent ) : + BaseClass( NULL, "CCenterStringLabel", " " ) +{ + SetParent( parent ); + ComputeSize(); + SetVisible( false ); + SetCursor( null ); + SetKeyBoardInputEnabled( false ); + SetMouseInputEnabled( false ); + SetContentAlignment( vgui::Label::a_center ); + + m_hFont = 0; + SetFgColor( Color( 255, 255, 255, 255 ) ); + + SetPaintBackgroundEnabled( false ); + + m_flCentertimeOff = 0.0; + + vgui::ivgui()->AddTickSignal( GetVPanel(), 100 ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CCenterStringLabel::~CCenterStringLabel( void ) +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Updates panel to handle the new screen size +//----------------------------------------------------------------------------- +void CCenterStringLabel::OnScreenSizeChanged(int iOldWide, int iOldTall) +{ + BaseClass::OnScreenSizeChanged(iOldWide, iOldTall); + ComputeSize(); +} + +//----------------------------------------------------------------------------- +// Purpose: Computes panel's desired size and position +//----------------------------------------------------------------------------- +void CCenterStringLabel::ComputeSize( void ) +{ + int w, h; + w = ScreenWidth(); + h = ScreenHeight(); + + int iHeight = (int)(h * 0.3); + + SetSize( w, iHeight ); + SetPos( 0, ( h * 0.35 ) - ( iHeight / 2 ) ); +} + +void CCenterStringLabel::ApplySchemeSettings(vgui::IScheme *pScheme) +{ + BaseClass::ApplySchemeSettings(pScheme); + + // Use a large font + m_hFont = pScheme->GetFont( "Trebuchet24" ); + assert( m_hFont ); + SetFont( m_hFont ); + + int w, h; + w = ScreenWidth(); + h = ScreenHeight(); + int iHeight = (int)(h * 0.3); + SetSize( w, iHeight ); + SetPos( 0, ( h * 0.35 ) - ( iHeight / 2 ) ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : r - +// g - +// b - +// a - +//----------------------------------------------------------------------------- +void CCenterStringLabel::SetTextColor( int r, int g, int b, int a ) +{ + SetFgColor( Color( r, g, b, a ) ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CCenterStringLabel::Print( char *text ) +{ + SetText( text ); + + m_flCentertimeOff = scr_centertime.GetFloat() + gpGlobals->curtime; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CCenterStringLabel::Print( wchar_t *text ) +{ + SetText( text ); + + m_flCentertimeOff = scr_centertime.GetFloat() + gpGlobals->curtime; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CCenterStringLabel::ColorPrint( int r, int g, int b, int a, char *text ) +{ + SetTextColor( r, g, b, a ); + Print( text ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CCenterStringLabel::ColorPrint( int r, int g, int b, int a, wchar_t *text ) +{ + SetTextColor( r, g, b, a ); + Print( text ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CCenterStringLabel::Clear( void ) +{ + m_flCentertimeOff = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CCenterStringLabel::OnTick( void ) +{ + bool bVisible = ShouldDraw(); + if ( IsVisible() != bVisible ) + { + SetVisible( bVisible ); + } +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : Returns true on success, false on failure. +// FIXME, this has dependencies on the engine that should go away +//----------------------------------------------------------------------------- +bool CCenterStringLabel::ShouldDraw( void ) +{ + if ( engine->IsDrawingLoadingImage() ) + { + return false; + } + + if ( m_flCentertimeOff <= gpGlobals->curtime ) + { + // not time to turn off the message yet + return false; + } + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : +//----------------------------------------------------------------------------- +CCenterPrint::CCenterPrint( void ) +{ + vguiCenterString = NULL; +} + +void CCenterPrint::SetTextColor( int r, int g, int b, int a ) +{ + if ( vguiCenterString ) + { + vguiCenterString->SetTextColor( r, g, b, a ); + } +} + +void CCenterPrint::Print( char *text ) +{ + if ( vguiCenterString ) + { + vguiCenterString->ColorPrint( 255, 255, 255, 255, text ); + } +} + +void CCenterPrint::Print( wchar_t *text ) +{ + if ( vguiCenterString ) + { + vguiCenterString->ColorPrint( 255, 255, 255, 255, text ); + } +} + +void CCenterPrint::ColorPrint( int r, int g, int b, int a, char *text ) +{ + if ( vguiCenterString ) + { + vguiCenterString->ColorPrint( r, g, b, a, text ); + } +} + +void CCenterPrint::ColorPrint( int r, int g, int b, int a, wchar_t *text ) +{ + if ( vguiCenterString ) + { + vguiCenterString->ColorPrint( r, g, b, a, text ); + } +} + +void CCenterPrint::Clear( void ) +{ + if ( vguiCenterString ) + { + vguiCenterString->Clear(); + } +} + +void CCenterPrint::Create( vgui::VPANEL parent ) +{ + if ( vguiCenterString ) + { + Destroy(); + } + + vguiCenterString = new CCenterStringLabel( parent ); +} + +void CCenterPrint::Destroy( void ) +{ + if ( vguiCenterString ) + { + vguiCenterString->SetParent( (vgui::Panel *)NULL ); + delete vguiCenterString; + vguiCenterString = NULL; + } +} + +static CCenterPrint g_CenterString; +CCenterPrint *internalCenterPrint = &g_CenterString; + +EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CCenterPrint, ICenterPrint, VCENTERPRINT_INTERFACE_VERSION, g_CenterString ); \ No newline at end of file -- cgit v1.2.3