diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/client/vgui_textmessagepanel.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/client/vgui_textmessagepanel.cpp')
| -rw-r--r-- | mp/src/game/client/vgui_textmessagepanel.cpp | 828 |
1 files changed, 414 insertions, 414 deletions
diff --git a/mp/src/game/client/vgui_textmessagepanel.cpp b/mp/src/game/client/vgui_textmessagepanel.cpp index 3508042c..5e4b1232 100644 --- a/mp/src/game/client/vgui_textmessagepanel.cpp +++ b/mp/src/game/client/vgui_textmessagepanel.cpp @@ -1,414 +1,414 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $Workfile: $
-// $Date: $
-// $NoKeywords: $
-//=============================================================================//
-#include "cbase.h"
-#include "itextmessage.h"
-#include <vgui_controls/Panel.h>
-#include <vgui/IVGui.h>
-#include <vgui/ILocalize.h>
-#include "VGuiMatSurface/IMatSystemSurface.h"
-#include <vgui_controls/Controls.h>
-#include <vgui/ISurface.h>
-#include "hud.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-// Simultaneous message limit
-#define MAX_TEXTMESSAGE_CHARS 2048
-
-//-----------------------------------------------------------------------------
-// Purpose: For rendering the Titles.txt characters to the screen from the HUD
-//-----------------------------------------------------------------------------
-class CTextMessagePanel : public vgui::Panel
-{
- typedef vgui::Panel BaseClass;
-public:
- enum
- {
- TYPE_UNKNOWN = 0,
- TYPE_POSITION,
- TYPE_CHARACTER,
- TYPE_FONT,
- };
-
- struct message_t
- {
- vgui::HFont font;
- short x, y;
- wchar_t ch;
- byte type;
- byte r, g, b, a;
- };
-
- CTextMessagePanel( vgui::VPANEL parent );
- virtual ~CTextMessagePanel( void );
-
- virtual void SetPosition( int x, int y );
-
- virtual void AddChar( int r, int g, int b, int a, wchar_t ch );
- virtual void GetTextExtents( int *wide, int *tall, const char *string );
-
- virtual void SetFont( vgui::HFont hCustomFont );
- virtual void SetDefaultFont( void );
-
- virtual void OnTick( void );
-
- virtual void Paint();
-
- virtual bool ShouldDraw( void );
-
- // Get character data for textmessage text
- virtual int GetFontInfo( FONTABC *pABCs, vgui::HFont hFont );
-
- virtual void ApplySchemeSettings( vgui::IScheme *pScheme )
- {
- BaseClass::ApplySchemeSettings( pScheme );
- SetSize( ScreenWidth(), ScreenHeight() );
- SetPos( 0, 0 );
- }
-
-private:
- message_t *AllocMessage( void );
- void Reset( void );
-
- vgui::HFont m_hFont;
- vgui::HFont m_hDefaultFont;
- CUtlVector< message_t > m_Messages;
-};
-
-//-----------------------------------------------------------------------------
-// Purpose: Constructor
-// Input : *parent -
-//-----------------------------------------------------------------------------
-CTextMessagePanel::CTextMessagePanel( vgui::VPANEL parent )
-: BaseClass( NULL, "CTextMessagePanel" )
-{
- SetParent( parent );
- SetSize( ScreenWidth(), ScreenHeight() );
- SetPos( 0, 0 );
- SetVisible( false );
- SetCursor( null );
- SetKeyBoardInputEnabled( false );
- SetMouseInputEnabled( false );
-
- m_hFont = g_hFontTrebuchet24;
- m_hDefaultFont = m_hFont;
-
- SetFgColor( Color( 0, 0, 0, 255 ) );
- SetPaintBackgroundEnabled( false );
-
- // Clear memory out
- Reset();
-
- vgui::ivgui()->AddTickSignal( GetVPanel(), 100 );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CTextMessagePanel::~CTextMessagePanel( void )
-{
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Get font sizes
-// Input : *pWidth -
-// Output : int
-//-----------------------------------------------------------------------------
-int CTextMessagePanel::GetFontInfo( FONTABC *pABCs, vgui::HFont hFont )
-{
- int i;
-
- if ( !hFont )
- {
- hFont = m_hFont;
- }
-
- if ( !hFont )
- return 0;
-
- if ( pABCs )
- {
- for ( i =0; i < 256; i++ )
- {
- int a, b, c;
- vgui::surface()->GetCharABCwide( hFont, (char)i, a, b, c );
- pABCs[i].abcA = a;
- pABCs[i].abcB = b;
- pABCs[i].abcC = c;
- pABCs[i].total = a+b+c;
- }
- }
-
- return vgui::surface()->GetFontTall( hFont );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Clear all messages out of active list, etc.
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::Reset( void )
-{
- m_Messages.Purge();
- SetVisible( false );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Grab next free message, if any
-// Output : CTextMessagePanel::message_t
-//-----------------------------------------------------------------------------
-CTextMessagePanel::message_t *CTextMessagePanel::AllocMessage( void )
-{
- CTextMessagePanel::message_t *msg;
-
- if ( m_Messages.Count() >= MAX_TEXTMESSAGE_CHARS )
- return NULL;
-
- msg = &m_Messages[ m_Messages.AddToTail() ];
-
- msg->type = TYPE_UNKNOWN;
- msg->x = 0;
- msg->y = 0;
- msg->ch = 0;
- msg->r = 0;
- msg->g = 0;
- msg->b = 0;
- msg->a = 0;
-
- SetVisible( true );
-
- return msg;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Input : x -
-// y -
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::SetPosition( int x, int y )
-{
- CTextMessagePanel::message_t *msg = AllocMessage();
- if ( !msg )
- return;
-
- msg->type = TYPE_POSITION;
-
- // Used fields
- msg->x = x;
- msg->y = y;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Adds a character to the active list, if possible
-// Input : x -
-// y -
-// r -
-// g -
-// b -
-// a -
-// ch -
-// Output : int
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::AddChar( int r, int g, int b, int a, wchar_t ch )
-{
- CTextMessagePanel::message_t *msg = AllocMessage();
- if ( !msg )
- return;
-
- msg->type = TYPE_CHARACTER;
-
- // Used fields
- msg->r = r;
- msg->g = g;
- msg->b = b;
- msg->a = a;
- msg->ch = ch;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Determine width and height of specified string
-// Input : *wide -
-// *tall -
-// *string -
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::GetTextExtents( int *wide, int *tall, const char *string )
-{
- *wide = g_pMatSystemSurface->DrawTextLen( m_hFont, (char *)string );
- *tall = vgui::surface()->GetFontTall( m_hFont );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::SetFont( vgui::HFont hCustomFont )
-{
- m_hFont = hCustomFont;
-
- CTextMessagePanel::message_t *msg = AllocMessage();
- if ( !msg )
- return;
-
- msg->type = TYPE_FONT;
-
- // Used fields
- msg->font = m_hFont;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::SetDefaultFont( void )
-{
- SetFont( m_hDefaultFont );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::OnTick( void )
-{
- SetVisible( ShouldDraw() );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-// Output : Returns true on success, false on failure.
-//-----------------------------------------------------------------------------
-bool CTextMessagePanel::ShouldDraw( void )
-{
- if ( !m_Messages.Count() )
- return false;
-
- return true;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Draw current text items
-//-----------------------------------------------------------------------------
-void CTextMessagePanel::Paint()
-{
- CTextMessagePanel::message_t *msg;
-
- int xpos = 0, ypos = 0;
- vgui::surface()->DrawSetTextFont( m_hFont );
-
- int messageCount = m_Messages.Count();
- for ( int i = 0 ; i < messageCount; ++i )
- {
- msg = &m_Messages[ i ];
-
- switch ( msg->type )
- {
- default:
- case TYPE_UNKNOWN:
- Assert( 0 );
- break;
- case TYPE_POSITION:
- xpos = msg->x;
- ypos = msg->y;
- break;
- case TYPE_FONT:
- m_hFont = msg->font;
- vgui::surface()->DrawSetTextFont( m_hFont );
- break;
- case TYPE_CHARACTER:
- if ( m_hFont )
- {
- int a, b, c;
- vgui::surface()->GetCharABCwide( m_hFont, msg->ch, a, b, c );
-
- if ( msg->ch > 32 )
- {
- vgui::surface()->DrawSetTextColor( msg->r, msg->g, msg->b, msg->a );
- vgui::surface()->DrawSetTextPos( xpos, ypos );
- vgui::surface()->DrawUnicodeChar( msg->ch );
- }
- xpos += a + b + c;
- }
- break;
- }
- }
-
- Reset();
-}
-
-class CTextMessage : public ITextMessage
-{
-private:
- CTextMessagePanel *textMessagePanel;
-public:
- CTextMessage( void )
- {
- textMessagePanel = NULL;
- }
-
- void Create( vgui::VPANEL parent )
- {
- textMessagePanel = new CTextMessagePanel( parent );
- }
-
- void Destroy( void )
- {
- if ( textMessagePanel )
- {
- textMessagePanel->SetParent( (vgui::Panel *)NULL );
- delete textMessagePanel;
- }
- }
-
- void SetPosition( int x, int y )
- {
- if ( !textMessagePanel )
- return;
-
- textMessagePanel->SetPosition( x, y );
- }
-
- void AddChar( int r, int g, int b, int a, wchar_t ch )
- {
- if ( !textMessagePanel )
- return;
-
- textMessagePanel->AddChar( r, g, b, a, ch );
- }
-
- void GetLength( int *wide, int *tall, const char *string )
- {
- if ( !textMessagePanel )
- {
- *wide = *tall = 0;
- return;
- }
-
- textMessagePanel->GetTextExtents( wide, tall, string );
- }
-
- int GetFontInfo( FONTABC *pABCs, vgui::HFont hFont )
- {
- return textMessagePanel ? textMessagePanel->GetFontInfo( pABCs, hFont ) : 0;
- }
-
- void SetFont( vgui::HFont hCustomFont )
- {
- if ( !textMessagePanel )
- return;
-
- textMessagePanel->SetFont( hCustomFont );
- }
-
- void SetDefaultFont( void )
- {
- if ( !textMessagePanel )
- return;
-
- textMessagePanel->SetDefaultFont();
- }
-};
-
-static CTextMessage g_TextMessage;
-ITextMessage *textmessage = &g_TextMessage;
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "itextmessage.h" +#include <vgui_controls/Panel.h> +#include <vgui/IVGui.h> +#include <vgui/ILocalize.h> +#include "VGuiMatSurface/IMatSystemSurface.h" +#include <vgui_controls/Controls.h> +#include <vgui/ISurface.h> +#include "hud.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +// Simultaneous message limit +#define MAX_TEXTMESSAGE_CHARS 2048 + +//----------------------------------------------------------------------------- +// Purpose: For rendering the Titles.txt characters to the screen from the HUD +//----------------------------------------------------------------------------- +class CTextMessagePanel : public vgui::Panel +{ + typedef vgui::Panel BaseClass; +public: + enum + { + TYPE_UNKNOWN = 0, + TYPE_POSITION, + TYPE_CHARACTER, + TYPE_FONT, + }; + + struct message_t + { + vgui::HFont font; + short x, y; + wchar_t ch; + byte type; + byte r, g, b, a; + }; + + CTextMessagePanel( vgui::VPANEL parent ); + virtual ~CTextMessagePanel( void ); + + virtual void SetPosition( int x, int y ); + + virtual void AddChar( int r, int g, int b, int a, wchar_t ch ); + virtual void GetTextExtents( int *wide, int *tall, const char *string ); + + virtual void SetFont( vgui::HFont hCustomFont ); + virtual void SetDefaultFont( void ); + + virtual void OnTick( void ); + + virtual void Paint(); + + virtual bool ShouldDraw( void ); + + // Get character data for textmessage text + virtual int GetFontInfo( FONTABC *pABCs, vgui::HFont hFont ); + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) + { + BaseClass::ApplySchemeSettings( pScheme ); + SetSize( ScreenWidth(), ScreenHeight() ); + SetPos( 0, 0 ); + } + +private: + message_t *AllocMessage( void ); + void Reset( void ); + + vgui::HFont m_hFont; + vgui::HFont m_hDefaultFont; + CUtlVector< message_t > m_Messages; +}; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +// Input : *parent - +//----------------------------------------------------------------------------- +CTextMessagePanel::CTextMessagePanel( vgui::VPANEL parent ) +: BaseClass( NULL, "CTextMessagePanel" ) +{ + SetParent( parent ); + SetSize( ScreenWidth(), ScreenHeight() ); + SetPos( 0, 0 ); + SetVisible( false ); + SetCursor( null ); + SetKeyBoardInputEnabled( false ); + SetMouseInputEnabled( false ); + + m_hFont = g_hFontTrebuchet24; + m_hDefaultFont = m_hFont; + + SetFgColor( Color( 0, 0, 0, 255 ) ); + SetPaintBackgroundEnabled( false ); + + // Clear memory out + Reset(); + + vgui::ivgui()->AddTickSignal( GetVPanel(), 100 ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CTextMessagePanel::~CTextMessagePanel( void ) +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Get font sizes +// Input : *pWidth - +// Output : int +//----------------------------------------------------------------------------- +int CTextMessagePanel::GetFontInfo( FONTABC *pABCs, vgui::HFont hFont ) +{ + int i; + + if ( !hFont ) + { + hFont = m_hFont; + } + + if ( !hFont ) + return 0; + + if ( pABCs ) + { + for ( i =0; i < 256; i++ ) + { + int a, b, c; + vgui::surface()->GetCharABCwide( hFont, (char)i, a, b, c ); + pABCs[i].abcA = a; + pABCs[i].abcB = b; + pABCs[i].abcC = c; + pABCs[i].total = a+b+c; + } + } + + return vgui::surface()->GetFontTall( hFont ); +} + +//----------------------------------------------------------------------------- +// Purpose: Clear all messages out of active list, etc. +//----------------------------------------------------------------------------- +void CTextMessagePanel::Reset( void ) +{ + m_Messages.Purge(); + SetVisible( false ); +} + +//----------------------------------------------------------------------------- +// Purpose: Grab next free message, if any +// Output : CTextMessagePanel::message_t +//----------------------------------------------------------------------------- +CTextMessagePanel::message_t *CTextMessagePanel::AllocMessage( void ) +{ + CTextMessagePanel::message_t *msg; + + if ( m_Messages.Count() >= MAX_TEXTMESSAGE_CHARS ) + return NULL; + + msg = &m_Messages[ m_Messages.AddToTail() ]; + + msg->type = TYPE_UNKNOWN; + msg->x = 0; + msg->y = 0; + msg->ch = 0; + msg->r = 0; + msg->g = 0; + msg->b = 0; + msg->a = 0; + + SetVisible( true ); + + return msg; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : x - +// y - +//----------------------------------------------------------------------------- +void CTextMessagePanel::SetPosition( int x, int y ) +{ + CTextMessagePanel::message_t *msg = AllocMessage(); + if ( !msg ) + return; + + msg->type = TYPE_POSITION; + + // Used fields + msg->x = x; + msg->y = y; +} + +//----------------------------------------------------------------------------- +// Purpose: Adds a character to the active list, if possible +// Input : x - +// y - +// r - +// g - +// b - +// a - +// ch - +// Output : int +//----------------------------------------------------------------------------- +void CTextMessagePanel::AddChar( int r, int g, int b, int a, wchar_t ch ) +{ + CTextMessagePanel::message_t *msg = AllocMessage(); + if ( !msg ) + return; + + msg->type = TYPE_CHARACTER; + + // Used fields + msg->r = r; + msg->g = g; + msg->b = b; + msg->a = a; + msg->ch = ch; +} + +//----------------------------------------------------------------------------- +// Purpose: Determine width and height of specified string +// Input : *wide - +// *tall - +// *string - +//----------------------------------------------------------------------------- +void CTextMessagePanel::GetTextExtents( int *wide, int *tall, const char *string ) +{ + *wide = g_pMatSystemSurface->DrawTextLen( m_hFont, (char *)string ); + *tall = vgui::surface()->GetFontTall( m_hFont ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CTextMessagePanel::SetFont( vgui::HFont hCustomFont ) +{ + m_hFont = hCustomFont; + + CTextMessagePanel::message_t *msg = AllocMessage(); + if ( !msg ) + return; + + msg->type = TYPE_FONT; + + // Used fields + msg->font = m_hFont; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CTextMessagePanel::SetDefaultFont( void ) +{ + SetFont( m_hDefaultFont ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CTextMessagePanel::OnTick( void ) +{ + SetVisible( ShouldDraw() ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : Returns true on success, false on failure. +//----------------------------------------------------------------------------- +bool CTextMessagePanel::ShouldDraw( void ) +{ + if ( !m_Messages.Count() ) + return false; + + return true; +} + +//----------------------------------------------------------------------------- +// Purpose: Draw current text items +//----------------------------------------------------------------------------- +void CTextMessagePanel::Paint() +{ + CTextMessagePanel::message_t *msg; + + int xpos = 0, ypos = 0; + vgui::surface()->DrawSetTextFont( m_hFont ); + + int messageCount = m_Messages.Count(); + for ( int i = 0 ; i < messageCount; ++i ) + { + msg = &m_Messages[ i ]; + + switch ( msg->type ) + { + default: + case TYPE_UNKNOWN: + Assert( 0 ); + break; + case TYPE_POSITION: + xpos = msg->x; + ypos = msg->y; + break; + case TYPE_FONT: + m_hFont = msg->font; + vgui::surface()->DrawSetTextFont( m_hFont ); + break; + case TYPE_CHARACTER: + if ( m_hFont ) + { + int a, b, c; + vgui::surface()->GetCharABCwide( m_hFont, msg->ch, a, b, c ); + + if ( msg->ch > 32 ) + { + vgui::surface()->DrawSetTextColor( msg->r, msg->g, msg->b, msg->a ); + vgui::surface()->DrawSetTextPos( xpos, ypos ); + vgui::surface()->DrawUnicodeChar( msg->ch ); + } + xpos += a + b + c; + } + break; + } + } + + Reset(); +} + +class CTextMessage : public ITextMessage +{ +private: + CTextMessagePanel *textMessagePanel; +public: + CTextMessage( void ) + { + textMessagePanel = NULL; + } + + void Create( vgui::VPANEL parent ) + { + textMessagePanel = new CTextMessagePanel( parent ); + } + + void Destroy( void ) + { + if ( textMessagePanel ) + { + textMessagePanel->SetParent( (vgui::Panel *)NULL ); + delete textMessagePanel; + } + } + + void SetPosition( int x, int y ) + { + if ( !textMessagePanel ) + return; + + textMessagePanel->SetPosition( x, y ); + } + + void AddChar( int r, int g, int b, int a, wchar_t ch ) + { + if ( !textMessagePanel ) + return; + + textMessagePanel->AddChar( r, g, b, a, ch ); + } + + void GetLength( int *wide, int *tall, const char *string ) + { + if ( !textMessagePanel ) + { + *wide = *tall = 0; + return; + } + + textMessagePanel->GetTextExtents( wide, tall, string ); + } + + int GetFontInfo( FONTABC *pABCs, vgui::HFont hFont ) + { + return textMessagePanel ? textMessagePanel->GetFontInfo( pABCs, hFont ) : 0; + } + + void SetFont( vgui::HFont hCustomFont ) + { + if ( !textMessagePanel ) + return; + + textMessagePanel->SetFont( hCustomFont ); + } + + void SetDefaultFont( void ) + { + if ( !textMessagePanel ) + return; + + textMessagePanel->SetDefaultFont(); + } +}; + +static CTextMessage g_TextMessage; +ITextMessage *textmessage = &g_TextMessage; |