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()
|
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;
|
m_ScreenBuffered = NULL;
|
||||||
|
|
||||||
@@ -362,14 +369,23 @@ ScreenManager::~ScreenManager()
|
|||||||
delete m_SystemLayer;
|
delete m_SystemLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is called when we start up, and when the theme changes or is reloaded. */
|
||||||
void ScreenManager::ThemeChanged()
|
void ScreenManager::ThemeChanged()
|
||||||
{
|
{
|
||||||
|
LOG->Trace( "ScreenManager::ThemeChanged" );
|
||||||
|
|
||||||
// reload common sounds
|
// reload common sounds
|
||||||
m_soundStart.Load( THEME->GetPathS("Common","start") );
|
m_soundStart.Load( THEME->GetPathS("Common","start") );
|
||||||
m_soundCoin.Load( THEME->GetPathS("Common","coin") );
|
m_soundCoin.Load( THEME->GetPathS("Common","coin") );
|
||||||
m_soundInvalid.Load( THEME->GetPathS("Common","invalid") );
|
m_soundInvalid.Load( THEME->GetPathS("Common","invalid") );
|
||||||
m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") );
|
m_soundScreenshot.Load( THEME->GetPathS("Common","screenshot") );
|
||||||
m_soundBack.Load( THEME->GetPathS("Common","back") );
|
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()
|
void ScreenManager::EmptyDeleteQueue()
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ CString ClassAndElementToFileName( const CString &sClassName, const CString &sEl
|
|||||||
|
|
||||||
ThemeManager::ThemeManager()
|
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;
|
CStringArray arrayThemeNames;
|
||||||
GetThemeNames( arrayThemeNames );
|
GetThemeNames( arrayThemeNames );
|
||||||
@@ -178,14 +178,17 @@ void ThemeManager::LoadThemeRecursive( deque<Theme> &theme, CString sThemeName )
|
|||||||
void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage )
|
void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage )
|
||||||
{
|
{
|
||||||
if( !DoesThemeExist(sThemeName) )
|
if( !DoesThemeExist(sThemeName) )
|
||||||
m_sCurThemeName = BASE_THEME_NAME;
|
sThemeName = BASE_THEME_NAME;
|
||||||
else
|
|
||||||
m_sCurThemeName = sThemeName;
|
|
||||||
|
|
||||||
if( !DoesLanguageExist(sLanguage) )
|
if( !DoesLanguageExist(sLanguage) )
|
||||||
m_sCurLanguage = BASE_LANGUAGE;
|
sLanguage = BASE_LANGUAGE;
|
||||||
else
|
LOG->Trace("ThemeManager::SwitchThemeAndLanguage: \"%s\", \"%s\"",
|
||||||
m_sCurLanguage = sLanguage;
|
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
|
// clear theme path cache
|
||||||
int i;
|
int i;
|
||||||
@@ -197,10 +200,6 @@ void ThemeManager::SwitchThemeAndLanguage( CString sThemeName, CString sLanguage
|
|||||||
// load current theme
|
// load current theme
|
||||||
LoadThemeRecursive( g_vThemes, m_sCurThemeName );
|
LoadThemeRecursive( g_vThemes, m_sCurThemeName );
|
||||||
|
|
||||||
// reload common sounds
|
|
||||||
if ( SCREENMAN != NULL )
|
|
||||||
SCREENMAN->ThemeChanged();
|
|
||||||
|
|
||||||
CString sMetric;
|
CString sMetric;
|
||||||
for( i = 0; GetCommandlineArgument( "metric", &sMetric, i ); ++i )
|
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("theme", "Theme: %s", sThemeName.c_str());
|
||||||
LOG->MapLog("language", "Language: %s", sLanguage.c_str());
|
LOG->MapLog("language", "Language: %s", sLanguage.c_str());
|
||||||
|
|
||||||
|
// reload common sounds
|
||||||
|
if ( SCREENMAN != NULL )
|
||||||
|
SCREENMAN->ThemeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
CString ThemeManager::GetThemeDirFromName( const CString &sThemeName )
|
CString ThemeManager::GetThemeDirFromName( const CString &sThemeName )
|
||||||
@@ -484,7 +487,12 @@ bool ThemeManager::HasMetric( CString sClassName, CString sValueName )
|
|||||||
|
|
||||||
void ThemeManager::ReloadMetrics()
|
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 )
|
if( SCREENMAN )
|
||||||
SCREENMAN->SystemMessage( "Reloaded metrics" );
|
SCREENMAN->SystemMessage( "Reloaded metrics" );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user