Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

189 lines
5.2 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#include "cbase.h"
#include <convar.h>
#include "cdll_int.h"
#include <ienginevgui.h>
#include "filesystem.h"
#include <vgui/ISystem.h>
#include "career_button.h"
#include <vgui_controls/Label.h>
#include <vgui_controls/URLLabel.h>
#include <vgui_controls/ComboBox.h>
#include <vgui/ISurface.h>
#include <vgui/ILocalize.h>
#include <vgui_controls/ScrollBar.h>
#include <vgui_controls/BuildGroup.h>
#include <vgui_controls/ImageList.h>
#include <vgui_controls/TextImage.h>
#include <vgui_controls/Button.h>
#include "KeyValues.h"
using namespace vgui;
#ifndef _DEBUG
#define PROPORTIONAL_CAREER_FRAMES 1
#endif
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------
CCareerButton::CCareerButton(vgui::Panel *parent, const char *buttonName, const char *buttonText, const char *image, bool textFirst) : BaseClass( parent, buttonName, "" )
{
m_armedBorder = NULL;
m_textImage = new TextImage(buttonText);
m_image = scheme()->GetImage(image, true);
m_textFirst = textFirst;
}
//--------------------------------------------------------------------------------------------------------------
void CCareerButton::SetImage( const char *image )
{
m_image = scheme()->GetImage(image, true);
}
//--------------------------------------------------------------------------------------------------------------
void CCareerButton::Paint()
{
int buttonWide, buttonTall;
GetSize(buttonWide, buttonTall);
int imageWide, imageTall;
if ( m_image )
{
m_image->GetSize(imageWide, imageTall);
}
else
{
imageWide = imageTall = 0;
}
int textOffset = m_textPad;
if (m_textFirst)
{
if ( m_image )
{
m_image->SetPos(buttonWide - imageWide - m_imagePad, (buttonTall - imageTall)/2);
m_image->Paint();
}
}
else
{
if ( m_image )
{
m_image->SetPos(m_imagePad, (buttonTall - imageTall)/2);
m_image->Paint();
}
textOffset += imageWide + m_imagePad;
}
int textTall, textWide;
m_textImage->GetSize(textWide, textTall);
int textSpace = buttonWide - imageWide - m_imagePad - 2*m_textPad;
if ( IsEnabled() )
{
m_textImage->SetColor( m_textNormalColor );
}
else
{
m_textImage->SetColor( m_textDisabledColor );
}
m_textImage->SetPos(textOffset + (textSpace - textWide)/2, (buttonTall - textTall)/2);
m_textImage->Paint();
if (HasFocus() && IsEnabled() )
{
int x0, y0, x1, y1;
x0 = 3, y0 = 3, x1 = buttonWide - 4 , y1 = buttonTall - 2;
DrawFocusBorder(x0, y0, x1, y1);
}
}
//--------------------------------------------------------------------------------------------------------------
void CCareerButton::SetArmedBorder(IBorder *border)
{
m_armedBorder = border;
InvalidateLayout(false);
}
//--------------------------------------------------------------------------------------------------------------
IBorder* CCareerButton::GetBorder(bool depressed, bool armed, bool selected, bool keyfocus)
{
if ( /*_buttonBorderEnabled &&*/ armed && !depressed && IsEnabled() )
{
return m_armedBorder;
}
return BaseClass::GetBorder( depressed, armed, selected, keyfocus );
}
//--------------------------------------------------------------------------------------------------------------
void CCareerButton::ApplySchemeSettings( vgui::IScheme *pScheme )
{
BaseClass::ApplySchemeSettings( pScheme );
SetDefaultBorder( pScheme->GetBorder("CareerButtonBorder") );
SetDepressedBorder( pScheme->GetBorder("CareerButtonDepressedBorder") );
m_armedBorder = pScheme->GetBorder("CareerButtonArmedBorder");
m_textNormalColor = pScheme->GetColor( "Label.TextBrightColor", Color(255, 255, 255, 255) );
m_textDisabledColor = pScheme->GetColor( "Label.DisabledFgColor2", Color(128, 128, 128, 255) );
m_textImage->SetColor( m_textNormalColor );
if ( m_image )
{
m_image->SetColor( GetFgColor() );
}
m_textImage->SetFont( pScheme->GetFont( "Default", IsProportional() ) );
m_textPad = atoi(pScheme->GetResourceString( "CareerButtonTextPad" ));
m_imagePad = atoi(pScheme->GetResourceString( "CareerButtonImagePad" ));
if (IsProportional())
{
m_textPad = scheme()->GetProportionalScaledValueEx( GetScheme(),m_textPad);
m_imagePad = scheme()->GetProportionalScaledValueEx( GetScheme(),m_imagePad);
}
const int BufLen = 128;
char buf[BufLen];
GetText(buf, BufLen);
m_textImage->SetText(buf);
m_textImage->ResizeImageToContent();
int buttonWide, buttonTall;
GetSize(buttonWide, buttonTall);
int imageWide, imageTall;
if ( m_image )
{
m_image->GetSize(imageWide, imageTall);
}
else
{
imageWide = imageTall = 0;
}
int textSpace = buttonWide - imageWide - m_imagePad - 2*m_textPad;
int textWide, textTall;
m_textImage->GetContentSize(textWide, textTall);
if (textSpace < textWide)
m_textImage->SetSize(textSpace, textTall);
Color bgColor = pScheme->GetColor( "CareerButtonBG", Color(0, 0, 0, 0) );
SetDefaultColor( bgColor, bgColor );
SetArmedColor( bgColor, bgColor );
SetDepressedColor( bgColor, bgColor );
}
//--------------------------------------------------------------------------------------------------------------