|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef GAMEUISCHEME_H
#define GAMEUISCHEME_H
#ifdef _WIN32
#pragma once
#endif
#include "igameuisystemmgr.h"
#include "vgui_surfacelib/ifontsurface.h"
#include "tier1/utlstring.h"
//#include "color.h"
#include "tier1/utlsymbol.h"
class CGameUISystemSurface; class KeyValues;
//-----------------------------------------------------------------------------
// Game UI version of a vgui scheme
//-----------------------------------------------------------------------------
class CGameUIScheme : public IGameUIScheme { public:
CGameUIScheme(); ~CGameUIScheme();
FontHandle_t GetFont( const char *fontName, bool proportional = false ); FontHandle_t GetFontNextSize( bool bUp, const char *fontName, bool proportional = false ); //Color GetColor( const char *colorName, Color defaultColor ){ return Color( 255, 255, 255, 255 ); }
// These fxns are very similar to CScheme.
void Shutdown( bool full ); void LoadFromFile( const char *pFilename, const char *inTag, KeyValues *inKeys );
// Gets at the scheme's name
const char *GetName() { return m_pTag; } const char *GetFileName() { return m_pFileName; }
char const *GetFontName( const FontHandle_t &font );
void ReloadFontGlyphs( int inScreenTall = -1 );
void SpewFonts();
bool GetFontRange( const char *fontname, int &nMin, int &nMax ); void SetFontRange( const char *fontname, int nMin, int nMax ); void SetActive( bool bActive ); bool IsActive() const;
private: const char *GetMungedFontName( const char *fontName, const char *scheme, bool proportional ); void LoadFonts(); int GetMinimumFontHeightForCurrentLanguage( const char *pLanguage = NULL ); FontHandle_t FindFontInAliasList( const char *fontName );
bool m_bActive; CUtlString m_pFileName; CUtlString m_pTag;
KeyValues *m_pData;
#pragma pack(1)
struct fontalias_t { CUtlSymbol _fontName; CUtlSymbol _trueFontName; unsigned short _font : 15; unsigned short m_bProportional : 1; }; #pragma pack()
struct fontrange_t { CUtlSymbol _fontName; int _min; int _max; };
CUtlVector< fontrange_t > m_FontRanges; CUtlVector< fontalias_t > m_FontAliases; };
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CGameUISchemeManager : public IGameUISchemeMgr { public: CGameUISchemeManager(); ~CGameUISchemeManager();
// loads a scheme from a file
// first scheme loaded becomes the default scheme, and all subsequent loaded scheme are derivitives of that
// tag is friendly string representing the name of the loaded scheme
IGameUIScheme * LoadSchemeFromFile( const char *fileName, const char *tag );
// reloads the schemes from the file
void ReloadSchemes();
// reloads scheme fonts
void ReloadFonts( int inScreenTall = -1 );
// returns a handle to the default (first loaded) scheme
IGameUIScheme * GetDefaultScheme();
// returns a handle to the scheme identified by "tag"
IGameUIScheme * GetScheme( const char *tag );
void Shutdown( bool full );
// gets the proportional coordinates for doing screen-size independant panel layouts
// use these for font, image and panel size scaling (they all use the pixel height of the display for scaling)
int GetProportionalScaledValue( int normalizedValue, int screenTall = -1 ); int GetProportionalNormalizedValue( int scaledValue ){ return 1; }
// first scheme loaded becomes the default scheme, and all subsequent loaded scheme are derivitives of that
IGameUIScheme * LoadSchemeFromFileEx( const char *pFilename, const char *tag ); // gets the proportional coordinates for doing screen-size independant panel layouts
// use these for font, image and panel size scaling (they all use the pixel height of the display for scaling)
int GetProportionalScaledValueEx( IGameUIScheme * scheme, int normalizedValue, int screenTall = -1 ){ return 0; } int GetProportionalNormalizedValueEx( IGameUIScheme * scheme, int scaledValue ){ return 0; }
// gets the proportional coordinates for doing screen-size independant panel layouts
// use these for font, image and panel size scaling (they all use the pixel height of the display for scaling)
int GetProportionalScaledValueEx( CGameUIScheme *pScheme, int normalizedValue, int screenTall = -1 ); int GetProportionalNormalizedValueEx( CGameUIScheme *pScheme, int scaledValue );
void SpewFonts();
void SetLanguage( const char *pLanguage ); const char *GetLanguage();
private:
int GetProportionalScaledValue_( int screenTall, int normalizedValue );
// Search for already-loaded schemes
IGameUIScheme * FindLoadedScheme(const char *pFilename);
CUtlVector< CGameUIScheme * > m_Schemes; };
extern CGameUISchemeManager *g_pGameUISchemeManager;
#endif // GAMEUISCHEME_H
|