diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.cpp index 7a6a5a6b47..368ac4dd39 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.cpp +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.cpp @@ -12,6 +12,8 @@ extern atomic_t g_user_asked_for_recording; +atomic_t g_user_asked_for_fullscreen = false; + namespace rsx { namespace overlays @@ -80,7 +82,7 @@ namespace rsx if (btn != pad_button::cross) return page_navigation::stay; rsx_log.notice("User selected trophies in home menu"); - Emu.CallFromMainThread([trop_name = std::move(trop_name)]() + Emu.CallFromMainThread([trop_name]() { if (auto manager = g_fxo->try_get()) { @@ -110,6 +112,17 @@ namespace rsx return page_navigation::exit; }); + std::unique_ptr fullscreen = std::make_unique(get_localized_string(localized_string_id::HOME_MENU_TOGGLE_FULLSCREEN)); + add_item(fullscreen, [](pad_button btn) -> page_navigation + { + if (btn != pad_button::cross) + return page_navigation::stay; + + rsx_log.notice("User selected toggle fullscreen in home menu"); + g_user_asked_for_fullscreen = true; + return page_navigation::stay; // No need to exit + }); + add_page(std::make_shared(x, y, width, height, use_separators, this)); std::unique_ptr restart = std::make_unique(get_localized_string(localized_string_id::HOME_MENU_RESTART)); diff --git a/rpcs3/Emu/localized_string_id.h b/rpcs3/Emu/localized_string_id.h index 399b45c437..9ab9f57a9b 100644 --- a/rpcs3/Emu/localized_string_id.h +++ b/rpcs3/Emu/localized_string_id.h @@ -277,6 +277,7 @@ enum class localized_string_id HOME_MENU_RELOAD_SECOND_SAVESTATE, HOME_MENU_RELOAD_THIRD_SAVESTATE, HOME_MENU_RELOAD_FOURTH_SAVESTATE, + HOME_MENU_TOGGLE_FULLSCREEN, HOME_MENU_RECORDING, HOME_MENU_TROPHIES, HOME_MENU_TROPHY_LIST_TITLE, diff --git a/rpcs3/rpcs3qt/gs_frame.cpp b/rpcs3/rpcs3qt/gs_frame.cpp index 6557168cce..74ecf7fccd 100644 --- a/rpcs3/rpcs3qt/gs_frame.cpp +++ b/rpcs3/rpcs3qt/gs_frame.cpp @@ -51,6 +51,7 @@ LOG_CHANNEL(screenshot_log, "SCREENSHOT"); LOG_CHANNEL(mark_log, "MARK"); LOG_CHANNEL(gui_log, "GUI"); +extern atomic_t g_user_asked_for_fullscreen; extern atomic_t g_user_asked_for_recording; extern atomic_t g_user_asked_for_screenshot; extern atomic_t g_user_asked_for_frame_capture; @@ -840,6 +841,14 @@ void gs_frame::flip(draw_context_t, bool /*skip_frame*/) toggle_recording(); }); } + + if (g_user_asked_for_fullscreen.exchange(false)) + { + Emu.CallFromMainThread([this]() + { + toggle_fullscreen(); + }); + } } bool gs_frame::can_consume_frame() const diff --git a/rpcs3/rpcs3qt/localized_emu.h b/rpcs3/rpcs3qt/localized_emu.h index 7d4453a1bd..d05d3e52ee 100644 --- a/rpcs3/rpcs3qt/localized_emu.h +++ b/rpcs3/rpcs3qt/localized_emu.h @@ -298,6 +298,7 @@ private: case localized_string_id::HOME_MENU_RELOAD_SECOND_SAVESTATE: return tr("Reload Second-To-Last Emulation State"); case localized_string_id::HOME_MENU_RELOAD_THIRD_SAVESTATE: return tr("Reload Third-To-Last Emulation State"); case localized_string_id::HOME_MENU_RELOAD_FOURTH_SAVESTATE: return tr("Reload Fourth-To-Last Emulation State"); + case localized_string_id::HOME_MENU_TOGGLE_FULLSCREEN: return tr("Toggle Fullscreen"); case localized_string_id::HOME_MENU_RECORDING: return tr("Start/Stop Recording"); case localized_string_id::HOME_MENU_TROPHIES: return tr("Trophies"); case localized_string_id::HOME_MENU_TROPHY_LIST_TITLE: return tr("Trophy Progress: %0").arg(std::forward(args)...);