Show the logo screen before the memstick screen on first boot with scoped storage

This commit is contained in:
Henrik Rydgård 2021-09-18 16:06:11 +02:00
parent 52527798c0
commit 76df060349
4 changed files with 40 additions and 20 deletions

View file

@ -623,12 +623,15 @@ void ConfirmMemstickMoveScreen::FinishFolderMove() {
if (!initialSetup_) {
// We restart the app here, to get the new settings.
System_SendMessage("graphics_restart", "");
}
if (g_Config.Save("MemstickPathChanged")) {
TriggerFinish(DialogResult::DR_OK);
} else {
error_ = iz->T("Failed to save config");
RecreateViews();
// This is initial setup, we now switch to the main screen, if we were successful
// (which we better have been...)
if (g_Config.Save("MemstickPathChanged")) {
// TriggerFinish(DialogResult::DR_OK);
screenManager()->switchScreen(new MainScreen());
} else {
error_ = iz->T("Failed to save config");
RecreateViews();
}
}
}

View file

@ -52,6 +52,7 @@
#include "UI/GameSettingsScreen.h"
#include "UI/MainScreen.h"
#include "UI/MiscScreens.h"
#include "UI/MemStickScreen.h"
#ifdef _MSC_VER
#pragma execution_character_set("utf-8")
@ -668,25 +669,35 @@ void LogoScreen::Next() {
if (!switched_) {
switched_ = true;
Path gamePath = boot_filename;
if (gotoGameSettings_) {
switch (afterLogoScreen_) {
case AfterLogoScreen::TO_GAME_SETTINGS:
if (!gamePath.empty()) {
screenManager()->switchScreen(new EmuScreen(gamePath));
} else {
screenManager()->switchScreen(new MainScreen());
}
screenManager()->push(new GameSettingsScreen(gamePath));
} else if (boot_filename.size()) {
screenManager()->switchScreen(new EmuScreen(gamePath));
} else {
screenManager()->switchScreen(new MainScreen());
break;
case AfterLogoScreen::MEMSTICK_SCREEN_INITIAL_SETUP:
screenManager()->switchScreen(new MemStickScreen(true));
break;
case AfterLogoScreen::DEFAULT:
default:
if (boot_filename.size()) {
screenManager()->switchScreen(new EmuScreen(gamePath));
} else {
screenManager()->switchScreen(new MainScreen());
}
break;
}
}
}
const float logoScreenSeconds = 2.5f;
LogoScreen::LogoScreen(bool gotoGameSettings)
: gotoGameSettings_(gotoGameSettings) {
LogoScreen::LogoScreen(AfterLogoScreen afterLogoScreen)
: afterLogoScreen_(afterLogoScreen) {
}
void LogoScreen::update() {
@ -1091,4 +1102,4 @@ void SettingInfoMessage::Draw(UIContext &dc) {
std::string SettingInfoMessage::GetText() const {
return showing_ && text_ ? text_->GetText() : "";
}
}

View file

@ -125,9 +125,16 @@ private:
std::vector<TextureShaderInfo> shaders_;
};
enum class AfterLogoScreen {
TO_GAME_SETTINGS,
DEFAULT,
MEMSTICK_SCREEN_INITIAL_SETUP,
};
class LogoScreen : public UIScreen {
public:
LogoScreen(bool gotoGameSettings = false);
LogoScreen(AfterLogoScreen afterLogoScreen = AfterLogoScreen::DEFAULT);
bool key(const KeyInput &key) override;
bool touch(const TouchInput &touch) override;
void update() override;
@ -140,7 +147,7 @@ private:
int frames_ = 0;
double sinceStart_ = 0.0;
bool switched_ = false;
bool gotoGameSettings_ = false;
AfterLogoScreen afterLogoScreen_;
};
class CreditsScreen : public UIDialogScreenWithBackground {

View file

@ -807,17 +807,16 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch
screenManager = new ScreenManager();
if (g_Config.memStickDirectory.empty()) {
INFO_LOG(SYSTEM, "No memstick directory! Asking for one to be configured.");
screenManager->switchScreen(new LogoScreen(false));
screenManager->push(new MemStickScreen(true));
screenManager->switchScreen(new LogoScreen(AfterLogoScreen::MEMSTICK_SCREEN_INITIAL_SETUP));
} else if (gotoGameSettings) {
screenManager->switchScreen(new LogoScreen(true));
screenManager->switchScreen(new LogoScreen(AfterLogoScreen::TO_GAME_SETTINGS));
} else if (gotoTouchScreenTest) {
screenManager->switchScreen(new MainScreen());
screenManager->push(new TouchTestScreen());
} else if (skipLogo) {
screenManager->switchScreen(new EmuScreen(boot_filename));
} else {
screenManager->switchScreen(new LogoScreen());
screenManager->switchScreen(new LogoScreen(AfterLogoScreen::DEFAULT));
}
// Easy testing