fix ScreenManager stuff not being reloaded on theme change and F2
This commit is contained in:
@@ -341,7 +341,14 @@ void ScreenSystemLayer::Update( float fDeltaTime )
|
||||
|
||||
ScreenManager::ScreenManager()
|
||||
{
|
||||
m_SystemLayer = new ScreenSystemLayer;
|
||||
m_SystemLayer = NULL;
|
||||
|
||||
/* By the time this is constructed, THEME has already been set up and set to
|
||||
* the current theme. Call ThemeChanged(), to handle the starting theme
|
||||
* and set up m_SystemLayer. */
|
||||
ASSERT( THEME );
|
||||
ASSERT( !THEME->GetCurThemeName().empty() );
|
||||
this->ThemeChanged();
|
||||
|
||||
m_ScreenBuffered = NULL;
|
||||
|
||||
@@ -362,14 +369,23 @@ ScreenManager::~ScreenManager()
|
||||
delete m_SystemLayer;
|
||||
}
|
||||
|
||||
/* This is called when we start up, and when the theme changes or is reloaded. */
|
||||
void ScreenManager::ThemeChanged()
|
||||
{
|
||||
LOG->Trace( "ScreenManager::ThemeChanged" );
|
||||
|
||||
// reload common sounds
|
||||
m_soundStart.Load( THEME->GetPathS("Common","start") );
|
||||
m_soundCoin.Load( THEME->GetPathS("Common","coin") );
|
||||
m_soundInvalid.Load( THEME->GetPathS("Common","invalid") );
|
||||
m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") );
|
||||
m_soundBack.Load( THEME->GetPathS("Common","back") );
|
||||
|
||||
// reload system layer
|
||||
delete m_SystemLayer;
|
||||
m_SystemLayer = NULL; // new ScreenSystemLayer may throw
|
||||
m_SystemLayer = new ScreenSystemLayer;
|
||||
m_SystemLayer->RefreshCreditsMessages();
|
||||
}
|
||||
|
||||
void ScreenManager::EmptyDeleteQueue()
|
||||
|
||||
@@ -75,7 +75,7 @@ CString ClassAndElementToFileName( const CString &sClassName, const CString &sEl
|
||||
|
||||
ThemeManager::ThemeManager()
|
||||
{
|
||||
m_sCurThemeName = BASE_THEME_NAME; // Use the base theme for now. It's up to PrefsManager to change this.
|
||||
m_sCurThemeName = ""; // Use the base theme for now. It's up to PrefsManager to change this.
|
||||
|
||||
CStringArray arrayThemeNames;
|
||||
GetThemeNames( arrayThemeNames );
|
||||
@@ -178,14 +178,17 @@ void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, CString sThemeName )
|
||||
void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage )
|
||||
{
|
||||
if( !DoesThemeExist(sThemeName) )
|
||||
m_sCurThemeName = BASE_THEME_NAME;
|
||||
else
|
||||
m_sCurThemeName = sThemeName;
|
||||
|
||||
sThemeName = BASE_THEME_NAME;
|
||||
if( !DoesLanguageExist(sLanguage) )
|
||||
m_sCurLanguage = BASE_LANGUAGE;
|
||||
else
|
||||
m_sCurLanguage = sLanguage;
|
||||
sLanguage = BASE_LANGUAGE;
|
||||
LOG->Trace("ThemeManager::SwitchThemeAndLanguage: \"%s\", \"%s\"",
|
||||
sThemeName.c_str(), m_sCurThemeName.c_str() );
|
||||
|
||||
if( sThemeName == m_sCurThemeName && sLanguage == m_sCurLanguage )
|
||||
return;
|
||||
|
||||
m_sCurThemeName = sThemeName;
|
||||
m_sCurLanguage = sLanguage;
|
||||
|
||||
// clear theme path cache
|
||||
int i;
|
||||
@@ -197,10 +200,6 @@ void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage
|
||||
// load current theme
|
||||
LoadThemeRecursive( g_vThemes, m_sCurThemeName );
|
||||
|
||||
// reload common sounds
|
||||
if ( SCREENMAN != NULL )
|
||||
SCREENMAN->ThemeChanged();
|
||||
|
||||
CString sMetric;
|
||||
for( i = 0; GetCommandlineArgument( "metric", &sMetric, i ); ++i )
|
||||
{
|
||||
@@ -217,6 +216,10 @@ void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage
|
||||
|
||||
LOG->MapLog("theme", "Theme: %s", sThemeName.c_str());
|
||||
LOG->MapLog("language", "Language: %s", sLanguage.c_str());
|
||||
|
||||
// reload common sounds
|
||||
if ( SCREENMAN != NULL )
|
||||
SCREENMAN->ThemeChanged();
|
||||
}
|
||||
|
||||
CString ThemeManager::GetThemeDirFromName( const CString &sThemeName )
|
||||
@@ -484,7 +487,12 @@ bool ThemeManager::HasMetric( CString sClassName, CString sValueName )
|
||||
|
||||
void ThemeManager::ReloadMetrics()
|
||||
{
|
||||
SwitchThemeAndLanguage(m_sCurThemeName, m_sCurLanguage); // force a reload of the metrics cache
|
||||
// force a reload of the metrics cache
|
||||
const CString sThemeName = m_sCurThemeName, sCurLanguage = m_sCurLanguage;
|
||||
m_sCurThemeName = "";
|
||||
m_sCurLanguage = "";
|
||||
|
||||
SwitchThemeAndLanguage( sThemeName, sCurLanguage );
|
||||
if( SCREENMAN )
|
||||
SCREENMAN->SystemMessage( "Reloaded metrics" );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user