From bf4e8feb25cd186e42115877d8541219504047dd Mon Sep 17 00:00:00 2001 From: Stenzek Date: Tue, 9 Apr 2024 20:04:45 +1000 Subject: [PATCH] FullscreenUI: Redo landing page and add help bar --- data/resources/fullscreenui/back-icon.png | Bin 0 -> 39895 bytes data/resources/fullscreenui/desktop-mode.png | Bin 0 -> 35051 bytes data/resources/fullscreenui/drive-cdrom.png | Bin 0 -> 24107 bytes data/resources/fullscreenui/exit.png | Bin 0 -> 59363 bytes data/resources/fullscreenui/start-bios.png | Bin 0 -> 35672 bytes data/resources/fullscreenui/start-file.png | Bin 0 -> 55364 bytes src/core/achievements.cpp | 45 +- src/core/achievements.h | 7 + src/core/fullscreen_ui.cpp | 794 +++++++++++++++---- src/core/fullscreen_ui.h | 9 + src/core/host.h | 4 - src/duckstation-qt/qthost.cpp | 10 +- src/duckstation-regtest/regtest_host.cpp | 7 +- src/util/image.cpp | 7 +- src/util/imgui_fullscreen.cpp | 274 ++++++- src/util/imgui_fullscreen.h | 37 +- src/util/imgui_manager.cpp | 32 +- 17 files changed, 1006 insertions(+), 220 deletions(-) create mode 100644 data/resources/fullscreenui/back-icon.png create mode 100644 data/resources/fullscreenui/desktop-mode.png create mode 100644 data/resources/fullscreenui/drive-cdrom.png create mode 100644 data/resources/fullscreenui/exit.png create mode 100644 data/resources/fullscreenui/start-bios.png create mode 100644 data/resources/fullscreenui/start-file.png diff --git a/data/resources/fullscreenui/back-icon.png b/data/resources/fullscreenui/back-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..438aaa39b9fd25edc7378ecda25226abe8895e00 GIT binary patch literal 39895 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 Hu0mjfMfovC literal 0 HcmV?d00001 diff --git a/data/resources/fullscreenui/desktop-mode.png b/data/resources/fullscreenui/desktop-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..081e031b2297f648c25d976e135fa3f8400a2506 GIT binary patch literal 35051 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 literal 0 HcmV?d00001 diff --git a/data/resources/fullscreenui/drive-cdrom.png b/data/resources/fullscreenui/drive-cdrom.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa911ccd49c6a082f46dc98842710f8d7b07fc8 GIT binary patch literal 24107 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 literal 0 HcmV?d00001 diff --git a/data/resources/fullscreenui/exit.png b/data/resources/fullscreenui/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..d0cec9db7f05edd83f6a917c434dcc3f507a62a3 GIT binary patch literal 59363 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 literal 0 HcmV?d00001 diff --git a/data/resources/fullscreenui/start-bios.png b/data/resources/fullscreenui/start-bios.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7405269c02ba01a905f8a3ccbf21e509f31b0e GIT binary patch literal 35672 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

Ir=$^5F%x=%Kw!iS(8 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 literal 0 HcmV?d00001 diff --git a/data/resources/fullscreenui/start-file.png b/data/resources/fullscreenui/start-file.png new file mode 100644 index 0000000000000000000000000000000000000000..3e27c19333299e22ce60aa16eb745dcd4fe92a72 GIT binary patch literal 55364 zcmeFYXIN8P)HNDHXwpHYNf8i4x>V`C7ey4LH$~}4uL;tngNRBK5D^gqDosjgf{iXU zKqxA`mrz3Tt$5CPzxO`(|NV8J!vQ3Fuf5h>bIm!%m~$syH_@d%!+r(=fzayfX_-MF zQ1B}hLP-vO>;?Zk20vh~>c;92NKG0w&XElKo5xwt%oqX*6@WkxF%Ssx62uY&5+DJA ztT;d*3eO-A7N5LNHQ^DzLvUq@Z{QQP#*tS2v@R7*;_x; z0@@F3OeeED@Lb=ufVZFCy51{mT8!A@@GvzE*k69T z5?UyyEUw1GKna6J{r^Ayzcs-rjZXYa)Yfb?J)YNjtrJp3B4MN(qqYS1=`&2O$$^A# zJQl7x?EL!ms{rRYC?kUQ5q-px=C$teLZ3d2rf#&__`u-}fvk`*LDi$L4;0SAcp(v~ zX%TDA%T|>KWZmP6%lE;)LUg5`|FBMkF%&xtTwL;O-i+9kTHQb9&e|4apoCUcjIE}H zZ$)!oDAQEufesWp#A?jZLvW&CIH-F2ew-r%6;BKYg95B2Y(r(Qi2gJPg3^e8q{gE) zO9jD39uF55fIDAOs&UVDa^tt){0pW$3{JE6y2tAYGnkVwXaCETT9D8S+{Xj)kPUM3pspRcsrI676Ljp5|@H`b3rM3i7b(3bt5;h5^D3;~x z3<;1u1{K^KJwdbYXmdCN_^WW6bDU%II{Xw#sMU&pL-B>@)d80 zoL_=4E!7PL&B{j{(-@SR?N~g-M?2LV9uV*t!pT)m-Q(9xpIGTt4rj%ohZmehvbzp9 zXIePWb;fN*&;1#elT4O0rC%5;o&50Q%z!{trD+z{&r-cSffj|O5c;LMxyaK^c0SoQ z1v)PFak}8BV!WD`-;cDckFL^!dp?|{;$a|J5)A*v$K5zqw~m6O8@l0w)+hD53)RMX z?#r?V|9QSx-JCa-%1p%rRa?3me%Q&~It{LLN~YxxnNHNrrw>C^rykBys0LR!vZg^;jdngICQ_|UH?b@mJr?8Y zu#&o}KyI55TA5m+TevLExuw@=gFotr<9E*~WNJYuSDkT4DVhaE2vd2W=S(x(3D!Q* zU%;5cw=?qj@~Tmg@5>wBvtKew@^zrCcdlg581o}2A#*z%1kyOiaQZf_%(0ZTw1t79 z=)V?dtf}&gc?IrRE=%(_fa2NPnp97hO)Zv;X)c&uVoZ3)UXM1i|*5Lk40)BIBiH3oM=N&K6-BTpG zTYImeB)_hbQ&9L$2gGN5|IJj`UQW&8GyjW9;Si>gb}`>%;Y9^fy*1rtvdOMup}ef1 zd&unJpeirPDYe<-JA$};)NW9m(J)Q`k(p^4T^T^6q(pk*R%0A~Vr= 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 literal 0 HcmV?d00001 diff --git a/src/core/achievements.cpp b/src/core/achievements.cpp index 2098dc8d1..4e1982d23 100644 --- a/src/core/achievements.cpp +++ b/src/core/achievements.cpp @@ -1725,16 +1725,7 @@ void Achievements::ShowLoginNotification() if (g_settings.achievements_notifications && FullscreenUI::Initialize()) { - std::string badge_path = GetUserBadgePath(user->username); - if (!FileSystem::FileExists(badge_path.c_str())) - { - char url[512]; - const int res = rc_client_user_get_image_url(user, url, std::size(url)); - if (res == RC_OK) - DownloadImage(url, badge_path); - else - ReportRCError(res, "rc_client_user_get_image_url() failed: "); - } + std::string badge_path = GetLoggedInUserBadgePath(); //: Summary for login notification. std::string title = user->display_name; @@ -1746,6 +1737,37 @@ void Achievements::ShowLoginNotification() } } +const char* Achievements::GetLoggedInUserName() +{ + const rc_client_user_t* user = rc_client_get_user_info(s_client); + if (!user) [[unlikely]] + return nullptr; + + return user->username; +} + +std::string Achievements::GetLoggedInUserBadgePath() +{ + std::string badge_path; + + const rc_client_user_t* user = rc_client_get_user_info(s_client); + if (!user) [[unlikely]] + return badge_path; + + badge_path = GetUserBadgePath(user->username); + if (!FileSystem::FileExists(badge_path.c_str())) [[unlikely]] + { + char url[512]; + const int res = rc_client_user_get_image_url(user, url, std::size(url)); + if (res == RC_OK) + DownloadImage(url, badge_path); + else + ReportRCError(res, "rc_client_user_get_image_url() failed: "); + } + + return badge_path; +} + void Achievements::Logout() { if (IsActive()) @@ -2290,6 +2312,8 @@ void Achievements::DrawAchievementsWindow() ImGuiFullscreen::EndMenuButtons(); } ImGuiFullscreen::EndFullscreenWindow(); + + FullscreenUI::SetStandardSelectionFooterText(true); } void Achievements::DrawAchievement(const rc_client_achievement_t* cheevo) @@ -2705,6 +2729,7 @@ void Achievements::DrawLeaderboardsWindow() } } ImGuiFullscreen::EndFullscreenWindow(); + FullscreenUI::SetStandardSelectionFooterText(true); if (!is_leaderboard_open) { diff --git a/src/core/achievements.h b/src/core/achievements.h index fbfc8c728..504b92389 100644 --- a/src/core/achievements.h +++ b/src/core/achievements.h @@ -119,6 +119,13 @@ const std::string& GetRichPresenceString(); /// Should be called with the lock held. const std::string& GetGameTitle(); +/// Returns the logged-in user name. +const char* GetLoggedInUserName(); + +/// Returns the path to the user's profile avatar. +/// Should be called with the lock held. +std::string GetLoggedInUserBadgePath(); + /// Clears all cached state used to render the UI. void ClearUIState(); diff --git a/src/core/fullscreen_ui.cpp b/src/core/fullscreen_ui.cpp index dabddc034..3ed5baa5e 100644 --- a/src/core/fullscreen_ui.cpp +++ b/src/core/fullscreen_ui.cpp @@ -19,6 +19,7 @@ #include "scmversion/scmversion.h" +#include "util/cd_image.h" #include "util/gpu_device.h" #include "util/imgui_fullscreen.h" #include "util/imgui_manager.h" @@ -80,6 +81,7 @@ using ImGuiFullscreen::g_large_font; using ImGuiFullscreen::g_layout_padding_left; using ImGuiFullscreen::g_layout_padding_top; using ImGuiFullscreen::g_medium_font; +using ImGuiFullscreen::LAYOUT_FOOTER_HEIGHT; using ImGuiFullscreen::LAYOUT_LARGE_FONT_SIZE; using ImGuiFullscreen::LAYOUT_MEDIUM_FONT_SIZE; using ImGuiFullscreen::LAYOUT_MENU_BUTTON_HEIGHT; @@ -109,6 +111,7 @@ using ImGuiFullscreen::AddNotification; using ImGuiFullscreen::BeginFullscreenColumns; using ImGuiFullscreen::BeginFullscreenColumnWindow; using ImGuiFullscreen::BeginFullscreenWindow; +using ImGuiFullscreen::BeginHorizontalMenu; using ImGuiFullscreen::BeginMenuButtons; using ImGuiFullscreen::BeginNavBar; using ImGuiFullscreen::CenterImage; @@ -119,13 +122,18 @@ using ImGuiFullscreen::DrawShadowedText; using ImGuiFullscreen::EndFullscreenColumns; using ImGuiFullscreen::EndFullscreenColumnWindow; using ImGuiFullscreen::EndFullscreenWindow; +using ImGuiFullscreen::EndHorizontalMenu; using ImGuiFullscreen::EndMenuButtons; using ImGuiFullscreen::EndNavBar; using ImGuiFullscreen::EnumChoiceButton; using ImGuiFullscreen::FloatingButton; +using ImGuiFullscreen::ForceKeyNavEnabled; using ImGuiFullscreen::GetCachedTexture; using ImGuiFullscreen::GetCachedTextureAsync; using ImGuiFullscreen::GetPlaceholderTexture; +using ImGuiFullscreen::HorizontalMenuItem; +using ImGuiFullscreen::IsFocusResetQueued; +using ImGuiFullscreen::IsGamepadInputSource; using ImGuiFullscreen::LayoutScale; using ImGuiFullscreen::LoadTexture; using ImGuiFullscreen::MenuButton; @@ -150,6 +158,7 @@ using ImGuiFullscreen::QueueResetFocus; using ImGuiFullscreen::RangeButton; using ImGuiFullscreen::ResetFocusHere; using ImGuiFullscreen::RightAlignNavButtons; +using ImGuiFullscreen::SetFullscreenFooterText; using ImGuiFullscreen::ShowToast; using ImGuiFullscreen::ThreeWayToggleButton; using ImGuiFullscreen::ToggleButton; @@ -161,7 +170,10 @@ enum class MainWindowType { None, Landing, + StartGame, + Exit, GameList, + GameListSettings, Settings, PauseMenu, Achievements, @@ -193,11 +205,10 @@ enum class SettingsPage Count }; -enum class GameListPage +enum class GameListView { Grid, List, - Settings, Count }; @@ -210,17 +221,21 @@ struct PostProcessingStageInfo ////////////////////////////////////////////////////////////////////////// // Main ////////////////////////////////////////////////////////////////////////// -static void ToggleTheme(); static void PauseForMenuOpen(bool set_pause_menu_open); +static bool AreAnyDialogsOpen(); static void ClosePauseMenu(); static void OpenPauseSubMenu(PauseSubMenu submenu); +static void DrawLandingTemplate(ImVec2* menu_pos, ImVec2* menu_size); static void DrawLandingWindow(); +static void DrawStartGameWindow(); +static void DrawExitWindow(); static void DrawPauseMenu(); static void ExitFullscreenAndOpenURL(const std::string_view& url); static void CopyTextToClipboard(std::string title, const std::string_view& text); static void DrawAboutWindow(); static void OpenAboutWindow(); static void FixStateIfPaused(); +static void GetStandardSelectionFooterText(SmallStringBase& dest, bool back_instead_of_cancel); static MainWindowType s_current_main_window = MainWindowType::None; static PauseSubMenu s_current_pause_submenu = PauseSubMenu::None; @@ -255,12 +270,15 @@ static void DoStartPath(std::string path, std::string state = std::string(), static void DoResume(); static void DoStartFile(); static void DoStartBIOS(); +static void DoStartDisc(std::string path); +static void DoStartDisc(); static void DoToggleFastForward(); static void DoShutdown(bool save_state); static void DoReset(); static void DoChangeDiscFromFile(); static void DoChangeDisc(); static void DoRequestExit(); +static void DoDesktopMode(); static void DoToggleFullscreen(); static void DoCheatsMenu(); static void DoToggleAnalogMode(); @@ -414,10 +432,11 @@ struct SaveStateListEntry bool global; }; -static void InitializePlaceholderSaveStateListEntry(SaveStateListEntry* li, const std::string& title, - const std::string& serial, s32 slot, bool global); -static bool InitializeSaveStateListEntry(SaveStateListEntry* li, const std::string& title, const std::string& serial, - s32 slot, bool global); +static void InitializePlaceholderSaveStateListEntry(SaveStateListEntry* li, const std::string& serial, s32 slot, + bool global); +static bool InitializeSaveStateListEntryFromSerial(SaveStateListEntry* li, const std::string& serial, s32 slot, + bool global); +static bool InitializeSaveStateListEntryFromPath(SaveStateListEntry* li, std::string path, s32 slot, bool global); static void PopulateSaveStateScreenshot(SaveStateListEntry* li, const ExtendedSaveStateInfo* ssi); static void ClearSaveStateEntryList(); static u32 PopulateSaveStateListEntries(const std::string& title, const std::string& serial); @@ -445,7 +464,7 @@ static void DrawGameList(const ImVec2& heading_size); static void DrawGameGrid(const ImVec2& heading_size); static void HandleGameListActivate(const GameList::Entry* entry); static void HandleGameListOptions(const GameList::Entry* entry); -static void DrawGameListSettingsPage(const ImVec2& heading_size); +static void DrawGameListSettingsWindow(); static void SwitchToGameList(); static void PopulateGameListEntryList(); static GPUTexture* GetTextureForGameListEntryType(GameList::EntryType type); @@ -455,7 +474,7 @@ static GPUTexture* GetCoverForCurrentGame(); // Lazily populated cover images. static std::unordered_map s_cover_image_map; static std::vector s_game_list_sorted_entries; -static GameListPage s_game_list_page = GameListPage::Grid; +static GameListView s_game_list_view = GameListView::Grid; } // namespace FullscreenUI ////////////////////////////////////////////////////////////////////////// @@ -476,6 +495,73 @@ void FullscreenUI::TimeToPrintableString(SmallStringBase* str, time_t t) str->assign(buf); } +void FullscreenUI::GetStandardSelectionFooterText(SmallStringBase& dest, bool back_instead_of_cancel) +{ + if (IsGamepadInputSource()) + { + ImGuiFullscreen::CreateFooterTextString( + dest, + std::array{std::make_pair(ICON_PF_XBOX_DPAD_UP_DOWN, FSUI_VSTR("Change Selection")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, back_instead_of_cancel ? FSUI_VSTR("Back") : FSUI_VSTR("Cancel"))}); + } + else + { + ImGuiFullscreen::CreateFooterTextString( + dest, std::array{std::make_pair(ICON_PF_ARROW_UP ICON_PF_ARROW_DOWN, FSUI_VSTR("Change Selection")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_ESC, back_instead_of_cancel ? FSUI_VSTR("Back") : FSUI_VSTR("Cancel"))}); + } +} + +void FullscreenUI::SetStandardSelectionFooterText(bool back_instead_of_cancel) +{ + SmallString text; + GetStandardSelectionFooterText(text, back_instead_of_cancel); + ImGuiFullscreen::SetFullscreenFooterText(text); +} + +void ImGuiFullscreen::GetChoiceDialogHelpText(SmallStringBase& dest) +{ + FullscreenUI::GetStandardSelectionFooterText(dest, false); +} + +void ImGuiFullscreen::GetFileSelectorHelpText(SmallStringBase& dest) +{ + if (IsGamepadInputSource()) + { + ImGuiFullscreen::CreateFooterTextString( + dest, std::array{std::make_pair(ICON_PF_XBOX_DPAD_UP_DOWN, FSUI_VSTR("Change Selection")), + std::make_pair(ICON_PF_BUTTON_Y, FSUI_VSTR("Parent Directory")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Cancel"))}); + } + else + { + ImGuiFullscreen::CreateFooterTextString( + dest, + std::array{std::make_pair(ICON_PF_ARROW_UP ICON_PF_ARROW_DOWN, FSUI_VSTR("Change Selection")), + std::make_pair(ICON_PF_BACKSPACE, FSUI_VSTR("Parent Directory")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), std::make_pair(ICON_PF_ESC, FSUI_VSTR("Cancel"))}); + } +} + +void ImGuiFullscreen::GetInputDialogHelpText(SmallStringBase& dest) +{ + if (IsGamepadInputSource()) + { + CreateFooterTextString(dest, std::array{std::make_pair(ICON_PF_KEYBOARD, FSUI_VSTR("Enter Value")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Cancel"))}); + } + else + { + CreateFooterTextString(dest, std::array{std::make_pair(ICON_PF_KEYBOARD, FSUI_VSTR("Enter Value")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_ESC, FSUI_VSTR("Cancel"))}); + } +} + ////////////////////////////////////////////////////////////////////////// // Main ////////////////////////////////////////////////////////////////////////// @@ -514,6 +600,7 @@ bool FullscreenUI::Initialize() if (!System::IsRunning()) Host::OnIdleStateChanged(); + ForceKeyNavEnabled(); return true; } @@ -524,8 +611,14 @@ bool FullscreenUI::IsInitialized() bool FullscreenUI::HasActiveWindow() { - return s_initialized && (s_current_main_window != MainWindowType::None || s_save_state_selector_open || - ImGuiFullscreen::IsChoiceDialogOpen() || ImGuiFullscreen::IsFileSelectorOpen()); + return s_initialized && (s_current_main_window != MainWindowType::None || AreAnyDialogsOpen()); +} + +bool FullscreenUI::AreAnyDialogsOpen() +{ + return (s_save_state_selector_open || s_about_window_open || + s_input_binding_type != InputBindingInfo::Type::Unknown || ImGuiFullscreen::IsChoiceDialogOpen() || + ImGuiFullscreen::IsFileSelectorOpen()); } void FullscreenUI::CheckForConfigChanges(const Settings& old_settings) @@ -587,14 +680,6 @@ void FullscreenUI::OnRunningGameChanged() s_current_game_subtitle = {}; } -void FullscreenUI::ToggleTheme() -{ - const bool new_light = !Host::GetBaseBoolSettingValue("Main", "UseLightFullscreenUITheme", false); - Host::SetBaseBoolSettingValue("Main", "UseLightFullscreenUITheme", new_light); - Host::CommitBaseSettingChanges(); - ImGuiFullscreen::SetTheme(new_light); -} - void FullscreenUI::PauseForMenuOpen(bool set_pause_menu_open) { s_was_paused_on_quick_menu_open = (System::GetState() == System::State::Paused); @@ -616,6 +701,7 @@ void FullscreenUI::OpenPauseMenu() s_current_main_window = MainWindowType::PauseMenu; s_current_pause_submenu = PauseSubMenu::None; QueueResetFocus(); + ForceKeyNavEnabled(); FixStateIfPaused(); } @@ -696,9 +782,18 @@ void FullscreenUI::Render() case MainWindowType::Landing: DrawLandingWindow(); break; + case MainWindowType::StartGame: + DrawStartGameWindow(); + break; + case MainWindowType::Exit: + DrawExitWindow(); + break; case MainWindowType::GameList: DrawGameListWindow(); break; + case MainWindowType::GameListSettings: + DrawGameListSettingsWindow(); + break; case MainWindowType::Settings: DrawSettingsWindow(); break; @@ -834,14 +929,23 @@ void FullscreenUI::DoStartPath(std::string path, std::string state, std::optiona void FullscreenUI::DoResume() { - std::string path(System::GetMostRecentResumeSaveStatePath()); + std::string path = System::GetMostRecentResumeSaveStatePath(); if (path.empty()) { ShowToast({}, FSUI_CSTR("No resume save state found.")); return; } - DoStartPath({}, std::move(path)); + SaveStateListEntry slentry; + if (!InitializeSaveStateListEntryFromPath(&slentry, std::move(path), -1, false)) + return; + + CloseSaveStateSelector(); + s_save_state_selector_slots.push_back(std::move(slentry)); + s_save_state_selector_game_path = {}; + s_save_state_selector_loading = true; + s_save_state_selector_open = true; + s_save_state_selector_resuming = true; } void FullscreenUI::DoStartFile() @@ -869,6 +973,56 @@ void FullscreenUI::DoStartBIOS() }); } +void FullscreenUI::DoStartDisc(std::string path) +{ + Host::RunOnCPUThread([path = std::move(path)]() mutable { + if (System::IsValid()) + return; + + SystemBootParameters params; + params.filename = std::move(path); + System::BootSystem(std::move(params)); + }); +} + +void FullscreenUI::DoStartDisc() +{ + std::vector> devices = CDImage::GetDeviceList(); + if (devices.empty()) + { + ShowToast(std::string(), + FSUI_STR("Could not find any CD/DVD-ROM devices. Please ensure you have a drive connected and sufficient " + "permissions to access it.")); + return; + } + + // if there's only one, select it automatically + if (devices.size() == 1) + { + DoStartDisc(std::move(devices.front().first)); + return; + } + + ImGuiFullscreen::ChoiceDialogOptions options; + std::vector paths; + options.reserve(devices.size()); + paths.reserve(paths.size()); + for (auto& [path, name] : devices) + { + options.emplace_back(std::move(name), false); + paths.push_back(std::move(path)); + } + OpenChoiceDialog(FSUI_ICONSTR(ICON_FA_COMPACT_DISC, "Select Disc Drive"), false, std::move(options), + [paths = std::move(paths)](s32 index, const std::string&, bool) mutable { + if (index < 0) + return; + + DoStartDisc(std::move(paths[index])); + CloseChoiceDialog(); + QueueResetFocus(); + }); +} + void FullscreenUI::DoShutdown(bool save_state) { Host::RunOnCPUThread([save_state]() { Host::RequestSystemShutdown(false, save_state); }); @@ -1066,7 +1220,12 @@ void FullscreenUI::DoToggleAnalogMode() void FullscreenUI::DoRequestExit() { - Host::RunOnCPUThread([]() { Host::RequestExit(true); }); + Host::RunOnCPUThread([]() { Host::RequestExitApplication(true); }); +} + +void FullscreenUI::DoDesktopMode() +{ + Host::RunOnCPUThread([]() { Host::RequestExitBigPicture(); }); } void FullscreenUI::DoToggleFullscreen() @@ -1084,103 +1243,250 @@ void FullscreenUI::SwitchToLanding() QueueResetFocus(); } +void FullscreenUI::DrawLandingTemplate(ImVec2* menu_pos, ImVec2* menu_size) +{ + const ImGuiIO& io = ImGui::GetIO(); + const ImVec2 heading_size = ImVec2( + io.DisplaySize.x, LayoutScale(LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY + LAYOUT_MENU_BUTTON_Y_PADDING * 2.0f + 2.0f)); + *menu_pos = ImVec2(0.0f, heading_size.y); + *menu_size = ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT)); + + if (BeginFullscreenWindow(ImVec2(0.0f, 0.0f), heading_size, "landing_heading", UIPrimaryColor)) + { + ImFont* const heading_font = g_large_font; + ImDrawList* const dl = ImGui::GetWindowDrawList(); + SmallString heading_str; + + ImGui::PushFont(heading_font); + ImGui::PushStyleColor(ImGuiCol_Text, UIPrimaryTextColor); + + // draw branding + { + const ImVec2 logo_pos = LayoutScale(LAYOUT_MENU_BUTTON_X_PADDING, LAYOUT_MENU_BUTTON_Y_PADDING); + const ImVec2 logo_size = LayoutScale(LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY); + dl->AddImage(GetCachedTexture("fullscreenui/duck.png"), logo_pos, logo_pos + logo_size); + dl->AddText(heading_font, heading_font->FontSize, + ImVec2(logo_pos.x + logo_size.x + LayoutScale(LAYOUT_MENU_BUTTON_X_PADDING), logo_pos.y), + ImGui::GetColorU32(ImGuiCol_Text), "DuckStation"); + } + + // draw time + ImVec2 time_pos; + { + heading_str.format(FSUI_FSTR("{:%H:%M}"), fmt::localtime(std::time(nullptr))); + + const ImVec2 time_size = heading_font->CalcTextSizeA(heading_font->FontSize, FLT_MAX, 0.0f, "00:00"); + time_pos = ImVec2(heading_size.x - LayoutScale(LAYOUT_MENU_BUTTON_X_PADDING) - time_size.x, + LayoutScale(LAYOUT_MENU_BUTTON_Y_PADDING)); + ImGui::RenderTextClipped(time_pos, time_pos + time_size, heading_str.c_str(), heading_str.end_ptr(), &time_size); + } + + // draw achievements info + if (Achievements::IsActive()) + { + const auto lock = Achievements::GetLock(); + const char* username = Achievements::GetLoggedInUserName(); + if (username) + { + const ImVec2 name_size = heading_font->CalcTextSizeA(heading_font->FontSize, FLT_MAX, 0.0f, username); + const ImVec2 name_pos = + ImVec2(time_pos.x - name_size.x - LayoutScale(LAYOUT_MENU_BUTTON_X_PADDING), time_pos.y); + ImGui::RenderTextClipped(name_pos, name_pos + name_size, username, nullptr, &name_size); + + // TODO: should we cache this? heap allocations bad... + std::string badge_path = Achievements::GetLoggedInUserBadgePath(); + if (!badge_path.empty()) [[likely]] + { + const ImVec2 badge_size = + LayoutScale(LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY); + const ImVec2 badge_pos = + ImVec2(name_pos.x - badge_size.x - LayoutScale(LAYOUT_MENU_BUTTON_X_PADDING), time_pos.y); + + dl->AddImage(reinterpret_cast(GetCachedTextureAsync(badge_path)), badge_pos, + badge_pos + badge_size); + } + } + } + + ImGui::PopStyleColor(); + ImGui::PopFont(); + } + EndFullscreenWindow(); +} + void FullscreenUI::DrawLandingWindow() { - BeginFullscreenColumns(nullptr, 0.0f, true); + ImVec2 menu_pos, menu_size; + DrawLandingTemplate(&menu_pos, &menu_size); - if (BeginFullscreenColumnWindow(0.0f, -710.0f, "logo", UIPrimaryDarkColor)) - { - const float image_size = LayoutScale(380.f); - ImGui::SetCursorPos(ImVec2((ImGui::GetWindowWidth() * 0.5f) - (image_size * 0.5f), - (ImGui::GetWindowHeight() * 0.5f) - (image_size * 0.5f))); - ImGui::Image(s_app_icon_texture.get(), ImVec2(image_size, image_size)); - } - EndFullscreenColumnWindow(); + ImGui::PushStyleColor(ImGuiCol_Text, UIBackgroundTextColor); - if (BeginFullscreenColumnWindow(-710.0f, 0.0f, "menu", UIBackgroundColor)) + if (BeginHorizontalMenu("landing_window", menu_pos, menu_size, 4)) { ResetFocusHere(); - BeginMenuButtons(7, 0.5f); - - if (MenuButton(FSUI_ICONSTR(ICON_FA_LIST, "Game List"), - FSUI_CSTR("Launch a game from images scanned from your game directories."))) + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/address-book-new.png"), FSUI_CSTR("Game List"), + FSUI_CSTR("Launch a game from images scanned from your game directories."))) { SwitchToGameList(); } - if (MenuButton(FSUI_ICONSTR(ICON_FA_PLAY_CIRCLE, "Resume"), - FSUI_CSTR("Starts the console from where it was before it was last closed."))) + if (HorizontalMenuItem( + GetCachedTexture("fullscreenui/media-cdrom.png"), FSUI_CSTR("Start Game"), + FSUI_CSTR("Launch a game from a file, disc, or starts the console without any disc inserted."))) { - System::GetMostRecentResumeSaveStatePath(); - DoResume(); + s_current_main_window = MainWindowType::StartGame; + QueueResetFocus(); } - if (MenuButton(FSUI_ICONSTR(ICON_FA_FOLDER_OPEN, "Start File"), - FSUI_CSTR("Launch a game by selecting a file/disc image."))) + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/applications-system.png"), FSUI_CSTR("Settings"), + FSUI_CSTR("Changes settings for the application."))) + { + SwitchToSettings(); + } + + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/exit.png"), FSUI_CSTR("Exit"), + FSUI_CSTR("Return to desktop mode, or exit the application.")) || + (!AreAnyDialogsOpen() && WantsToCloseMenu())) + { + s_current_main_window = MainWindowType::Exit; + QueueResetFocus(); + } + } + EndHorizontalMenu(); + + ImGui::PopStyleColor(); + + if (!AreAnyDialogsOpen()) + { + if (ImGui::IsKeyPressed(ImGuiKey_GamepadStart, false) || ImGui::IsKeyPressed(ImGuiKey_F1, false)) + OpenAboutWindow(); + else if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false) || ImGui::IsKeyPressed(ImGuiKey_F3, false)) + DoResume(); + else if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) || ImGui::IsKeyPressed(ImGuiKey_F11, false)) + DoToggleFullscreen(); + } + + if (IsGamepadInputSource()) + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_BURGER_MENU, FSUI_VSTR("About")), + std::make_pair(ICON_PF_BUTTON_Y, FSUI_VSTR("Resume Last Session")), + std::make_pair(ICON_PF_BUTTON_X, FSUI_VSTR("Toggle Fullscreen")), + std::make_pair(ICON_PF_XBOX_DPAD_LEFT_RIGHT, FSUI_VSTR("Navigate")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Exit"))}); + } + else + { + SetFullscreenFooterText(std::array{ + std::make_pair(ICON_PF_F1, FSUI_VSTR("About")), std::make_pair(ICON_PF_F3, FSUI_VSTR("Resume Last Session")), + std::make_pair(ICON_PF_F11, FSUI_VSTR("Toggle Fullscreen")), + std::make_pair(ICON_PF_ARROW_LEFT ICON_PF_ARROW_RIGHT, FSUI_VSTR("Navigate")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), std::make_pair(ICON_PF_ESC, FSUI_VSTR("Exit"))}); + } +} + +void FullscreenUI::DrawStartGameWindow() +{ + ImVec2 menu_pos, menu_size; + DrawLandingTemplate(&menu_pos, &menu_size); + + ImGui::PushStyleColor(ImGuiCol_Text, UIBackgroundTextColor); + + if (BeginHorizontalMenu("start_game_window", menu_pos, menu_size, 4)) + { + ResetFocusHere(); + + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/start-file.png"), FSUI_CSTR("Start File"), + FSUI_CSTR("Launch a game by selecting a file/disc image."))) { DoStartFile(); } - if (MenuButton(FSUI_ICONSTR(ICON_FA_MICROCHIP, "Start BIOS"), - FSUI_CSTR("Start the console without any disc inserted."))) + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/drive-cdrom.png"), FSUI_CSTR("Start Disc"), + FSUI_CSTR("Start a game from a disc in your PC's DVD drive."))) + { + DoStartDisc(); + } + + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/start-bios.png"), FSUI_CSTR("Start BIOS"), + FSUI_CSTR("Start the console without any disc inserted."))) { DoStartBIOS(); } - if (MenuButton(FSUI_ICONSTR(ICON_FA_UNDO, "Load State"), FSUI_CSTR("Loads a global save state."))) + // https://www.iconpacks.net/free-icon/arrow-back-3783.html + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/back-icon.png"), FSUI_CSTR("Back"), + FSUI_CSTR("Return to the previous menu.")) || + (!AreAnyDialogsOpen() && WantsToCloseMenu())) { + s_current_main_window = MainWindowType::Landing; + QueueResetFocus(); + } + } + EndHorizontalMenu(); + + ImGui::PopStyleColor(); + + if (!AreAnyDialogsOpen()) + { + if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false) || ImGui::IsKeyPressed(ImGuiKey_F1, false)) OpenSaveStateSelector(true); + } + + if (IsGamepadInputSource()) + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_XBOX_DPAD_LEFT_RIGHT, FSUI_VSTR("Navigate")), + std::make_pair(ICON_PF_BUTTON_Y, FSUI_VSTR("Load Global State")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Back"))}); + } + else + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_ARROW_LEFT ICON_PF_ARROW_RIGHT, FSUI_VSTR("Navigate")), + std::make_pair(ICON_PF_F1, FSUI_VSTR("Load Global State")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_ESC, FSUI_VSTR("Back"))}); + } +} + +void FullscreenUI::DrawExitWindow() +{ + ImVec2 menu_pos, menu_size; + DrawLandingTemplate(&menu_pos, &menu_size); + + ImGui::PushStyleColor(ImGuiCol_Text, UIBackgroundTextColor); + + if (BeginHorizontalMenu("exit_window", menu_pos, menu_size, 3)) + { + ResetFocusHere(); + + // https://www.iconpacks.net/free-icon/arrow-back-3783.html + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/back-icon.png"), FSUI_CSTR("Back"), + FSUI_CSTR("Return to the previous menu.")) || + WantsToCloseMenu()) + { + s_current_main_window = MainWindowType::Landing; + QueueResetFocus(); } - if (MenuButton(FSUI_ICONSTR(ICON_FA_TOOLBOX, "Settings"), FSUI_CSTR("Change settings for the emulator."))) - SwitchToSettings(); - - if (MenuButton(FSUI_ICONSTR(ICON_FA_SIGN_OUT_ALT, "Exit"), FSUI_CSTR("Exits the program."))) + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/exit.png"), FSUI_CSTR("Exit DuckStation"), + FSUI_CSTR("Completely exits the application, returning you to your desktop."))) { DoRequestExit(); } + if (HorizontalMenuItem(GetCachedTexture("fullscreenui/desktop-mode.png"), FSUI_CSTR("Desktop Mode"), + FSUI_CSTR("Exits Big Picture mode, returning to the desktop interface."))) { - ImVec2 fullscreen_pos; - if (FloatingButton(ICON_FA_WINDOW_CLOSE, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, 0.0f, true, g_large_font, - &fullscreen_pos)) - { - DoRequestExit(); - } - - if (FloatingButton(ICON_FA_EXPAND, fullscreen_pos.x, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, true, g_large_font, - &fullscreen_pos)) - { - DoToggleFullscreen(); - } - - if (FloatingButton(ICON_FA_QUESTION_CIRCLE, fullscreen_pos.x, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, true, g_large_font, - &fullscreen_pos)) - { - OpenAboutWindow(); - } - - if (FloatingButton(ICON_FA_LIGHTBULB, fullscreen_pos.x, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, true, g_large_font, - &fullscreen_pos)) - { - ToggleTheme(); - } + DoDesktopMode(); } - - EndMenuButtons(); - - const ImVec2 rev_size(g_medium_font->CalcTextSizeA(g_medium_font->FontSize, FLT_MAX, 0.0f, g_scm_tag_str)); - ImGui::SetCursorPos(ImVec2(ImGui::GetWindowWidth() - rev_size.x - LayoutScale(20.0f), - ImGui::GetWindowHeight() - rev_size.y - LayoutScale(20.0f))); - ImGui::PushFont(g_medium_font); - ImGui::TextUnformatted(g_scm_tag_str); - ImGui::PopFont(); } + EndHorizontalMenu(); - EndFullscreenColumnWindow(); + ImGui::PopStyleColor(); - EndFullscreenColumns(); + SetStandardSelectionFooterText(true); } bool FullscreenUI::IsEditingGameSettings(SettingsInterface* bsi) @@ -2508,15 +2814,20 @@ void FullscreenUI::DrawSettingsWindow() if (!ImGui::IsPopupOpen(0u, ImGuiPopupFlags_AnyPopup)) { - if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakSlow, false)) + if (ImGui::IsKeyPressed(ImGuiKey_GamepadDpadLeft, true) || + ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakSlow, true) || ImGui::IsKeyPressed(ImGuiKey_LeftArrow, true)) { index = (index == 0) ? (count - 1) : (index - 1); s_settings_page = pages[index]; + QueueResetFocus(); } - else if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakFast, false)) + else if (ImGui::IsKeyPressed(ImGuiKey_GamepadDpadRight, true) || + ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakFast, true) || + ImGui::IsKeyPressed(ImGuiKey_RightArrow, true)) { index = (index + 1) % count; s_settings_page = pages[index]; + QueueResetFocus(); } } @@ -2543,17 +2854,20 @@ void FullscreenUI::DrawSettingsWindow() EndFullscreenWindow(); - if (BeginFullscreenWindow(ImVec2(0.0f, heading_size.y), ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y), - "settings_parent", - ImVec4(UIBackgroundColor.x, UIBackgroundColor.y, UIBackgroundColor.z, bg_alpha))) + // we have to do this here, because otherwise it uses target, and jumps a frame later. + if (IsFocusResetQueued()) + ImGui::SetNextWindowScroll(ImVec2(0.0f, 0.0f)); + + if (BeginFullscreenWindow( + ImVec2(0.0f, heading_size.y), + ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT)), + TinyString::from_format("settings_page_{}", static_cast(s_settings_page)).c_str(), + ImVec4(UIBackgroundColor.x, UIBackgroundColor.y, UIBackgroundColor.z, bg_alpha))) { ResetFocusHere(); - if (WantsToCloseMenu()) - { - if (ImGui::IsWindowFocused()) - ReturnToPreviousWindow(); - } + if (ImGui::IsWindowFocused() && WantsToCloseMenu()) + ReturnToPreviousWindow(); auto lock = Host::GetSettingsLock(); @@ -2617,6 +2931,21 @@ void FullscreenUI::DrawSettingsWindow() } EndFullscreenWindow(); + + if (IsGamepadInputSource()) + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_XBOX_DPAD_LEFT_RIGHT, FSUI_VSTR("Change Page")), + std::make_pair(ICON_PF_XBOX_DPAD_UP_DOWN, FSUI_VSTR("Navigate")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Back"))}); + } + else + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_ARROW_LEFT ICON_PF_ARROW_RIGHT, FSUI_VSTR("Change Page")), + std::make_pair(ICON_PF_ARROW_UP ICON_PF_ARROW_DOWN, FSUI_VSTR("Navigate")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_ESC, FSUI_VSTR("Back"))}); + } } void FullscreenUI::DrawSummarySettingsPage() @@ -3155,11 +3484,11 @@ void FullscreenUI::DoSaveInputProfile(const std::string& name) void FullscreenUI::DoSaveNewInputProfile() { OpenInputStringDialog(FSUI_ICONSTR(ICON_FA_SAVE, "Save Profile"), - FSUI_STR("Enter the name of the input profile you wish to create."), std::string(), - FSUI_ICONSTR(ICON_FA_FOLDER_PLUS, "Create"), [](std::string title) { - if (!title.empty()) - DoSaveInputProfile(title); - }); + FSUI_STR("Enter the name of the input profile you wish to create."), std::string(), + FSUI_ICONSTR(ICON_FA_FOLDER_PLUS, "Create"), [](std::string title) { + if (!title.empty()) + DoSaveInputProfile(title); + }); } void FullscreenUI::DoSaveInputProfile() @@ -4555,7 +4884,7 @@ void FullscreenUI::DrawAchievementsSettingsPage() TinyString ts_string; ts_string.format( - "{:%Y-%m-%d %H:%M:%S}", + FSUI_FSTR("{:%Y-%m-%d %H:%M:%S}"), fmt::localtime( StringUtil::FromChars(bsi->GetTinyStringValue("Cheevos", "LoginTimestamp", "0")).value_or(0))); ActiveButton( @@ -4754,7 +5083,7 @@ void FullscreenUI::DrawPauseMenu() g_medium_font->CalcTextSizeA(g_medium_font->FontSize, std::numeric_limits::max(), -1.0f, buffer.c_str())); ImVec2 title_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - title_size.x, - display_size.y - LayoutScale(10.0f + image_height)); + display_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT) - LayoutScale(10.0f + image_height)); ImVec2 subtitle_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - subtitle_size.x, title_pos.y + g_large_font->FontSize + LayoutScale(4.0f)); @@ -4787,7 +5116,8 @@ void FullscreenUI::DrawPauseMenu() GPUTexture* const cover = GetCoverForCurrentGame(); const ImVec2 image_min(display_size.x - LayoutScale(10.0f + image_width), - display_size.y - LayoutScale(10.0f + image_height) - rp_height); + display_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT) - LayoutScale(10.0f + image_height) - + rp_height); const ImVec2 image_max(image_min.x + LayoutScale(image_width), image_min.y + LayoutScale(image_height) + rp_height); const ImRect image_rect(CenterImage(ImRect(image_min, image_max), ImVec2(static_cast(cover->GetWidth()), static_cast(cover->GetHeight())))); @@ -4826,7 +5156,7 @@ void FullscreenUI::DrawPauseMenu() } const ImVec2 window_size(LayoutScale(500.0f, LAYOUT_SCREEN_HEIGHT)); - const ImVec2 window_pos(0.0f, display_size.y - window_size.y); + const ImVec2 window_pos(0.0f, display_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT) - window_size.y); if (BeginFullscreenWindow(window_pos, window_size, "pause_menu", ImVec4(0.0f, 0.0f, 0.0f, 0.0f), 0.0f, 10.0f, ImGuiWindowFlags_NoBackground)) @@ -4978,10 +5308,23 @@ void FullscreenUI::DrawPauseMenu() } Achievements::DrawPauseMenuOverlays(); + + if (IsGamepadInputSource()) + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_XBOX_DPAD_UP_DOWN, FSUI_VSTR("Change Selection")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Select")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Return To Game"))}); + } + else + { + SetFullscreenFooterText(std::array{ + std::make_pair(ICON_PF_ARROW_UP ICON_PF_ARROW_DOWN, FSUI_VSTR("Change Selection")), + std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Select")), std::make_pair(ICON_PF_ESC, FSUI_VSTR("Return To Game"))}); + } } -void FullscreenUI::InitializePlaceholderSaveStateListEntry(SaveStateListEntry* li, const std::string& title, - const std::string& serial, s32 slot, bool global) +void FullscreenUI::InitializePlaceholderSaveStateListEntry(SaveStateListEntry* li, const std::string& serial, s32 slot, + bool global) { li->title = (global || slot > 0) ? fmt::format(global ? FSUI_FSTR("Global Slot {0}##global_slot_{0}") : FSUI_FSTR("Game Slot {0}##game_slot_{0}"), @@ -4995,18 +5338,26 @@ void FullscreenUI::InitializePlaceholderSaveStateListEntry(SaveStateListEntry* l li->global = global; } -bool FullscreenUI::InitializeSaveStateListEntry(SaveStateListEntry* li, const std::string& title, - const std::string& serial, s32 slot, bool global) +bool FullscreenUI::InitializeSaveStateListEntryFromSerial(SaveStateListEntry* li, const std::string& serial, s32 slot, + bool global) { - std::string filename(global ? System::GetGlobalSaveStateFileName(slot) : - System::GetGameSaveStateFileName(serial, slot)); - std::optional ssi(System::GetExtendedSaveStateInfo(filename.c_str())); - if (!ssi.has_value()) + const std::string path = + (global ? System::GetGlobalSaveStateFileName(slot) : System::GetGameSaveStateFileName(serial, slot)); + if (!InitializeSaveStateListEntryFromPath(li, path.c_str(), slot, global)) { - InitializePlaceholderSaveStateListEntry(li, title, serial, slot, global); + InitializePlaceholderSaveStateListEntry(li, serial, slot, global); return false; } + return true; +} + +bool FullscreenUI::InitializeSaveStateListEntryFromPath(SaveStateListEntry* li, std::string path, s32 slot, bool global) +{ + std::optional ssi(System::GetExtendedSaveStateInfo(path.c_str())); + if (!ssi.has_value()) + return false; + if (global) { li->title = fmt::format(FSUI_FSTR("Global Slot {0} - {1}##global_slot_{0}"), slot, ssi->serial); @@ -5019,7 +5370,7 @@ bool FullscreenUI::InitializeSaveStateListEntry(SaveStateListEntry* li, const st li->summary = fmt::format(FSUI_FSTR("Saved {:%c}"), fmt::localtime(ssi->timestamp)); li->timestamp = ssi->timestamp; li->slot = slot; - li->path = std::move(filename); + li->path = std::move(path); li->global = global; PopulateSaveStateScreenshot(li, &ssi.value()); @@ -5078,7 +5429,7 @@ u32 FullscreenUI::PopulateSaveStateListEntries(const std::string& title, const s for (s32 i = 1; i <= System::PER_GAME_SAVE_STATE_SLOTS; i++) { SaveStateListEntry li; - if (InitializeSaveStateListEntry(&li, title, serial, i, false) || !s_save_state_selector_loading) + if (InitializeSaveStateListEntryFromSerial(&li, serial, i, false) || !s_save_state_selector_loading) s_save_state_selector_slots.push_back(std::move(li)); } } @@ -5086,7 +5437,7 @@ u32 FullscreenUI::PopulateSaveStateListEntries(const std::string& title, const s for (s32 i = 1; i <= System::GLOBAL_SAVE_STATE_SLOTS; i++) { SaveStateListEntry li; - if (InitializeSaveStateListEntry(&li, title, serial, i, true) || !s_save_state_selector_loading) + if (InitializeSaveStateListEntryFromSerial(&li, serial, i, true) || !s_save_state_selector_loading) s_save_state_selector_slots.push_back(std::move(li)); } @@ -5142,7 +5493,7 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading) ImGuiIO& io = ImGui::GetIO(); ImGui::SetNextWindowPos(ImVec2(0.0f, 0.0f)); - ImGui::SetNextWindowSize(io.DisplaySize); + ImGui::SetNextWindowSize(io.DisplaySize - LayoutScale(0.0f, LAYOUT_FOOTER_HEIGHT)); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); @@ -5400,9 +5751,9 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading) closed = true; } - - if (hovered && - (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false))) + else if (hovered && + (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false) || + ImGui::IsKeyPressed(ImGuiKey_F1, false))) { s_save_state_selector_submenu_index = static_cast(i); } @@ -5442,12 +5793,30 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading) CloseSaveStateSelector(); ReturnToPreviousWindow(); } + else + { + if (IsGamepadInputSource()) + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_XBOX_DPAD, FSUI_VSTR("Select State")), + std::make_pair(ICON_PF_BUTTON_Y, FSUI_VSTR("Delete State")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Load State")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Cancel"))}); + } + else + { + SetFullscreenFooterText(std::array{ + std::make_pair(ICON_PF_ARROW_UP ICON_PF_ARROW_DOWN ICON_PF_ARROW_LEFT ICON_PF_ARROW_RIGHT, + FSUI_VSTR("Select State")), + std::make_pair(ICON_PF_F1, FSUI_VSTR("Delete State")), std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Load State")), + std::make_pair(ICON_PF_ESC, FSUI_VSTR("Cancel"))}); + } + } } bool FullscreenUI::OpenLoadStateSelectorForGameResume(const GameList::Entry* entry) { SaveStateListEntry slentry; - if (!InitializeSaveStateListEntry(&slentry, entry->title, entry->serial, -1, false)) + if (!InitializeSaveStateListEntryFromSerial(&slentry, entry->serial, -1, false)) return false; CloseSaveStateSelector(); @@ -5541,6 +5910,10 @@ void FullscreenUI::DrawResumeStateSelector() s_save_state_selector_resuming = false; s_save_state_selector_game_path = {}; } + else + { + SetStandardSelectionFooterText(false); + } } void FullscreenUI::DoLoadState(std::string path) @@ -5677,38 +6050,24 @@ void FullscreenUI::DrawGameListWindow() if (BeginFullscreenWindow(ImVec2(0.0f, 0.0f), heading_size, "gamelist_view", MulAlpha(UIPrimaryColor, bg_alpha))) { static constexpr float ITEM_WIDTH = 25.0f; - static constexpr const char* icons[] = {ICON_FA_BORDER_ALL, ICON_FA_LIST, ICON_FA_COG}; - static constexpr const char* titles[] = {FSUI_NSTR("Game Grid"), FSUI_NSTR("Game List"), - FSUI_NSTR("Game List Settings")}; + static constexpr const char* icons[] = {ICON_FA_BORDER_ALL, ICON_FA_LIST}; + static constexpr const char* titles[] = {FSUI_NSTR("Game Grid"), FSUI_NSTR("Game List")}; static constexpr u32 count = static_cast(std::size(titles)); BeginNavBar(); - if (!ImGui::IsPopupOpen(0u, ImGuiPopupFlags_AnyPopup)) - { - if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakSlow, false)) - { - s_game_list_page = static_cast( - (s_game_list_page == static_cast(0)) ? (count - 1) : (static_cast(s_game_list_page) - 1)); - } - else if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadTweakFast, false)) - { - s_game_list_page = static_cast((static_cast(s_game_list_page) + 1) % count); - } - } - if (NavButton(ICON_FA_BACKWARD, true, true)) ReturnToPreviousWindow(); - NavTitle(Host::TranslateToCString(TR_CONTEXT, titles[static_cast(s_game_list_page)])); + NavTitle(Host::TranslateToCString(TR_CONTEXT, titles[static_cast(s_game_list_view)])); RightAlignNavButtons(count, ITEM_WIDTH, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY); for (u32 i = 0; i < count; i++) { - if (NavButton(icons[i], static_cast(i) == s_game_list_page, true, ITEM_WIDTH, + if (NavButton(icons[i], static_cast(i) == s_game_list_view, true, ITEM_WIDTH, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY)) { - s_game_list_page = static_cast(i); + s_game_list_view = static_cast(i); } } @@ -5717,25 +6076,51 @@ void FullscreenUI::DrawGameListWindow() EndFullscreenWindow(); - switch (s_game_list_page) + if (ImGui::IsKeyPressed(ImGuiKey_NavGamepadInput, false) || ImGui::IsKeyPressed(ImGuiKey_F1, false)) { - case GameListPage::Grid: + s_game_list_view = (s_game_list_view == GameListView::Grid) ? GameListView::List : GameListView::Grid; + } + else if (ImGui::IsKeyPressed(ImGuiKey_GamepadStart, false) || ImGui::IsKeyPressed(ImGuiKey_F2)) + { + s_current_main_window = MainWindowType::GameListSettings; + QueueResetFocus(); + } + + switch (s_game_list_view) + { + case GameListView::Grid: DrawGameGrid(heading_size); break; - case GameListPage::List: + case GameListView::List: DrawGameList(heading_size); break; - case GameListPage::Settings: - DrawGameListSettingsPage(heading_size); - break; default: break; } + + if (IsGamepadInputSource()) + { + SetFullscreenFooterText(std::array{std::make_pair(ICON_PF_XBOX_DPAD, FSUI_VSTR("Select Game")), + std::make_pair(ICON_PF_BUTTON_X, FSUI_VSTR("Change View")), + std::make_pair(ICON_PF_BURGER_MENU, FSUI_VSTR("Settings")), + std::make_pair(ICON_PF_BUTTON_Y, FSUI_VSTR("Launch Options")), + std::make_pair(ICON_PF_BUTTON_A, FSUI_VSTR("Start Game")), + std::make_pair(ICON_PF_BUTTON_B, FSUI_VSTR("Back"))}); + } + else + { + SetFullscreenFooterText(std::array{ + std::make_pair(ICON_PF_ARROW_UP ICON_PF_ARROW_DOWN ICON_PF_ARROW_LEFT ICON_PF_ARROW_RIGHT, + FSUI_VSTR("Select Game")), + std::make_pair(ICON_PF_F1, FSUI_VSTR("Change View")), std::make_pair(ICON_PF_F2, FSUI_VSTR("Settings")), + std::make_pair(ICON_PF_F3, FSUI_VSTR("Launch Options")), std::make_pair(ICON_PF_ENTER, FSUI_VSTR("Start Game")), + std::make_pair(ICON_PF_ESC, FSUI_VSTR("Back"))}); + } } void FullscreenUI::DrawGameList(const ImVec2& heading_size) { - if (!BeginFullscreenColumns(nullptr, heading_size.y, true)) + if (!BeginFullscreenColumns(nullptr, heading_size.y, true, true)) { EndFullscreenColumns(); return; @@ -5808,7 +6193,8 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size) selected_entry = entry; if (selected_entry && - (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false))) + (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false) || + ImGui::IsKeyPressed(ImGuiKey_F3, false))) { HandleGameListOptions(selected_entry); } @@ -5829,7 +6215,7 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size) CenterImage(LayoutScale(ImVec2(350.0f, 350.0f)), ImVec2(static_cast(cover_texture->GetWidth()), static_cast(cover_texture->GetHeight())))); - ImGui::SetCursorPos(LayoutScale(ImVec2(90.0f, 50.0f)) + image_rect.Min); + ImGui::SetCursorPos(LayoutScale(ImVec2(90.0f, 0.0f)) + image_rect.Min); ImGui::Image(selected_entry ? GetGameListCover(selected_entry) : GetTextureForGameListEntryType(GameList::EntryType::Count), image_rect.GetSize()); @@ -5838,7 +6224,7 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size) const float work_width = ImGui::GetCurrentWindow()->WorkRect.GetWidth(); constexpr float field_margin_y = 10.0f; constexpr float start_x = 50.0f; - float text_y = 425.0f; + float text_y = 400.0f; float text_width; PushPrimaryColor(); @@ -5941,8 +6327,10 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size) void FullscreenUI::DrawGameGrid(const ImVec2& heading_size) { ImGuiIO& io = ImGui::GetIO(); - if (!BeginFullscreenWindow(ImVec2(0.0f, heading_size.y), ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y), - "game_grid", UIBackgroundColor)) + if (!BeginFullscreenWindow( + ImVec2(0.0f, heading_size.y), + ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT)), "game_grid", + UIBackgroundColor)) { EndFullscreenWindow(); return; @@ -6028,7 +6416,8 @@ void FullscreenUI::DrawGameGrid(const ImVec2& heading_size) HandleGameListActivate(entry); } else if (hovered && - (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false))) + (ImGui::IsItemClicked(ImGuiMouseButton_Right) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false) || + ImGui::IsKeyPressed(ImGuiKey_F3, false))) { HandleGameListOptions(entry); } @@ -6105,11 +6494,34 @@ void FullscreenUI::HandleGameListOptions(const GameList::Entry* entry) }); } -void FullscreenUI::DrawGameListSettingsPage(const ImVec2& heading_size) +void FullscreenUI::DrawGameListSettingsWindow() { - const ImGuiIO& io = ImGui::GetIO(); - if (!BeginFullscreenWindow(ImVec2(0.0f, heading_size.y), ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y), - "settings_parent", UIBackgroundColor)) + ImGuiIO& io = ImGui::GetIO(); + ImVec2 heading_size = ImVec2( + io.DisplaySize.x, LayoutScale(LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY + LAYOUT_MENU_BUTTON_Y_PADDING * 2.0f + 2.0f)); + + const float bg_alpha = System::IsValid() ? 0.90f : 1.0f; + + if (BeginFullscreenWindow(ImVec2(0.0f, 0.0f), heading_size, "gamelist_view", MulAlpha(UIPrimaryColor, bg_alpha))) + { + BeginNavBar(); + + if (NavButton(ICON_FA_BACKWARD, true, true)) + { + s_current_main_window = MainWindowType::GameList; + QueueResetFocus(); + } + + NavTitle(FSUI_CSTR("Game List Settings")); + EndNavBar(); + } + + EndFullscreenWindow(); + + if (!BeginFullscreenWindow( + ImVec2(0.0f, heading_size.y), + ImVec2(io.DisplaySize.x, io.DisplaySize.y - heading_size.y - LayoutScale(LAYOUT_FOOTER_HEIGHT)), + "settings_parent", UIBackgroundColor)) { EndFullscreenWindow(); return; @@ -6118,7 +6530,10 @@ void FullscreenUI::DrawGameListSettingsPage(const ImVec2& heading_size) if (WantsToCloseMenu()) { if (ImGui::IsWindowFocused()) - ReturnToPreviousWindow(); + { + s_current_main_window = MainWindowType::GameList; + QueueResetFocus(); + } } auto lock = Host::GetSettingsLock(); @@ -6257,12 +6672,14 @@ void FullscreenUI::DrawGameListSettingsPage(const ImVec2& heading_size) EndMenuButtons(); EndFullscreenWindow(); + + SetStandardSelectionFooterText(true); } void FullscreenUI::SwitchToGameList() { s_current_main_window = MainWindowType::GameList; - s_game_list_page = static_cast(Host::GetBaseIntSettingValue("Main", "DefaultFullscreenUIGameView", 0)); + s_game_list_view = static_cast(Host::GetBaseIntSettingValue("Main", "DefaultFullscreenUIGameView", 0)); { auto lock = Host::GetSettingsLock(); PopulateGameListDirectoryCache(Host::Internal::GetBaseSettingsLayer()); @@ -6343,13 +6760,13 @@ void FullscreenUI::CopyTextToClipboard(std::string title, const std::string_view void FullscreenUI::DrawAboutWindow() { - ImGui::SetNextWindowSize(LayoutScale(1000.0f, 510.0f)); + ImGui::SetNextWindowSize(LayoutScale(1000.0f, 540.0f)); ImGui::SetNextWindowPos(ImGui::GetIO().DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f)); ImGui::OpenPopup(FSUI_CSTR("About DuckStation")); ImGui::PushFont(g_large_font); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, LayoutScale(10.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, LayoutScale(10.0f, 10.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, LayoutScale(30.0f, 30.0f)); if (ImGui::BeginPopupModal(FSUI_CSTR("About DuckStation"), &s_about_window_open, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize)) @@ -6358,8 +6775,7 @@ void FullscreenUI::DrawAboutWindow() FSUI_CSTR("DuckStation is a free and open-source simulator/emulator of the Sony PlayStation(TM) " "console, focusing on playability, speed, and long-term maintainability.")); ImGui::NewLine(); - ImGui::TextWrapped( - "%s", FSUI_CSTR("Contributor List: https://github.com/stenzek/duckstation/blob/master/CONTRIBUTORS.md")); + ImGui::TextWrapped("Version: %s", g_scm_tag_str); ImGui::NewLine(); ImGui::TextWrapped( "%s", FSUI_CSTR("Duck icon by icons8 (https://icons8.com/icon/74847/platforms.undefined.short-title)")); @@ -6373,16 +6789,21 @@ void FullscreenUI::DrawAboutWindow() BeginMenuButtons(); if (ActiveButton(FSUI_ICONSTR(ICON_FA_GLOBE, "GitHub Repository"), false)) ExitFullscreenAndOpenURL("https://github.com/stenzek/duckstation/"); - if (ActiveButton(FSUI_ICONSTR(ICON_FA_BUG, "Issue Tracker"), false)) - ExitFullscreenAndOpenURL("https://github.com/stenzek/duckstation/issues"); if (ActiveButton(FSUI_ICONSTR(ICON_FA_COMMENT, "Discord Server"), false)) - ExitFullscreenAndOpenURL("https://discord.gg/Buktv3t"); + ExitFullscreenAndOpenURL("https://www.duckstation.org/discord.html"); + if (ActiveButton(FSUI_ICONSTR(ICON_FA_PEOPLE_CARRY, "Contributor List"), false)) + ExitFullscreenAndOpenURL("https://github.com/stenzek/duckstation/blob/master/CONTRIBUTORS.md"); - if (ActiveButton(FSUI_ICONSTR(ICON_FA_WINDOW_CLOSE, "Close"), false)) + if (ActiveButton(FSUI_ICONSTR(ICON_FA_WINDOW_CLOSE, "Close"), false) || WantsToCloseMenu()) { ImGui::CloseCurrentPopup(); s_about_window_open = false; } + else + { + SetStandardSelectionFooterText(true); + } + EndMenuButtons(); ImGui::EndPopup(); @@ -6411,7 +6832,10 @@ void FullscreenUI::OpenAchievementsWindow() } if (s_current_main_window != MainWindowType::PauseMenu) + { PauseForMenuOpen(false); + ForceKeyNavEnabled(); + } s_current_main_window = MainWindowType::Achievements; QueueResetFocus(); @@ -6442,7 +6866,10 @@ void FullscreenUI::OpenLeaderboardsWindow() } if (s_current_main_window != MainWindowType::PauseMenu) + { PauseForMenuOpen(false); + ForceKeyNavEnabled(); + } s_current_main_window = MainWindowType::Leaderboards; QueueResetFocus(); @@ -6533,6 +6960,7 @@ TRANSLATE_NOOP("FullscreenUI", "9x"); TRANSLATE_NOOP("FullscreenUI", "9x (18x Speed)"); TRANSLATE_NOOP("FullscreenUI", "9x (for 4K)"); TRANSLATE_NOOP("FullscreenUI", "A resume save state created at %s was found.\n\nDo you want to load this save and continue?"); +TRANSLATE_NOOP("FullscreenUI", "About"); TRANSLATE_NOOP("FullscreenUI", "About DuckStation"); TRANSLATE_NOOP("FullscreenUI", "Account"); TRANSLATE_NOOP("FullscreenUI", "Achievement Notifications"); @@ -6575,6 +7003,7 @@ TRANSLATE_NOOP("FullscreenUI", "BIOS Selection"); TRANSLATE_NOOP("FullscreenUI", "BIOS Settings"); TRANSLATE_NOOP("FullscreenUI", "BIOS for {}"); TRANSLATE_NOOP("FullscreenUI", "BIOS to use when emulating {} consoles."); +TRANSLATE_NOOP("FullscreenUI", "Back"); TRANSLATE_NOOP("FullscreenUI", "Back To Pause Menu"); TRANSLATE_NOOP("FullscreenUI", "Backend Settings"); TRANSLATE_NOOP("FullscreenUI", "Behavior"); @@ -6585,7 +7014,10 @@ TRANSLATE_NOOP("FullscreenUI", "CPU Emulation"); TRANSLATE_NOOP("FullscreenUI", "CPU Mode"); TRANSLATE_NOOP("FullscreenUI", "Cancel"); TRANSLATE_NOOP("FullscreenUI", "Change Disc"); -TRANSLATE_NOOP("FullscreenUI", "Change settings for the emulator."); +TRANSLATE_NOOP("FullscreenUI", "Change Page"); +TRANSLATE_NOOP("FullscreenUI", "Change Selection"); +TRANSLATE_NOOP("FullscreenUI", "Change View"); +TRANSLATE_NOOP("FullscreenUI", "Changes settings for the application."); TRANSLATE_NOOP("FullscreenUI", "Changes the aspect ratio used to display the console's output to the screen."); TRANSLATE_NOOP("FullscreenUI", "Cheat List"); TRANSLATE_NOOP("FullscreenUI", "Chooses the backend to use for rendering the console/game visuals."); @@ -6602,6 +7034,7 @@ TRANSLATE_NOOP("FullscreenUI", "Close Game"); TRANSLATE_NOOP("FullscreenUI", "Close Menu"); TRANSLATE_NOOP("FullscreenUI", "Compatibility Rating"); TRANSLATE_NOOP("FullscreenUI", "Compatibility: "); +TRANSLATE_NOOP("FullscreenUI", "Completely exits the application, returning you to your desktop."); TRANSLATE_NOOP("FullscreenUI", "Configuration"); TRANSLATE_NOOP("FullscreenUI", "Confirm Power Off"); TRANSLATE_NOOP("FullscreenUI", "Console Settings"); @@ -6622,6 +7055,7 @@ TRANSLATE_NOOP("FullscreenUI", "Copies the current global settings to this game. TRANSLATE_NOOP("FullscreenUI", "Copies the global controller configuration to this game."); TRANSLATE_NOOP("FullscreenUI", "Copy Global Settings"); TRANSLATE_NOOP("FullscreenUI", "Copy Settings"); +TRANSLATE_NOOP("FullscreenUI", "Could not find any CD/DVD-ROM devices. Please ensure you have a drive connected and sufficient permissions to access it."); TRANSLATE_NOOP("FullscreenUI", "Cover Settings"); TRANSLATE_NOOP("FullscreenUI", "Covers Directory"); TRANSLATE_NOOP("FullscreenUI", "Create"); @@ -6640,6 +7074,7 @@ TRANSLATE_NOOP("FullscreenUI", "Deinterlacing Mode"); TRANSLATE_NOOP("FullscreenUI", "Delete Save"); TRANSLATE_NOOP("FullscreenUI", "Delete State"); TRANSLATE_NOOP("FullscreenUI", "Depth Buffer"); +TRANSLATE_NOOP("FullscreenUI", "Desktop Mode"); TRANSLATE_NOOP("FullscreenUI", "Details"); TRANSLATE_NOOP("FullscreenUI", "Details unavailable for game not scanned in game list."); TRANSLATE_NOOP("FullscreenUI", "Determines how large the on-screen messages and monitor are."); @@ -6707,12 +7142,14 @@ TRANSLATE_NOOP("FullscreenUI", "Enables the replacement of background textures i TRANSLATE_NOOP("FullscreenUI", "Encore Mode"); TRANSLATE_NOOP("FullscreenUI", "Enhancements"); TRANSLATE_NOOP("FullscreenUI", "Ensures every frame generated is displayed for optimal pacing. Disable if you are having speed or sound issues."); +TRANSLATE_NOOP("FullscreenUI", "Enter Value"); TRANSLATE_NOOP("FullscreenUI", "Enter the name of the input profile you wish to create."); TRANSLATE_NOOP("FullscreenUI", "Execution Mode"); TRANSLATE_NOOP("FullscreenUI", "Exit"); TRANSLATE_NOOP("FullscreenUI", "Exit And Save State"); +TRANSLATE_NOOP("FullscreenUI", "Exit DuckStation"); TRANSLATE_NOOP("FullscreenUI", "Exit Without Saving"); -TRANSLATE_NOOP("FullscreenUI", "Exits the program."); +TRANSLATE_NOOP("FullscreenUI", "Exits Big Picture mode, returning to the desktop interface."); TRANSLATE_NOOP("FullscreenUI", "Failed to copy text to clipboard."); TRANSLATE_NOOP("FullscreenUI", "Failed to delete save state."); TRANSLATE_NOOP("FullscreenUI", "Failed to delete {}."); @@ -6779,7 +7216,9 @@ TRANSLATE_NOOP("FullscreenUI", "Internal Resolution"); TRANSLATE_NOOP("FullscreenUI", "Issue Tracker"); TRANSLATE_NOOP("FullscreenUI", "Last Played"); TRANSLATE_NOOP("FullscreenUI", "Last Played: %s"); +TRANSLATE_NOOP("FullscreenUI", "Launch Options"); TRANSLATE_NOOP("FullscreenUI", "Launch a game by selecting a file/disc image."); +TRANSLATE_NOOP("FullscreenUI", "Launch a game from a file, disc, or starts the console without any disc inserted."); TRANSLATE_NOOP("FullscreenUI", "Launch a game from images scanned from your game directories."); TRANSLATE_NOOP("FullscreenUI", "Leaderboard Notifications"); TRANSLATE_NOOP("FullscreenUI", "Leaderboards"); @@ -6788,10 +7227,10 @@ TRANSLATE_NOOP("FullscreenUI", "Limits how many frames are displayed to the scre TRANSLATE_NOOP("FullscreenUI", "Line Detection"); TRANSLATE_NOOP("FullscreenUI", "List Settings"); TRANSLATE_NOOP("FullscreenUI", "Load Devices From Save States"); +TRANSLATE_NOOP("FullscreenUI", "Load Global State"); TRANSLATE_NOOP("FullscreenUI", "Load Profile"); TRANSLATE_NOOP("FullscreenUI", "Load Resume State"); TRANSLATE_NOOP("FullscreenUI", "Load State"); -TRANSLATE_NOOP("FullscreenUI", "Loads a global save state."); TRANSLATE_NOOP("FullscreenUI", "Loads all replacement texture to RAM, reducing stuttering at runtime."); TRANSLATE_NOOP("FullscreenUI", "Loads the game image into RAM. Useful for network paths that may become unreliable during gameplay."); TRANSLATE_NOOP("FullscreenUI", "Log Level"); @@ -6826,6 +7265,7 @@ TRANSLATE_NOOP("FullscreenUI", "Multitap"); TRANSLATE_NOOP("FullscreenUI", "Multitap Mode"); TRANSLATE_NOOP("FullscreenUI", "Mute All Sound"); TRANSLATE_NOOP("FullscreenUI", "Mute CD Audio"); +TRANSLATE_NOOP("FullscreenUI", "Navigate"); TRANSLATE_NOOP("FullscreenUI", "No Binding"); TRANSLATE_NOOP("FullscreenUI", "No Game Selected"); TRANSLATE_NOOP("FullscreenUI", "No cheats found for {}."); @@ -6908,8 +7348,11 @@ TRANSLATE_NOOP("FullscreenUI", "Resets all configuration to defaults (including TRANSLATE_NOOP("FullscreenUI", "Resets memory card directory to default (user directory)."); TRANSLATE_NOOP("FullscreenUI", "Resolution change will be applied after restarting."); TRANSLATE_NOOP("FullscreenUI", "Restores the state of the system prior to the last state loaded."); -TRANSLATE_NOOP("FullscreenUI", "Resume"); TRANSLATE_NOOP("FullscreenUI", "Resume Game"); +TRANSLATE_NOOP("FullscreenUI", "Resume Last Session"); +TRANSLATE_NOOP("FullscreenUI", "Return To Game"); +TRANSLATE_NOOP("FullscreenUI", "Return to desktop mode, or exit the application."); +TRANSLATE_NOOP("FullscreenUI", "Return to the previous menu."); TRANSLATE_NOOP("FullscreenUI", "Reverses the game list sort order from the default (usually ascending to descending)."); TRANSLATE_NOOP("FullscreenUI", "Rewind Save Frequency"); TRANSLATE_NOOP("FullscreenUI", "Rewind Save Slots"); @@ -6939,9 +7382,13 @@ TRANSLATE_NOOP("FullscreenUI", "Screenshot Quality"); TRANSLATE_NOOP("FullscreenUI", "Screenshot Size"); TRANSLATE_NOOP("FullscreenUI", "Search Directories"); TRANSLATE_NOOP("FullscreenUI", "Seek Speedup"); +TRANSLATE_NOOP("FullscreenUI", "Select"); TRANSLATE_NOOP("FullscreenUI", "Select Device"); +TRANSLATE_NOOP("FullscreenUI", "Select Disc Drive"); TRANSLATE_NOOP("FullscreenUI", "Select Disc Image"); +TRANSLATE_NOOP("FullscreenUI", "Select Game"); TRANSLATE_NOOP("FullscreenUI", "Select Macro {} Binds"); +TRANSLATE_NOOP("FullscreenUI", "Select State"); TRANSLATE_NOOP("FullscreenUI", "Selects the GPU to use for rendering."); TRANSLATE_NOOP("FullscreenUI", "Selects the percentage of the normal clock speed the emulated hardware will run at."); TRANSLATE_NOOP("FullscreenUI", "Selects the quality at which screenshots will be compressed."); @@ -7003,10 +7450,12 @@ TRANSLATE_NOOP("FullscreenUI", "Speeds up CD-ROM reads by the specified factor. TRANSLATE_NOOP("FullscreenUI", "Speeds up CD-ROM seeks by the specified factor. May improve loading speeds in some games, and break others."); TRANSLATE_NOOP("FullscreenUI", "Stage {}: {}"); TRANSLATE_NOOP("FullscreenUI", "Start BIOS"); +TRANSLATE_NOOP("FullscreenUI", "Start Disc"); TRANSLATE_NOOP("FullscreenUI", "Start File"); TRANSLATE_NOOP("FullscreenUI", "Start Fullscreen"); +TRANSLATE_NOOP("FullscreenUI", "Start Game"); +TRANSLATE_NOOP("FullscreenUI", "Start a game from a disc in your PC's DVD drive."); TRANSLATE_NOOP("FullscreenUI", "Start the console without any disc inserted."); -TRANSLATE_NOOP("FullscreenUI", "Starts the console from where it was before it was last closed."); TRANSLATE_NOOP("FullscreenUI", "Stores the current settings to an input profile."); TRANSLATE_NOOP("FullscreenUI", "Stretch Display Vertically"); TRANSLATE_NOOP("FullscreenUI", "Stretch Mode"); @@ -7035,6 +7484,7 @@ TRANSLATE_NOOP("FullscreenUI", "Timing out in {:.0f} seconds..."); TRANSLATE_NOOP("FullscreenUI", "Title"); TRANSLATE_NOOP("FullscreenUI", "Toggle Analog"); TRANSLATE_NOOP("FullscreenUI", "Toggle Fast Forward"); +TRANSLATE_NOOP("FullscreenUI", "Toggle Fullscreen"); TRANSLATE_NOOP("FullscreenUI", "Toggle every %d frames"); TRANSLATE_NOOP("FullscreenUI", "True Color Debanding"); TRANSLATE_NOOP("FullscreenUI", "True Color Rendering"); @@ -7078,6 +7528,8 @@ TRANSLATE_NOOP("FullscreenUI", "Wireframe Rendering"); TRANSLATE_NOOP("FullscreenUI", "Writes textures which can be replaced to the dump directory."); TRANSLATE_NOOP("FullscreenUI", "\"Challenge\" mode for achievements, including leaderboard tracking. Disables save state, cheats, and slowdown functions."); TRANSLATE_NOOP("FullscreenUI", "\"PlayStation\" and \"PSX\" are registered trademarks of Sony Interactive Entertainment Europe Limited. This software is not affiliated in any way with Sony Interactive Entertainment."); +TRANSLATE_NOOP("FullscreenUI", "{:%H:%M}"); +TRANSLATE_NOOP("FullscreenUI", "{:%Y-%m-%d %H:%M:%S}"); TRANSLATE_NOOP("FullscreenUI", "{} Frames"); TRANSLATE_NOOP("FullscreenUI", "{} deleted."); TRANSLATE_NOOP("FullscreenUI", "{} does not exist."); diff --git a/src/core/fullscreen_ui.h b/src/core/fullscreen_ui.h index 99e54894c..5942239f3 100644 --- a/src/core/fullscreen_ui.h +++ b/src/core/fullscreen_ui.h @@ -34,6 +34,7 @@ void OpenLeaderboardsWindow(); bool IsLeaderboardsWindowOpen(); void ReturnToMainWindow(); void ReturnToPreviousWindow(); +void SetStandardSelectionFooterText(bool back_instead_of_cancel); #endif void Shutdown(); @@ -45,5 +46,13 @@ void TimeToPrintableString(SmallStringBase* str, time_t t); // Host UI triggers from Big Picture mode. namespace Host { +/// Requests shut down and exit of the hosting application. This may not actually exit, +/// if the user cancels the shutdown confirmation. +void RequestExitApplication(bool allow_confirm); + +/// Requests Big Picture mode to be shut down, returning to the desktop interface. +void RequestExitBigPicture(); + +/// Requests the cover downloader be opened. void OnCoverDownloaderOpenRequested(); } // namespace Host diff --git a/src/core/host.h b/src/core/host.h index 9cfe47e4c..7b9917112 100644 --- a/src/core/host.h +++ b/src/core/host.h @@ -94,10 +94,6 @@ void DisplayLoadingScreen(const char* message, int progress_min = -1, int progre /// Safely executes a function on the VM thread. void RunOnCPUThread(std::function function, bool block = false); -/// Requests shut down and exit of the hosting application. This may not actually exit, -/// if the user cancels the shutdown confirmation. -void RequestExit(bool allow_confirm); - /// Attempts to create the rendering device backend. bool CreateGPUDevice(RenderAPI api); diff --git a/src/duckstation-qt/qthost.cpp b/src/duckstation-qt/qthost.cpp index c5c9829bc..ef2e346a6 100644 --- a/src/duckstation-qt/qthost.cpp +++ b/src/duckstation-qt/qthost.cpp @@ -696,8 +696,7 @@ void EmuThread::stopFullscreenUI() return; } - if (System::IsValid()) - shutdownSystem(); + setFullscreen(false, true); if (m_run_fullscreen_ui) { @@ -1864,11 +1863,16 @@ void Host::RequestSystemShutdown(bool allow_confirm, bool save_state) Q_ARG(bool, true), Q_ARG(bool, save_state)); } -void Host::RequestExit(bool allow_confirm) +void Host::RequestExitApplication(bool allow_confirm) { QMetaObject::invokeMethod(g_main_window, "requestExit", Qt::QueuedConnection, Q_ARG(bool, allow_confirm)); } +void Host::RequestExitBigPicture() +{ + g_emu_thread->stopFullscreenUI(); +} + std::optional Host::GetTopLevelWindowInfo() { std::optional ret; diff --git a/src/duckstation-regtest/regtest_host.cpp b/src/duckstation-regtest/regtest_host.cpp index 2406a977d..daa290bef 100644 --- a/src/duckstation-regtest/regtest_host.cpp +++ b/src/duckstation-regtest/regtest_host.cpp @@ -299,7 +299,12 @@ void Host::RequestResizeHostDisplay(s32 width, s32 height) // } -void Host::RequestExit(bool save_state_if_running) +void Host::RequestExitApplication(bool save_state_if_running) +{ + // +} + +void Host::RequestExitBigPicture() { // } diff --git a/src/util/image.cpp b/src/util/image.cpp index 8cc05cf1c..dc5b884f1 100644 --- a/src/util/image.cpp +++ b/src/util/image.cpp @@ -292,7 +292,12 @@ bool PNGFileLoader(RGBA8Image* image, const char* filename, std::FILE* fp) if (setjmp(png_jmpbuf(png_ptr))) return false; - png_init_io(png_ptr, fp); + png_set_read_fn(png_ptr, fp, [](png_structp png_ptr, png_bytep data_ptr, png_size_t size) { + std::FILE* fp = static_cast(png_get_io_ptr(png_ptr)); + if (std::fread(data_ptr, size, 1, fp) != 1) + png_error(png_ptr, "Read error"); + }); + return PNGCommonLoader(image, png_ptr, info_ptr, new_data, row_pointers); } diff --git a/src/util/imgui_fullscreen.cpp b/src/util/imgui_fullscreen.cpp index ebe9a4fbb..da12dce3d 100644 --- a/src/util/imgui_fullscreen.cpp +++ b/src/util/imgui_fullscreen.cpp @@ -100,6 +100,10 @@ static std::deque s_texture_load_queue; static std::deque> s_texture_upload_queue; static std::thread s_texture_load_thread; +static SmallString s_fullscreen_footer_text; +static SmallString s_last_fullscreen_footer_text; +static float s_fullscreen_text_change_time; + static bool s_choice_dialog_open = false; static bool s_choice_dialog_checkable = false; static std::string s_choice_dialog_title; @@ -245,6 +249,9 @@ void ImGuiFullscreen::Shutdown() s_notifications.clear(); s_background_progress_dialogs.clear(); + s_fullscreen_footer_text.clear(); + s_last_fullscreen_footer_text.clear(); + s_fullscreen_text_change_time = 0.0f; CloseInputDialog(); CloseMessageDialog(); s_choice_dialog_open = false; @@ -262,6 +269,11 @@ void ImGuiFullscreen::Shutdown() s_file_selector_current_directory = {}; s_file_selector_filters.clear(); s_file_selector_items.clear(); + s_message_dialog_open = false; + s_message_dialog_title = {}; + s_message_dialog_message = {}; + s_message_dialog_buttons = {}; + s_message_dialog_callback = {}; } const std::shared_ptr& ImGuiFullscreen::GetPlaceholderTexture() @@ -499,6 +511,8 @@ void ImGuiFullscreen::EndLayout() DrawInputDialog(); DrawMessageDialog(); + DrawFullscreenFooter(); + const float notification_margin = LayoutScale(10.0f); const float spacing = LayoutScale(10.0f); const float notification_vertical_pos = GetNotificationVerticalPosition(); @@ -511,6 +525,8 @@ void ImGuiFullscreen::EndLayout() PopResetLayout(); + s_fullscreen_footer_text.clear(); + s_rendered_menu_item_border = false; s_had_hovered_menu_item = std::exchange(s_has_hovered_menu_item, false); } @@ -558,6 +574,10 @@ bool ImGuiFullscreen::ResetFocusHere() if (!s_focus_reset_queued) return false; + // don't take focus from dialogs + if (ImGui::FindBlockingModal(ImGui::GetCurrentWindow())) + return false; + s_focus_reset_queued = false; ImGui::SetWindowFocus(); @@ -565,6 +585,20 @@ bool ImGuiFullscreen::ResetFocusHere() return (GImGui->NavInputSource == ImGuiInputSource_Keyboard || GImGui->NavInputSource == ImGuiInputSource_Gamepad); } +bool ImGuiFullscreen::IsFocusResetQueued() +{ + return s_focus_reset_queued; +} + +void ImGuiFullscreen::ForceKeyNavEnabled() +{ + ImGuiContext& g = *ImGui::GetCurrentContext(); + g.ActiveIdSource = (g.ActiveIdSource == ImGuiInputSource_Mouse) ? ImGuiInputSource_Keyboard : g.ActiveIdSource; + g.NavInputSource = (g.NavInputSource == ImGuiInputSource_Mouse) ? ImGuiInputSource_Keyboard : g.ActiveIdSource; + g.NavDisableHighlight = false; + g.NavDisableMouseHover = true; +} + bool ImGuiFullscreen::WantsToCloseMenu() { // Wait for the Close button to be released, THEN pressed @@ -606,12 +640,12 @@ void ImGuiFullscreen::PopPrimaryColor() ImGui::PopStyleColor(5); } -bool ImGuiFullscreen::BeginFullscreenColumns(const char* title, float pos_y, bool expand_to_screen_width) +bool ImGuiFullscreen::BeginFullscreenColumns(const char* title, float pos_y, bool expand_to_screen_width, bool footer) { ImGui::SetNextWindowPos(ImVec2(expand_to_screen_width ? 0.0f : g_layout_padding_left, pos_y)); ImGui::SetNextWindowSize( ImVec2(expand_to_screen_width ? ImGui::GetIO().DisplaySize.x : LayoutScale(LAYOUT_SCREEN_WIDTH), - ImGui::GetIO().DisplaySize.y - pos_y)); + ImGui::GetIO().DisplaySize.y - pos_y - (footer ? LayoutScale(LAYOUT_FOOTER_HEIGHT) : 0.0f))); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); @@ -705,14 +739,103 @@ void ImGuiFullscreen::EndFullscreenWindow() ImGui::PopStyleColor(); } +bool ImGuiFullscreen::IsGamepadInputSource() +{ + return (ImGui::GetCurrentContext()->NavInputSource == ImGuiInputSource_Gamepad); +} + +void ImGuiFullscreen::CreateFooterTextString(SmallStringBase& dest, + std::span> items) +{ + dest.clear(); + for (const auto& [icon, text] : items) + { + if (!dest.empty()) + dest.append(" "); + + dest.append(icon); + dest.append(' '); + dest.append(text); + } +} + +void ImGuiFullscreen::SetFullscreenFooterText(std::string_view text) +{ + s_fullscreen_footer_text.assign(text); +} + +void ImGuiFullscreen::SetFullscreenFooterText(std::span> items) +{ + CreateFooterTextString(s_fullscreen_footer_text, items); +} + +void ImGuiFullscreen::DrawFullscreenFooter() +{ + const ImGuiIO& io = ImGui::GetIO(); + if (s_fullscreen_footer_text.empty()) + { + s_last_fullscreen_footer_text.clear(); + return; + } + + const float padding = LayoutScale(LAYOUT_FOOTER_PADDING); + const float height = LayoutScale(LAYOUT_FOOTER_HEIGHT); + + ImDrawList* dl = ImGui::GetForegroundDrawList(); + dl->AddRectFilled(ImVec2(0.0f, io.DisplaySize.y - height), io.DisplaySize, ImGui::GetColorU32(UIPrimaryColor), 0.0f); + + ImFont* const font = g_medium_font; + const float max_width = io.DisplaySize.x - padding * 2.0f; + + float prev_opacity = 0.0f; + if (!s_last_fullscreen_footer_text.empty() && s_fullscreen_footer_text != s_last_fullscreen_footer_text) + { + if (s_fullscreen_text_change_time == 0.0f) + s_fullscreen_text_change_time = 0.15f; + else + s_fullscreen_text_change_time = std::max(s_fullscreen_text_change_time - io.DeltaTime, 0.0f); + + if (s_fullscreen_text_change_time == 0.0f) + s_last_fullscreen_footer_text = s_fullscreen_footer_text; + + prev_opacity = s_fullscreen_text_change_time * (1.0f / 0.15f); + if (prev_opacity > 0.0f) + { + const ImVec2 text_size = + font->CalcTextSizeA(font->FontSize, max_width, 0.0f, s_last_fullscreen_footer_text.c_str(), + s_last_fullscreen_footer_text.end_ptr()); + dl->AddText( + font, font->FontSize, + ImVec2(io.DisplaySize.x - padding * 2.0f - text_size.x, io.DisplaySize.y - font->FontSize - padding), + ImGui::GetColorU32(ImVec4(UIPrimaryTextColor.x, UIPrimaryTextColor.y, UIPrimaryTextColor.z, prev_opacity)), + s_last_fullscreen_footer_text.c_str(), s_last_fullscreen_footer_text.end_ptr()); + } + } + else if (s_last_fullscreen_footer_text.empty()) + { + s_last_fullscreen_footer_text = s_fullscreen_footer_text; + } + + if (prev_opacity < 1.0f) + { + const ImVec2 text_size = font->CalcTextSizeA(font->FontSize, max_width, 0.0f, s_fullscreen_footer_text.c_str(), + s_fullscreen_footer_text.end_ptr()); + dl->AddText( + font, font->FontSize, + ImVec2(io.DisplaySize.x - padding * 2.0f - text_size.x, io.DisplaySize.y - font->FontSize - padding), + ImGui::GetColorU32(ImVec4(UIPrimaryTextColor.x, UIPrimaryTextColor.y, UIPrimaryTextColor.z, 1.0f - prev_opacity)), + s_fullscreen_footer_text.c_str(), s_fullscreen_footer_text.end_ptr()); + } +} + void ImGuiFullscreen::PrerenderMenuButtonBorder() { if (!s_had_hovered_menu_item) return; // updating might finish the animation - const ImVec2 min = s_menu_button_frame_min_animated.UpdateAndGetValue(); - const ImVec2 max = s_menu_button_frame_max_animated.UpdateAndGetValue(); + const ImVec2& min = s_menu_button_frame_min_animated.UpdateAndGetValue(); + const ImVec2& max = s_menu_button_frame_max_animated.UpdateAndGetValue(); const ImU32 col = ImGui::GetColorU32(ImGuiCol_ButtonHovered); const float t = static_cast(std::min(std::abs(std::sin(ImGui::GetTime() * 0.75) * 1.1), 1.0)); @@ -874,7 +997,7 @@ void ImGuiFullscreen::DrawMenuButtonFrame(const ImVec2& p_min, const ImVec2& p_m MENU_BACKGROUND_ANIMATION_TIME); } if (frame_max.x != s_menu_button_frame_max_animated.GetEndValue().x || - frame_max.y != s_menu_button_frame_max_animated.GetEndValue().x) + frame_max.y != s_menu_button_frame_max_animated.GetEndValue().y) { s_menu_button_frame_max_animated.Start(s_menu_button_frame_max_animated.GetCurrentValue(), frame_max, MENU_BACKGROUND_ANIMATION_TIME); @@ -1794,6 +1917,100 @@ bool ImGuiFullscreen::NavTab(const char* title, bool is_active, bool enabled /* return pressed; } +bool ImGuiFullscreen::BeginHorizontalMenu(const char* name, const ImVec2& position, const ImVec2& size, u32 num_items) +{ + s_menu_button_index = 0; + + const float item_padding = LayoutScale(LAYOUT_HORIZONTAL_MENU_PADDING); + const float item_width = LayoutScale(LAYOUT_HORIZONTAL_MENU_ITEM_WIDTH); + const float item_spacing = LayoutScale(30.0f); + const float menu_width = static_cast(num_items) * (item_width + item_spacing) - item_spacing; + const float menu_height = LayoutScale(LAYOUT_HORIZONTAL_MENU_HEIGHT); + + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(item_padding, item_padding)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, LayoutScale(1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(item_spacing, 0.0f)); + + if (!BeginFullscreenWindow(position, size, name, UIBackgroundColor, 0.0f, 0.0f)) + return false; + + ImGui::SetCursorPos(ImVec2((size.x - menu_width) * 0.5f, (size.y - menu_height) * 0.5f)); + + PrerenderMenuButtonBorder(); + return true; +} + +void ImGuiFullscreen::EndHorizontalMenu() +{ + ImGui::PopStyleVar(4); + EndFullscreenWindow(); +} + +bool ImGuiFullscreen::HorizontalMenuItem(GPUTexture* icon, const char* title, const char* description) +{ + ImGuiWindow* window = ImGui::GetCurrentWindow(); + if (window->SkipItems) + return false; + + const ImVec2 pos = window->DC.CursorPos; + const ImVec2 size = LayoutScale(LAYOUT_HORIZONTAL_MENU_ITEM_WIDTH, LAYOUT_HORIZONTAL_MENU_HEIGHT); + ImRect bb = ImRect(pos, pos + size); + + const ImGuiID id = window->GetID(title); + ImGui::ItemSize(size); + if (!ImGui::ItemAdd(bb, id)) + return false; + + bool held; + bool hovered; + const bool pressed = ImGui::ButtonBehavior(bb, id, &hovered, &held, 0); + if (hovered) + { + const ImU32 col = ImGui::GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered, 1.0f); + + const float t = static_cast(std::min(std::abs(std::sin(ImGui::GetTime() * 0.75) * 1.1), 1.0)); + ImGui::PushStyleColor(ImGuiCol_Border, ImGui::GetColorU32(ImGuiCol_Border, t)); + + DrawMenuButtonFrame(bb.Min, bb.Max, col, true, 0.0f); + + ImGui::PopStyleColor(); + } + + const ImGuiStyle& style = ImGui::GetStyle(); + bb.Min += style.FramePadding; + bb.Max -= style.FramePadding; + + const float avail_width = bb.Max.x - bb.Min.x; + const float icon_size = LayoutScale(150.0f); + const ImVec2 icon_pos = bb.Min + ImVec2((avail_width - icon_size) * 0.5f, 0.0f); + + ImDrawList* dl = ImGui::GetWindowDrawList(); + dl->AddImage(reinterpret_cast(icon), icon_pos, icon_pos + ImVec2(icon_size, icon_size)); + + ImFont* title_font = g_large_font; + const ImVec2 title_size = title_font->CalcTextSizeA(title_font->FontSize, avail_width, 0.0f, title); + const ImVec2 title_pos = + ImVec2(bb.Min.x + (avail_width - title_size.x) * 0.5f, icon_pos.y + icon_size + LayoutScale(10.0f)); + const ImVec4 title_bb = ImVec4(title_pos.x, title_pos.y, title_pos.x + title_size.x, title_pos.y + title_size.y); + + dl->AddText(title_font, title_font->FontSize, title_pos, ImGui::GetColorU32(ImGuiCol_Text), title, nullptr, 0.0f, + &title_bb); + + ImFont* desc_font = g_medium_font; + const ImVec2 desc_size = desc_font->CalcTextSizeA(desc_font->FontSize, avail_width, avail_width, description); + const ImVec2 desc_pos = ImVec2(bb.Min.x + (avail_width - desc_size.x) * 0.5f, title_bb.w + LayoutScale(10.0f)); + const ImVec4 desc_bb = ImVec4(desc_pos.x, desc_pos.y, desc_pos.x + desc_size.x, desc_pos.y + desc_size.y); + + dl->AddText(desc_font, desc_font->FontSize, desc_pos, ImGui::GetColorU32(ImGuiCol_Text), description, nullptr, + avail_width, &desc_bb); + + ImGui::SameLine(); + + s_menu_button_index++; + return pressed; +} + void ImGuiFullscreen::PopulateFileSelectorItems() { s_file_selector_items.clear(); @@ -1869,7 +2086,7 @@ bool ImGuiFullscreen::IsFileSelectorOpen() return s_file_selector_open; } -void ImGuiFullscreen::OpenFileSelector(const char* title, bool select_directory, FileSelectorCallback callback, +void ImGuiFullscreen::OpenFileSelector(std::string_view title, bool select_directory, FileSelectorCallback callback, FileSelectorFilters filters, std::string initial_directory) { if (s_file_selector_open) @@ -1884,6 +2101,7 @@ void ImGuiFullscreen::OpenFileSelector(const char* title, bool select_directory, if (initial_directory.empty() || !FileSystem::DirectoryExists(initial_directory.c_str())) initial_directory = FileSystem::GetWorkingDirectory(); SetFileSelectorDirectory(std::move(initial_directory)); + QueueResetFocus(); } void ImGuiFullscreen::CloseFileSelector() @@ -1931,6 +2149,7 @@ void ImGuiFullscreen::DrawFileSelector() ImGui::PushStyleColor(ImGuiCol_Text, UIBackgroundTextColor); BeginMenuButtons(); + ResetFocusHere(); if (!s_file_selector_current_directory.empty()) { @@ -1965,6 +2184,9 @@ void ImGuiFullscreen::DrawFileSelector() ImGui::PopStyleVar(3); ImGui::PopFont(); + if (is_open) + GetFileSelectorHelpText(s_fullscreen_footer_text); + if (selected) { if (selected->is_file) @@ -1974,6 +2196,7 @@ void ImGuiFullscreen::DrawFileSelector() else { SetFileSelectorDirectory(std::move(selected->full_path)); + QueueResetFocus(); } } else if (directory_selected) @@ -1986,6 +2209,18 @@ void ImGuiFullscreen::DrawFileSelector() s_file_selector_callback(no_path); CloseFileSelector(); } + else + { + if (ImGui::IsKeyPressed(ImGuiKey_Backspace, false) || ImGui::IsKeyPressed(ImGuiKey_NavGamepadMenu, false)) + { + if (!s_file_selector_items.empty() && s_file_selector_items.front().display_name == ICON_FA_FOLDER_OPEN + " ") + { + SetFileSelectorDirectory(std::move(s_file_selector_items.front().full_path)); + QueueResetFocus(); + } + } + } } bool ImGuiFullscreen::IsChoiceDialogOpen() @@ -1993,7 +2228,7 @@ bool ImGuiFullscreen::IsChoiceDialogOpen() return s_choice_dialog_open; } -void ImGuiFullscreen::OpenChoiceDialog(const char* title, bool checkable, ChoiceDialogOptions options, +void ImGuiFullscreen::OpenChoiceDialog(std::string_view title, bool checkable, ChoiceDialogOptions options, ChoiceDialogCallback callback) { if (s_choice_dialog_open) @@ -2004,6 +2239,7 @@ void ImGuiFullscreen::OpenChoiceDialog(const char* title, bool checkable, Choice s_choice_dialog_title = fmt::format("{}##choice_dialog", title); s_choice_dialog_options = std::move(options); s_choice_dialog_callback = std::move(callback); + QueueResetFocus(); } void ImGuiFullscreen::CloseChoiceDialog() @@ -2054,6 +2290,7 @@ void ImGuiFullscreen::DrawChoiceDialog() ImGui::PushStyleColor(ImGuiCol_Text, UIBackgroundTextColor); BeginMenuButtons(); + ResetFocusHere(); if (s_choice_dialog_checkable) { @@ -2115,6 +2352,10 @@ void ImGuiFullscreen::DrawChoiceDialog() s_choice_dialog_callback(-1, no_string, false); CloseChoiceDialog(); } + else + { + GetChoiceDialogHelpText(s_fullscreen_footer_text); + } } bool ImGuiFullscreen::IsInputDialogOpen() @@ -2131,6 +2372,7 @@ void ImGuiFullscreen::OpenInputStringDialog(std::string title, std::string messa s_input_dialog_caption = std::move(caption); s_input_dialog_ok_text = std::move(ok_button_text); s_input_dialog_callback = std::move(callback); + QueueResetFocus(); } void ImGuiFullscreen::DrawInputDialog() @@ -2157,6 +2399,7 @@ void ImGuiFullscreen::DrawInputDialog() ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove)) { + ResetFocusHere(); ImGui::TextWrapped("%s", s_input_dialog_message.c_str()); BeginMenuButtons(); @@ -2202,6 +2445,8 @@ void ImGuiFullscreen::DrawInputDialog() } if (!is_open) CloseInputDialog(); + else + GetInputDialogHelpText(s_fullscreen_footer_text); ImGui::PopStyleColor(4); ImGui::PopStyleVar(3); @@ -2239,6 +2484,7 @@ void ImGuiFullscreen::OpenConfirmMessageDialog(std::string title, std::string me s_message_dialog_callback = std::move(callback); s_message_dialog_buttons[0] = std::move(yes_button_text); s_message_dialog_buttons[1] = std::move(no_button_text); + QueueResetFocus(); } void ImGuiFullscreen::OpenInfoMessageDialog(std::string title, std::string message, InfoMessageDialogCallback callback, @@ -2251,6 +2497,7 @@ void ImGuiFullscreen::OpenInfoMessageDialog(std::string title, std::string messa s_message_dialog_message = std::move(message); s_message_dialog_callback = std::move(callback); s_message_dialog_buttons[0] = std::move(button_text); + QueueResetFocus(); } void ImGuiFullscreen::OpenMessageDialog(std::string title, std::string message, MessageDialogCallback callback, @@ -2266,6 +2513,7 @@ void ImGuiFullscreen::OpenMessageDialog(std::string title, std::string message, s_message_dialog_buttons[0] = std::move(first_button_text); s_message_dialog_buttons[1] = std::move(second_button_text); s_message_dialog_buttons[2] = std::move(third_button_text); + QueueResetFocus(); } void ImGuiFullscreen::CloseMessageDialog() @@ -2278,6 +2526,7 @@ void ImGuiFullscreen::CloseMessageDialog() s_message_dialog_message = {}; s_message_dialog_buttons = {}; s_message_dialog_callback = {}; + QueueResetFocus(); } void ImGuiFullscreen::DrawMessageDialog() @@ -2310,6 +2559,7 @@ void ImGuiFullscreen::DrawMessageDialog() if (ImGui::BeginPopupModal(win_id, &is_open, flags)) { BeginMenuButtons(); + QueueResetFocus(); ImGui::TextWrapped("%s", s_message_dialog_message.c_str()); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + LayoutScale(20.0f)); @@ -2352,6 +2602,10 @@ void ImGuiFullscreen::DrawMessageDialog() func(result.value_or(1) == 0); } } + else + { + GetChoiceDialogHelpText(s_fullscreen_footer_text); + } } static float s_notification_vertical_position = 0.15f; @@ -2719,7 +2973,7 @@ void ImGuiFullscreen::DrawToast() ImFont* message_font = g_medium_font; const float padding = LayoutScale(20.0f); const float total_padding = padding * 2.0f; - const float margin = LayoutScale(20.0f); + const float margin = LayoutScale(20.0f + (s_fullscreen_footer_text.empty() ? 0.0f : LAYOUT_FOOTER_HEIGHT)); const float spacing = s_toast_title.empty() ? 0.0f : LayoutScale(10.0f); const ImVec2 display_size(ImGui::GetIO().DisplaySize); const ImVec2 title_size(s_toast_title.empty() ? @@ -2743,7 +2997,7 @@ void ImGuiFullscreen::DrawToast() const float offset = (comb_size.x - title_size.x) * 0.5f; dl->AddText(title_font, title_font->FontSize, box_pos + ImVec2(offset + padding, padding), ImGui::GetColorU32(ModAlpha(UIPrimaryTextColor, alpha)), s_toast_title.c_str(), - s_toast_title.c_str() + s_toast_title.length()); + s_toast_title.c_str() + s_toast_title.length(), max_width); } if (!s_toast_message.empty()) { @@ -2751,7 +3005,7 @@ void ImGuiFullscreen::DrawToast() dl->AddText(message_font, message_font->FontSize, box_pos + ImVec2(offset + padding, padding + spacing + title_size.y), ImGui::GetColorU32(ModAlpha(UIPrimaryTextColor, alpha)), s_toast_message.c_str(), - s_toast_message.c_str() + s_toast_message.length()); + s_toast_message.c_str() + s_toast_message.length(), max_width); } } diff --git a/src/util/imgui_fullscreen.h b/src/util/imgui_fullscreen.h index 490ba0828..b5ee5c3d2 100644 --- a/src/util/imgui_fullscreen.h +++ b/src/util/imgui_fullscreen.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin +// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) #pragma once @@ -12,10 +12,14 @@ #include #include #include +#include #include +#include +#include #include class GPUTexture; +class SmallStringBase; namespace ImGuiFullscreen { #define HEX_TO_IMVEC4(hex, alpha) \ @@ -31,6 +35,11 @@ static constexpr float LAYOUT_MENU_BUTTON_HEIGHT = 50.0f; static constexpr float LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY = 26.0f; static constexpr float LAYOUT_MENU_BUTTON_X_PADDING = 15.0f; static constexpr float LAYOUT_MENU_BUTTON_Y_PADDING = 10.0f; +static constexpr float LAYOUT_FOOTER_PADDING = 10.0f; +static constexpr float LAYOUT_FOOTER_HEIGHT = LAYOUT_MEDIUM_FONT_SIZE + LAYOUT_FOOTER_PADDING * 2.0f; +static constexpr float LAYOUT_HORIZONTAL_MENU_HEIGHT = 320.0f; +static constexpr float LAYOUT_HORIZONTAL_MENU_PADDING = 30.0f; +static constexpr float LAYOUT_HORIZONTAL_MENU_ITEM_WIDTH = 250.0f; extern ImFont* g_standard_font; extern ImFont* g_medium_font; @@ -162,6 +171,9 @@ void PopResetLayout(); void QueueResetFocus(); bool ResetFocusHere(); +bool IsFocusResetQueued(); +void ForceKeyNavEnabled(); + bool WantsToCloseMenu(); void ResetCloseMenuIfNeeded(); @@ -170,7 +182,8 @@ void PopPrimaryColor(); void DrawWindowTitle(const char* title); -bool BeginFullscreenColumns(const char* title = nullptr, float pos_y = 0.0f, bool expand_to_screen_width = false); +bool BeginFullscreenColumns(const char* title = nullptr, float pos_y = 0.0f, bool expand_to_screen_width = false, + bool footer = false); void EndFullscreenColumns(); bool BeginFullscreenColumnWindow(float start, float end, const char* name, @@ -185,6 +198,12 @@ bool BeginFullscreenWindow(const ImVec2& position, const ImVec2& size, const cha float padding = 0.0f, ImGuiWindowFlags flags = 0); void EndFullscreenWindow(); +bool IsGamepadInputSource(); +void CreateFooterTextString(SmallStringBase& dest, std::span> items); +void SetFullscreenFooterText(std::string_view text); +void SetFullscreenFooterText(std::span> items); +void DrawFullscreenFooter(); + void PrerenderMenuButtonBorder(); void BeginMenuButtons(u32 num_items = 0, float y_align = 0.0f, float x_padding = LAYOUT_MENU_BUTTON_X_PADDING, float y_padding = LAYOUT_MENU_BUTTON_Y_PADDING, float item_height = LAYOUT_MENU_BUTTON_HEIGHT); @@ -267,10 +286,14 @@ bool NavButton(const char* title, bool is_active, bool enabled = true, float wid bool NavTab(const char* title, bool is_active, bool enabled, float width, float height, const ImVec4& background, ImFont* font = g_large_font); +bool BeginHorizontalMenu(const char* name, const ImVec2& position, const ImVec2& size, u32 num_items); +void EndHorizontalMenu(); +bool HorizontalMenuItem(GPUTexture* icon, const char* title, const char* description); + using FileSelectorCallback = std::function; using FileSelectorFilters = std::vector; bool IsFileSelectorOpen(); -void OpenFileSelector(const char* title, bool select_directory, FileSelectorCallback callback, +void OpenFileSelector(std::string_view title, bool select_directory, FileSelectorCallback callback, FileSelectorFilters filters = FileSelectorFilters(), std::string initial_directory = std::string()); void CloseFileSelector(); @@ -278,7 +301,8 @@ void CloseFileSelector(); using ChoiceDialogCallback = std::function; using ChoiceDialogOptions = std::vector>; bool IsChoiceDialogOpen(); -void OpenChoiceDialog(const char* title, bool checkable, ChoiceDialogOptions options, ChoiceDialogCallback callback); +void OpenChoiceDialog(std::string_view title, bool checkable, ChoiceDialogOptions options, + ChoiceDialogCallback callback); void CloseChoiceDialog(); using InputStringDialogCallback = std::function; @@ -313,4 +337,9 @@ void ClearNotifications(); void ShowToast(std::string title, std::string message, float duration = 10.0f); void ClearToast(); + +// Message callbacks. +void GetChoiceDialogHelpText(SmallStringBase& dest); +void GetFileSelectorHelpText(SmallStringBase& dest); +void GetInputDialogHelpText(SmallStringBase& dest); } // namespace ImGuiFullscreen diff --git a/src/util/imgui_manager.cpp b/src/util/imgui_manager.cpp index c9006b796..e5c756375 100644 --- a/src/util/imgui_manager.cpp +++ b/src/util/imgui_manager.cpp @@ -176,6 +176,7 @@ bool ImGuiManager::Initialize(float global_scale, bool show_osd_messages, Error* io.BackendFlags |= ImGuiBackendFlags_HasGamepad | ImGuiBackendFlags_RendererHasVtxOffset; io.BackendUsingLegacyKeyArrays = 0; io.BackendUsingLegacyNavInputArray = 0; + io.KeyRepeatDelay = 0.5f; #ifndef __ANDROID__ // Android has no keyboard, nor are we using ImGui for any actual user-interactable windows. io.ConfigFlags |= @@ -562,22 +563,21 @@ bool ImGuiManager::AddIconFonts(float size) static constexpr ImWchar range_fa[] = { 0xe086, 0xe086, 0xf002, 0xf002, 0xf005, 0xf005, 0xf007, 0xf007, 0xf00c, 0xf00e, 0xf011, 0xf011, 0xf013, 0xf013, 0xf017, 0xf017, 0xf019, 0xf019, 0xf01c, 0xf01c, 0xf021, 0xf021, 0xf023, 0xf023, 0xf025, 0xf025, 0xf027, 0xf028, - 0xf02e, 0xf02e, 0xf030, 0xf030, 0xf03a, 0xf03a, 0xf03d, 0xf03d, 0xf049, 0xf04c, 0xf050, 0xf050, 0xf059, 0xf059, - 0xf05e, 0xf05e, 0xf062, 0xf063, 0xf065, 0xf065, 0xf067, 0xf067, 0xf071, 0xf071, 0xf075, 0xf075, 0xf077, 0xf078, - 0xf07b, 0xf07c, 0xf084, 0xf085, 0xf091, 0xf091, 0xf0a0, 0xf0a0, 0xf0ac, 0xf0ad, 0xf0c5, 0xf0c5, 0xf0c7, 0xf0c9, - 0xf0cb, 0xf0cb, 0xf0d0, 0xf0d0, 0xf0dc, 0xf0dc, 0xf0e2, 0xf0e2, 0xf0e7, 0xf0e7, 0xf0eb, 0xf0eb, 0xf0f1, 0xf0f1, - 0xf0f3, 0xf0f3, 0xf0fe, 0xf0fe, 0xf110, 0xf110, 0xf119, 0xf119, 0xf11b, 0xf11c, 0xf140, 0xf140, 0xf144, 0xf144, - 0xf14a, 0xf14a, 0xf15b, 0xf15b, 0xf15d, 0xf15d, 0xf188, 0xf188, 0xf191, 0xf192, 0xf1ab, 0xf1ab, 0xf1dd, 0xf1de, - 0xf1e6, 0xf1e6, 0xf1eb, 0xf1eb, 0xf1f8, 0xf1f8, 0xf1fc, 0xf1fc, 0xf242, 0xf242, 0xf245, 0xf245, 0xf26c, 0xf26c, - 0xf279, 0xf279, 0xf2d0, 0xf2d0, 0xf2db, 0xf2db, 0xf2f2, 0xf2f2, 0xf2f5, 0xf2f5, 0xf3c1, 0xf3c1, 0xf3fd, 0xf3fd, - 0xf410, 0xf410, 0xf466, 0xf466, 0xf500, 0xf500, 0xf51f, 0xf51f, 0xf538, 0xf538, 0xf545, 0xf545, 0xf547, 0xf548, - 0xf552, 0xf552, 0xf57a, 0xf57a, 0xf5a2, 0xf5a2, 0xf5aa, 0xf5aa, 0xf5e7, 0xf5e7, 0xf65d, 0xf65e, 0xf6a9, 0xf6a9, - 0xf6cf, 0xf6cf, 0xf794, 0xf794, 0xf7c2, 0xf7c2, 0xf807, 0xf807, 0xf815, 0xf815, 0xf818, 0xf818, 0xf84c, 0xf84c, - 0xf8cc, 0xf8cc, 0x0, 0x0}; + 0xf02e, 0xf02e, 0xf030, 0xf030, 0xf03a, 0xf03a, 0xf03d, 0xf03d, 0xf049, 0xf04c, 0xf050, 0xf050, 0xf05e, 0xf05e, + 0xf062, 0xf063, 0xf067, 0xf067, 0xf071, 0xf071, 0xf075, 0xf075, 0xf077, 0xf078, 0xf07b, 0xf07c, 0xf084, 0xf085, + 0xf091, 0xf091, 0xf0a0, 0xf0a0, 0xf0ac, 0xf0ad, 0xf0c5, 0xf0c5, 0xf0c7, 0xf0c9, 0xf0cb, 0xf0cb, 0xf0d0, 0xf0d0, + 0xf0dc, 0xf0dc, 0xf0e2, 0xf0e2, 0xf0e7, 0xf0e7, 0xf0eb, 0xf0eb, 0xf0f1, 0xf0f1, 0xf0f3, 0xf0f3, 0xf0fe, 0xf0fe, + 0xf110, 0xf110, 0xf119, 0xf119, 0xf11b, 0xf11c, 0xf140, 0xf140, 0xf14a, 0xf14a, 0xf15b, 0xf15b, 0xf15d, 0xf15d, + 0xf191, 0xf192, 0xf1ab, 0xf1ab, 0xf1dd, 0xf1de, 0xf1e6, 0xf1e6, 0xf1eb, 0xf1eb, 0xf1f8, 0xf1f8, 0xf1fc, 0xf1fc, + 0xf242, 0xf242, 0xf245, 0xf245, 0xf26c, 0xf26c, 0xf279, 0xf279, 0xf2d0, 0xf2d0, 0xf2db, 0xf2db, 0xf2f2, 0xf2f2, + 0xf3c1, 0xf3c1, 0xf3fd, 0xf3fd, 0xf410, 0xf410, 0xf466, 0xf466, 0xf4ce, 0xf4ce, 0xf500, 0xf500, 0xf51f, 0xf51f, + 0xf538, 0xf538, 0xf545, 0xf545, 0xf547, 0xf548, 0xf57a, 0xf57a, 0xf5a2, 0xf5a2, 0xf5aa, 0xf5aa, 0xf5e7, 0xf5e7, + 0xf65d, 0xf65e, 0xf6a9, 0xf6a9, 0xf6cf, 0xf6cf, 0xf794, 0xf794, 0xf7c2, 0xf7c2, 0xf807, 0xf807, 0xf815, 0xf815, + 0xf818, 0xf818, 0xf84c, 0xf84c, 0xf8cc, 0xf8cc, 0x0, 0x0}; static constexpr ImWchar range_pf[] = { 0x2196, 0x2199, 0x219e, 0x21a1, 0x21b0, 0x21b3, 0x21ba, 0x21c3, 0x21c7, 0x21ca, 0x21d0, 0x21d4, 0x21dc, 0x21dd, - 0x21e0, 0x21e3, 0x21ed, 0x21ee, 0x21f7, 0x21f8, 0x21fa, 0x21fb, 0x227a, 0x227d, 0x235e, 0x235e, 0x2360, 0x2361, - 0x2364, 0x2366, 0x23b2, 0x23b4, 0x23f4, 0x23f7, 0x2427, 0x243a, 0x243c, 0x243c, 0x243e, 0x243e, 0x2460, 0x246b, + 0x21e0, 0x21e3, 0x21ed, 0x21ee, 0x21f7, 0x21f8, 0x21fa, 0x21fb, 0x227a, 0x227f, 0x2284, 0x2284, 0x235e, 0x235e, + 0x2360, 0x2361, 0x2364, 0x2366, 0x23b2, 0x23b4, 0x23f4, 0x23f7, 0x2427, 0x243a, 0x243c, 0x243e, 0x2460, 0x246b, 0x24f5, 0x24fd, 0x24ff, 0x24ff, 0x278a, 0x278e, 0x27fc, 0x27fc, 0xe001, 0xe001, 0xff21, 0xff3a, 0x0, 0x0}; { @@ -1006,14 +1006,14 @@ bool ImGuiManager::ProcessGenericInputEvent(GenericInputBinding key, float value ImGuiKey_GamepadL2, // R2 }; - if (!ImGui::GetCurrentContext() || !s_imgui_wants_keyboard.load(std::memory_order_acquire)) + if (!ImGui::GetCurrentContext()) return false; if (static_cast(key) >= std::size(key_map) || key_map[static_cast(key)] == ImGuiKey_None) return false; ImGui::GetIO().AddKeyAnalogEvent(key_map[static_cast(key)], (value > 0.0f), value); - return true; + return s_imgui_wants_keyboard.load(std::memory_order_acquire); } void ImGuiManager::CreateSoftwareCursorTextures()