aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/vgui_centerstringpanel.cpp
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/vgui_centerstringpanel.cpp
downloadsource-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_centerstringpanel.cpp')
-rw-r--r--mp/src/game/client/vgui_centerstringpanel.cpp310
1 files changed, 310 insertions, 0 deletions
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 <stdarg.h>
+#include "vguicenterprint.h"
+#include "ivrenderview.h"
+#include <vgui/IVGui.h>
+#include "VGuiMatSurface/IMatSystemSurface.h"
+#include <vgui_controls/Label.h>
+#include <vgui_controls/Controls.h>
+#include <vgui/ISurface.h>
+#include <vgui/IScheme.h>
+
+// 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