//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $Workfile:     $
// $Date:         $
// $NoKeywords: $
//=============================================================================//
#include "client_pch.h"

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"


ConVar vgui_nav_lock( "vgui_nav_lock", "0", FCVAR_DEVELOPMENTONLY );
ConVar vgui_nav_lock_default_button( "vgui_nav_lock_default_button", "0", FCVAR_DEVELOPMENTONLY );


//-----------------------------------------------------------------------------
// Purpose: Determine length of text string
// Input  : *font - 
//			*fmt - 
//			... - 
// Output : 
//-----------------------------------------------------------------------------
int DrawTextLen( vgui::HFont font, const wchar_t *text )
{
	int len = wcslen( text );

	int x = 0;

	vgui::surface()->DrawSetTextFont( font );

	for ( int i = 0 ; i < len; i++ )
	{
		int a, b, c;
		vgui::surface()->GetCharABCwide( font, text[i], a, b, c );
		// Ignore a
		if ( i != 0 )
			x += a;
		x += b;
		if ( i != len - 1 )
			x += c;
	}

	return x;
}


//-----------------------------------------------------------------------------
// Purpose: Draws colored text to a vgui panel
// Input  : *font - font to use
//			x - position of text
//			y - 
//			r - color of text
//			g - 
//			b - 
//			a - alpha ( 0 = opaque, 255 = transparent )
//			*fmt - va_* text string
//			... - 
// Output : int - horizontal # of pixels drawn
//-----------------------------------------------------------------------------

int DrawColoredText( vgui::HFont font, int x, int y, int r, int g, int b, int a, const wchar_t *text )
{
	int len = wcslen( text );
	
	if ( len <= 0 )
		return x;

	MatSysQueueMark( g_pMaterialSystem, "DrawColoredText\n" );
	vgui::surface()->DrawSetTextFont( font );

	vgui::surface()->DrawSetTextPos( x, y );
	vgui::surface()->DrawSetTextColor( r, g, b, a );

	int pixels = DrawTextLen( font, text );

	vgui::surface()->DrawPrintText( text, len );

	MatSysQueueMark( g_pMaterialSystem, "END DrawColoredText\n" );
	return x + pixels;
}

int DrawColoredText( vgui::HFont font, int x, int y, Color clr, const wchar_t *text )
{
	int r, g, b, a;
	clr.GetColor( r, g, b, a );
	return ::DrawColoredText( font, x, y, r, g, b, a, text);
}

int DrawCenteredColoredText( vgui::HFont font, int left, int top, int right, int bottom, Color clr, const wchar_t *text )
{
	int textHeight = vgui::surface()->GetFontTall( font );
	int textWidth = DrawTextLen( font, text );
	return DrawColoredText( font, (right + left) / 2 - textWidth / 2, (bottom + top) / 2 - textHeight / 2, clr, text );
}


//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
CBasePanel::CBasePanel( vgui::Panel *parent, char const *panelName )
: vgui::Panel( parent, panelName )
{
	vgui::ivgui()->AddTickSignal( GetVPanel() );
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
CBasePanel::~CBasePanel( void )
{
}

void CBasePanel::OnTick()
{
	if ( vgui_nav_lock.GetInt() > 0 )
	{
		vgui_nav_lock.SetValue( vgui_nav_lock.GetInt() - 1 );
	}

	if ( vgui_nav_lock_default_button.GetInt() > 0 )
	{
		vgui_nav_lock_default_button.SetValue( vgui_nav_lock_default_button.GetInt() - 1 );
	}

	SetVisible( ShouldDraw() );
}