Clean up DoChangeTheme()
I moved the logic for getting the new screen name into a separate function GetNewScreenName(), for the sake of containing the logic for getting the new screen name in one place. I tried some different optimizations for GetNewScreenName(), however none of them were much of a performance savings over the original code, if any, when viewed in a disassembler, so I ultimately chose to keep the original code.
This commit is contained in:
+22
-14
@@ -106,6 +106,25 @@ void GameLoop::ChangeGame(const RString& new_game, const RString& new_theme)
|
|||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
RString GetNewScreenName()
|
||||||
|
{
|
||||||
|
if (THEME->HasMetric("Common", "AfterThemeChangeScreen"))
|
||||||
|
{
|
||||||
|
RString after_screen = THEME->GetMetric("Common", "AfterThemeChangeScreen");
|
||||||
|
if (SCREENMAN->IsScreenNameValid(after_screen))
|
||||||
|
{
|
||||||
|
return after_screen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RString new_screen = THEME->GetMetric("Common", "InitialScreen");
|
||||||
|
if (!SCREENMAN->IsScreenNameValid(new_screen))
|
||||||
|
{
|
||||||
|
return "ScreenInitialScreenIsInvalid";
|
||||||
|
}
|
||||||
|
return new_screen;
|
||||||
|
}
|
||||||
|
|
||||||
void DoChangeTheme()
|
void DoChangeTheme()
|
||||||
{
|
{
|
||||||
SAFE_DELETE( SCREENMAN );
|
SAFE_DELETE( SCREENMAN );
|
||||||
@@ -134,21 +153,10 @@ namespace
|
|||||||
// So now the correct thing to do is for a theme to specify its entry
|
// So now the correct thing to do is for a theme to specify its entry
|
||||||
// point after a theme change, ensuring that we are going to a valid
|
// point after a theme change, ensuring that we are going to a valid
|
||||||
// screen and not crashing. -Kyz
|
// screen and not crashing. -Kyz
|
||||||
RString new_screen= THEME->GetMetric("Common", "InitialScreen");
|
RString newScreenName = GetNewScreenName();
|
||||||
if(THEME->HasMetric("Common", "AfterThemeChangeScreen"))
|
SCREENMAN->SetNewScreen(newScreenName);
|
||||||
{
|
|
||||||
RString after_screen= THEME->GetMetric("Common", "AfterThemeChangeScreen");
|
|
||||||
if(SCREENMAN->IsScreenNameValid(after_screen))
|
|
||||||
{
|
|
||||||
new_screen= after_screen;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!SCREENMAN->IsScreenNameValid(new_screen))
|
|
||||||
{
|
|
||||||
new_screen= "ScreenInitialScreenIsInvalid";
|
|
||||||
}
|
|
||||||
SCREENMAN->SetNewScreen(new_screen);
|
|
||||||
|
|
||||||
|
// Indicate no further theme change is needed
|
||||||
g_NewTheme = RString();
|
g_NewTheme = RString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user