NoGUI: Start in fullscreen when option or command line flag is set

This commit is contained in:
Connor McLaughlin 2021-02-01 01:02:54 +10:00
parent 23e102b90a
commit 590513350c
10 changed files with 20 additions and 10 deletions

View file

@ -58,7 +58,7 @@ void DRMHostInterface::FixIncompatibleSettings(bool display_osd_messages)
g_settings.confim_power_off = false; g_settings.confim_power_off = false;
} }
bool DRMHostInterface::CreatePlatformWindow() bool DRMHostInterface::CreatePlatformWindow(bool fullscreen)
{ {
Assert(!m_drm_display); Assert(!m_drm_display);
m_drm_display = std::make_unique<DRMDisplay>(); m_drm_display = std::make_unique<DRMDisplay>();

View file

@ -22,7 +22,7 @@ public:
protected: protected:
virtual void FixIncompatibleSettings(bool display_osd_messages) override; virtual void FixIncompatibleSettings(bool display_osd_messages) override;
bool CreatePlatformWindow() override; bool CreatePlatformWindow(bool fullscreen) override;
void DestroyPlatformWindow() override; void DestroyPlatformWindow() override;
std::optional<WindowInfo> GetPlatformWindowInfo() override; std::optional<WindowInfo> GetPlatformWindowInfo() override;

View file

@ -48,7 +48,8 @@ bool NoGUIHostInterface::Initialize()
CreateImGuiContext(); CreateImGuiContext();
if (!CreatePlatformWindow()) const bool start_fullscreen = m_command_line_flags.start_fullscreen || g_settings.start_fullscreen;
if (!CreatePlatformWindow(start_fullscreen))
{ {
Log_ErrorPrintf("Failed to create platform window"); Log_ErrorPrintf("Failed to create platform window");
ImGui::DestroyContext(); ImGui::DestroyContext();
@ -264,12 +265,14 @@ bool NoGUIHostInterface::AcquireHostDisplay()
if (needs_switch) if (needs_switch)
{ {
const bool was_fullscreen = IsFullscreen();
ImGui::EndFrame(); ImGui::EndFrame();
DestroyDisplay(); DestroyDisplay();
// We need to recreate the window, otherwise bad things happen... // We need to recreate the window, otherwise bad things happen...
DestroyPlatformWindow(); DestroyPlatformWindow();
if (!CreatePlatformWindow()) if (!CreatePlatformWindow(was_fullscreen))
Panic("Failed to recreate platform window on GPU renderer switch"); Panic("Failed to recreate platform window on GPU renderer switch");
if (!CreateDisplay()) if (!CreateDisplay())

View file

@ -55,7 +55,7 @@ protected:
void RequestExit() override; void RequestExit() override;
virtual void PollAndUpdate() override; virtual void PollAndUpdate() override;
virtual bool CreatePlatformWindow() = 0; virtual bool CreatePlatformWindow(bool fullscreen) = 0;
virtual void DestroyPlatformWindow() = 0; virtual void DestroyPlatformWindow() = 0;
virtual std::optional<WindowInfo> GetPlatformWindowInfo() = 0; virtual std::optional<WindowInfo> GetPlatformWindowInfo() = 0;
void OnPlatformWindowResized(u32 new_width, u32 new_height, float new_scale); void OnPlatformWindowResized(u32 new_width, u32 new_height, float new_scale);

View file

@ -131,7 +131,7 @@ ALWAYS_INLINE static TinyString GetWindowTitle()
return TinyString::FromFormat("DuckStation %s (%s)", g_scm_tag_str, g_scm_branch_str); return TinyString::FromFormat("DuckStation %s (%s)", g_scm_tag_str, g_scm_branch_str);
} }
bool SDLHostInterface::CreatePlatformWindow() bool SDLHostInterface::CreatePlatformWindow(bool fullscreen)
{ {
// Create window. // Create window.
const u32 window_flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI; const u32 window_flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
@ -165,8 +165,11 @@ bool SDLHostInterface::CreatePlatformWindow()
SDL_FreeSurface(icon_surface); SDL_FreeSurface(icon_surface);
} }
if (m_fullscreen) if (fullscreen || m_fullscreen)
{
SDL_SetWindowFullscreen(m_window, SDL_WINDOW_FULLSCREEN_DESKTOP); SDL_SetWindowFullscreen(m_window, SDL_WINDOW_FULLSCREEN_DESKTOP);
m_fullscreen = true;
}
ImGui_ImplSDL2_Init(m_window); ImGui_ImplSDL2_Init(m_window);

View file

@ -29,7 +29,7 @@ protected:
std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override; std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override;
bool CreatePlatformWindow() override; bool CreatePlatformWindow(bool fullscreen) override;
void DestroyPlatformWindow() override; void DestroyPlatformWindow() override;
std::optional<WindowInfo> GetPlatformWindowInfo() override; std::optional<WindowInfo> GetPlatformWindowInfo() override;

View file

@ -57,7 +57,7 @@ bool Win32HostInterface::RegisterWindowClass()
return true; return true;
} }
bool Win32HostInterface::CreatePlatformWindow() bool Win32HostInterface::CreatePlatformWindow(bool fullscreen)
{ {
m_hwnd = CreateWindowExW(WS_EX_CLIENTEDGE, WINDOW_CLASS_NAME, _T("DuckStation"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, m_hwnd = CreateWindowExW(WS_EX_CLIENTEDGE, WINDOW_CLASS_NAME, _T("DuckStation"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT, nullptr, nullptr, CW_USEDEFAULT, DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT, nullptr, nullptr,

View file

@ -16,7 +16,7 @@ public:
static std::unique_ptr<NoGUIHostInterface> Create(); static std::unique_ptr<NoGUIHostInterface> Create();
protected: protected:
bool CreatePlatformWindow() override; bool CreatePlatformWindow(bool fullscreen) override;
void DestroyPlatformWindow() override; void DestroyPlatformWindow() override;
std::optional<WindowInfo> GetPlatformWindowInfo() override; std::optional<WindowInfo> GetPlatformWindowInfo() override;

View file

@ -304,6 +304,7 @@ bool CommonHostInterface::ParseCommandLineParameters(int argc, char* argv[],
else if (CHECK_ARG("-fullscreen")) else if (CHECK_ARG("-fullscreen"))
{ {
Log_InfoPrintf("Going fullscreen after booting."); Log_InfoPrintf("Going fullscreen after booting.");
m_command_line_flags.start_fullscreen = true;
force_fullscreen = true; force_fullscreen = true;
continue; continue;
} }

View file

@ -405,6 +405,9 @@ protected:
// disable controller interface (buggy devices with SDL) // disable controller interface (buggy devices with SDL)
BitField<u8, bool, 1, 1> disable_controller_interface; BitField<u8, bool, 1, 1> disable_controller_interface;
// starting fullscreen (outside of boot options)
BitField<u8, bool, 2, 1> start_fullscreen;
} m_command_line_flags = {}; } m_command_line_flags = {};
private: private: