diff --git a/BUILDING.md b/BUILDING.md index 2b1c416f26..d456c34f75 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -8,7 +8,7 @@ Other instructions may be found [here](https://wiki.rpcs3.net/index.php?title=Bu ### Windows 10 or later The following tools are required to build RPCS3 on Windows 10 or later: -- [Visual Studio 2022](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community) (or at least Visual Studio 2019 16.11.xx+ as C++20 is not included in previous versions) +- [Visual Studio 2022](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community) - **Optional** - [CMake 3.28.0+](https://www.cmake.org/download/) (add to PATH) **NOTES:** @@ -25,13 +25,13 @@ The following tools are required to build RPCS3 on Windows 10 or later: The `sln` solution available only on **Visual Studio** is the preferred building solution. It easily allows to build the **RPCS3** application in `Release` and `Debug` mode. In order to build **RPCS3** with the `sln` solution (with **Visual Studio**), **Qt** libs need to be detected. To detect the libs: -- add and set the `QTDIR` environment variable, e.g. `\6.8.0\msvc2019_64\` -- or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2019) +- add and set the `QTDIR` environment variable, e.g. `\6.8.0\msvc2022_64\` +- or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2022) - **NOTE:** If you have issues with the **Visual Studio Qt Plugin**, you may want to uninstall it and install the [Legacy Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.LEGACYQtVisualStudioTools2019) instead. + **NOTE:** If you have issues with the **Visual Studio Qt Plugin**, you may want to uninstall it and install the [Legacy Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.LEGACYQtVisualStudioTools2022) instead. In order to build **RPCS3** with the `CMake` solution (with both **Visual Studio** and standalone **CMake** tool): -- add and set the `CMAKE_PREFIX_PATH` environment variable to the **Qt** libs path, e.g. `\6.8.0\msvc2019_64\` +- add and set the `CMAKE_PREFIX_PATH` environment variable to the **Qt** libs path, e.g. `\6.8.0\msvc2022_64\` ### Linux @@ -119,7 +119,7 @@ Start **Visual Studio**, click on `Open a project or solution` and select the `r ##### Configuring the Qt Plugin (if used) 1) go to `Extensions->Qt VS Tools->Qt Versions` -2) add the path to your Qt installation with compiler e.g. `\6.8.0\msvc2019_64`, version will fill in automatically +2) add the path to your Qt installation with compiler e.g. `\6.8.0\msvc2022_64`, version will fill in automatically 3) go to `Extensions->Qt VS Tools->Options->Legacy Project Format`. (Only available in the **Legacy Qt Plugin**) 4) set `Build: Run pre-build setup` to `true`. (Only available in the **Legacy Qt Plugin**) diff --git a/rpcs3/Emu/CMakeLists.txt b/rpcs3/Emu/CMakeLists.txt index 613cb9bc24..f4f67a4ea1 100644 --- a/rpcs3/Emu/CMakeLists.txt +++ b/rpcs3/Emu/CMakeLists.txt @@ -523,6 +523,7 @@ target_sources(rpcs3_emu PRIVATE RSX/Overlays/HomeMenu/overlay_home_menu_message_box.cpp RSX/Overlays/HomeMenu/overlay_home_menu_page.cpp RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp + RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp RSX/Overlays/Network/overlay_recvmessage_dialog.cpp RSX/Overlays/Network/overlay_sendmessage_dialog.cpp RSX/Overlays/overlays.cpp 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 d519e7f2bb..059326aff3 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 @@ -1,6 +1,8 @@ #include "stdafx.h" #include "overlay_home_menu_main_menu.h" #include "overlay_home_menu_components.h" +#include "overlay_home_menu_settings.h" +#include "overlay_home_menu_savestate.h" #include "Emu/RSX/Overlays/FriendsList/overlay_friends_list_dialog.h" #include "Emu/RSX/Overlays/overlay_manager.h" #include "Emu/System.h" @@ -8,7 +10,6 @@ extern atomic_t g_user_asked_for_recording; extern atomic_t g_user_asked_for_screenshot; -extern bool boot_last_savestate(bool testing); namespace rsx { @@ -74,48 +75,7 @@ namespace rsx return page_navigation::exit; }); - const bool suspend_mode = g_cfg.savestate.suspend_emu.get(); - - std::unique_ptr save_state = std::make_unique(get_localized_string(suspend_mode ? localized_string_id::HOME_MENU_SAVESTATE_AND_EXIT : localized_string_id::HOME_MENU_SAVESTATE)); - add_item(save_state, [suspend_mode](pad_button btn) -> page_navigation - { - if (btn != pad_button::cross) return page_navigation::stay; - - rsx_log.notice("User selected savestate in home menu"); - - Emu.CallFromMainThread([suspend_mode]() - { - if (!suspend_mode) - { - Emu.after_kill_callback = []() - { - Emu.Restart(); - }; - } - - Emu.Kill(false, true); - }); - - return page_navigation::exit; - }); - - if (!suspend_mode && boot_last_savestate(true)) - { - std::unique_ptr reload_state = std::make_unique(get_localized_string(localized_string_id::HOME_MENU_RELOAD_SAVESTATE)); - add_item(reload_state, [](pad_button btn) -> page_navigation - { - if (btn != pad_button::cross) return page_navigation::stay; - - rsx_log.notice("User selected reload savestate in home menu"); - - Emu.CallFromMainThread([]() - { - boot_last_savestate(false); - }); - - return page_navigation::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)); add_item(restart, [](pad_button btn) -> page_navigation diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.h index f29dab2d02..25f71df919 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.h +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.h @@ -1,7 +1,6 @@ #pragma once #include "overlay_home_menu_page.h" -#include "overlay_home_menu_settings.h" namespace rsx { diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp new file mode 100644 index 0000000000..2ff9711d5b --- /dev/null +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.cpp @@ -0,0 +1,50 @@ +#include "stdafx.h" +#include "overlay_home_menu_savestate.h" +#include "overlay_home_menu_components.h" +#include "Emu/system_config.h" + +extern bool boot_last_savestate(bool testing); + +namespace rsx +{ + namespace overlays + { + home_menu_savestate::home_menu_savestate(s16 x, s16 y, u16 width, u16 height, bool use_separators, home_menu_page* parent) + : home_menu_page(x, y, width, height, use_separators, parent, get_localized_string(localized_string_id::HOME_MENU_SAVESTATE)) + { + const bool suspend_mode = g_cfg.savestate.suspend_emu.get(); + + std::unique_ptr save_state = std::make_unique( + get_localized_string(suspend_mode ? localized_string_id::HOME_MENU_SAVESTATE_AND_EXIT : localized_string_id::HOME_MENU_SAVESTATE_SAVE)); + + add_item(save_state, [suspend_mode](pad_button btn) -> page_navigation + { + if (btn != pad_button::cross) return page_navigation::stay; + rsx_log.notice("User selected savestate in home menu"); + Emu.CallFromMainThread([suspend_mode]() + { + if (!suspend_mode) + { + Emu.after_kill_callback = []() { Emu.Restart(); }; + } + Emu.Kill(false, true); + }); + return page_navigation::exit; + }); + + if (!suspend_mode && boot_last_savestate(true)) { + std::unique_ptr reload_state = std::make_unique( + get_localized_string(localized_string_id::HOME_MENU_RELOAD_SAVESTATE)); + + add_item(reload_state, [](pad_button btn) -> page_navigation + { + if (btn != pad_button::cross) return page_navigation::stay; + rsx_log.notice("User selected reload savestate in home menu"); + Emu.CallFromMainThread([]() { boot_last_savestate(false); }); + return page_navigation::exit; + }); + } + apply_layout(); + } + } +} diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.h new file mode 100644 index 0000000000..ce83bc6797 --- /dev/null +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_savestate.h @@ -0,0 +1,14 @@ +#pragma once + +#include "overlay_home_menu_page.h" + +namespace rsx +{ + namespace overlays + { + struct home_menu_savestate : public home_menu_page + { + home_menu_savestate(s16 x, s16 y, u16 width, u16 height, bool use_separators, home_menu_page* parent); + }; + } +} diff --git a/rpcs3/Emu/localized_string_id.h b/rpcs3/Emu/localized_string_id.h index 70f1f0c700..7476d58a59 100644 --- a/rpcs3/Emu/localized_string_id.h +++ b/rpcs3/Emu/localized_string_id.h @@ -265,6 +265,7 @@ enum class localized_string_id HOME_MENU_SETTINGS_DEBUG_TEXTURE_LOD_BIAS, HOME_MENU_SCREENSHOT, HOME_MENU_SAVESTATE, + HOME_MENU_SAVESTATE_SAVE, HOME_MENU_SAVESTATE_AND_EXIT, HOME_MENU_RELOAD_SAVESTATE, HOME_MENU_RECORDING, diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 9411c4fde8..d066b83908 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -120,6 +120,7 @@ + @@ -643,6 +644,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index f090f7ae8f..3183f8dd83 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1177,6 +1177,9 @@ Emu\GPU\RSX\Overlays\HomeMenu\Pages + + Emu\GPU\RSX\Overlays\HomeMenu\Pages + Emu\GPU\RSX\Overlays @@ -2416,6 +2419,9 @@ Emu\GPU\RSX\Overlays\HomeMenu\Pages + + Emu\GPU\RSX\Overlays\HomeMenu\Pages + Emu\GPU\RSX\Overlays diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index b569f4cec1..b399a7da01 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -2297,7 +2297,6 @@ void game_list_frame::BatchCreateCPUCaches(const std::vector& game_da const QString main_label = tr("Creating all LLVM caches"); progress_dialog* pdlg = new progress_dialog(tr("LLVM Cache Batch Creation"), main_label, tr("Cancel"), 0, ::narrow(total), false, this); - pdlg->setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint); pdlg->setAutoClose(false); pdlg->setAutoReset(false); pdlg->show(); diff --git a/rpcs3/rpcs3qt/localized_emu.h b/rpcs3/rpcs3qt/localized_emu.h index a95da8b0d0..2f6c4d19ae 100644 --- a/rpcs3/rpcs3qt/localized_emu.h +++ b/rpcs3/rpcs3qt/localized_emu.h @@ -285,7 +285,8 @@ private: case localized_string_id::HOME_MENU_SETTINGS_DEBUG_DISABLE_VIDEO_OUTPUT: return tr("Disable Video Output", "Debug"); case localized_string_id::HOME_MENU_SETTINGS_DEBUG_TEXTURE_LOD_BIAS: return tr("Texture LOD Bias Addend", "Debug"); case localized_string_id::HOME_MENU_SCREENSHOT: return tr("Take Screenshot"); - case localized_string_id::HOME_MENU_SAVESTATE: return tr("Save Emulation State"); + case localized_string_id::HOME_MENU_SAVESTATE: return tr("SaveState"); + case localized_string_id::HOME_MENU_SAVESTATE_SAVE: return tr("Save Emulation State"); case localized_string_id::HOME_MENU_SAVESTATE_AND_EXIT: return tr("Save Emulation State And Exit"); case localized_string_id::HOME_MENU_RELOAD_SAVESTATE: return tr("Reload Last Emulation State"); case localized_string_id::HOME_MENU_RECORDING: return tr("Start/Stop Recording");