FullscreenUI: Make back button go back to pause menu

This commit is contained in:
Stenzek 2023-08-26 23:14:29 +10:00 committed by Connor McLaughlin
parent fb26842046
commit b15102d45a
1 changed files with 96 additions and 56 deletions

View File

@ -211,6 +211,7 @@ namespace FullscreenUI
static void PauseForMenuOpen(); static void PauseForMenuOpen();
static void ClosePauseMenu(); static void ClosePauseMenu();
static void OpenPauseSubMenu(PauseSubMenu submenu); static void OpenPauseSubMenu(PauseSubMenu submenu);
static void ReturnToPreviousWindow();
static void ReturnToMainWindow(); static void ReturnToMainWindow();
static void DrawLandingWindow(); static void DrawLandingWindow();
static void DrawPauseMenu(MainWindowType type); static void DrawPauseMenu(MainWindowType type);
@ -629,7 +630,7 @@ void FullscreenUI::CheckForConfigChanges(const Pcsx2Config& old_config)
MTGS::RunOnGSThread([]() { MTGS::RunOnGSThread([]() {
if (s_current_main_window == MainWindowType::Achievements || s_current_main_window == MainWindowType::Leaderboards) if (s_current_main_window == MainWindowType::Achievements || s_current_main_window == MainWindowType::Leaderboards)
{ {
ReturnToMainWindow(); ReturnToPreviousWindow();
} }
}); });
MTGS::WaitGS(false, false, false); MTGS::WaitGS(false, false, false);
@ -661,6 +662,8 @@ void FullscreenUI::OnVMDestroyed()
return; return;
s_pause_menu_was_open = false; s_pause_menu_was_open = false;
s_was_paused_on_quick_menu_open = false;
s_current_pause_submenu = PauseSubMenu::None;
SwitchToLanding(); SwitchToLanding();
}); });
} }
@ -872,6 +875,24 @@ void FullscreenUI::InvalidateCoverCache()
MTGS::RunOnGSThread([]() { s_cover_image_map.clear(); }); MTGS::RunOnGSThread([]() { s_cover_image_map.clear(); });
} }
void FullscreenUI::ReturnToPreviousWindow()
{
if (!VMManager::HasValidVM())
{
SwitchToLanding();
return;
}
else if (s_pause_menu_was_open)
{
s_current_main_window = MainWindowType::PauseMenu;
QueueResetFocus();
}
else
{
s_current_main_window = MainWindowType::None;
}
}
void FullscreenUI::ReturnToMainWindow() void FullscreenUI::ReturnToMainWindow()
{ {
if (s_pause_menu_was_open) if (s_pause_menu_was_open)
@ -1069,7 +1090,7 @@ void FullscreenUI::DoChangeDiscFromFile()
QueueResetFocus(); QueueResetFocus();
CloseFileSelector(); CloseFileSelector();
ReturnToMainWindow(); ReturnToPreviousWindow();
}; };
OpenFileSelector(ICON_FA_COMPACT_DISC " Select Disc Image", false, std::move(callback), GetDiscImageFilters(), OpenFileSelector(ICON_FA_COMPACT_DISC " Select Disc Image", false, std::move(callback), GetDiscImageFilters(),
@ -2546,7 +2567,7 @@ void FullscreenUI::DrawSettingsWindow()
if (WantsToCloseMenu()) if (WantsToCloseMenu())
{ {
if (ImGui::IsWindowFocused()) if (ImGui::IsWindowFocused())
ReturnToMainWindow(); ReturnToPreviousWindow();
} }
auto lock = Host::GetSettingsLock(); auto lock = Host::GetSettingsLock();
@ -4386,8 +4407,10 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
{ {
ImDrawList* dl = ImGui::GetBackgroundDrawList(); ImDrawList* dl = ImGui::GetBackgroundDrawList();
const ImVec2 display_size(ImGui::GetIO().DisplaySize); const ImVec2 display_size(ImGui::GetIO().DisplaySize);
const ImU32 text_color = IM_COL32(UIBackgroundTextColor.x * 255, UIBackgroundTextColor.y * 255, UIBackgroundTextColor.z * 255, 255); const ImU32 text_color =
dl->AddRectFilled(ImVec2(0.0f, 0.0f), display_size, IM_COL32(UIBackgroundColor.x * 255, UIBackgroundColor.y * 255, UIBackgroundColor.z * 255, 200)); IM_COL32(UIBackgroundTextColor.x * 255, UIBackgroundTextColor.y * 255, UIBackgroundTextColor.z * 255, 255);
dl->AddRectFilled(ImVec2(0.0f, 0.0f), display_size,
IM_COL32(UIBackgroundColor.x * 255, UIBackgroundColor.y * 255, UIBackgroundColor.z * 255, 200));
// title info // title info
{ {
@ -4400,17 +4423,17 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
const float image_width = has_rich_presence ? 60.0f : 50.0f; const float image_width = has_rich_presence ? 60.0f : 50.0f;
const float image_height = has_rich_presence ? 90.0f : 75.0f; const float image_height = has_rich_presence ? 90.0f : 75.0f;
const std::string_view path_string(Path::GetFileName(s_current_disc_path)); const std::string_view path_string(Path::GetFileName(s_current_disc_path));
const ImVec2 title_size( const ImVec2 title_size(g_large_font->CalcTextSizeA(
g_large_font->CalcTextSizeA(g_large_font->FontSize, std::numeric_limits<float>::max(), -1.0f, s_current_game_title.c_str())); g_large_font->FontSize, std::numeric_limits<float>::max(), -1.0f, s_current_game_title.c_str()));
const ImVec2 path_size(path_string.empty() ? const ImVec2 path_size(path_string.empty() ? ImVec2(0.0f, 0.0f) :
ImVec2(0.0f, 0.0f) : g_medium_font->CalcTextSizeA(g_medium_font->FontSize,
g_medium_font->CalcTextSizeA(g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, std::numeric_limits<float>::max(), -1.0f, path_string.data(),
path_string.data(), path_string.data() + path_string.length())); path_string.data() + path_string.length()));
const ImVec2 subtitle_size(g_medium_font->CalcTextSizeA( const ImVec2 subtitle_size(g_medium_font->CalcTextSizeA(
g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, s_current_game_subtitle.c_str())); g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, s_current_game_subtitle.c_str()));
ImVec2 title_pos( ImVec2 title_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - title_size.x,
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(10.0f + image_height));
ImVec2 path_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - path_size.x, ImVec2 path_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - path_size.x,
title_pos.y + g_large_font->FontSize + LayoutScale(4.0f)); title_pos.y + g_large_font->FontSize + LayoutScale(4.0f));
ImVec2 subtitle_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - subtitle_size.x, ImVec2 subtitle_pos(display_size.x - LayoutScale(10.0f + image_width + 20.0f) - subtitle_size.x,
@ -4434,8 +4457,8 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
if (!rp.empty()) if (!rp.empty())
{ {
const float wrap_width = LayoutScale(350.0f); const float wrap_width = LayoutScale(350.0f);
const ImVec2 rp_size = g_medium_font->CalcTextSizeA( const ImVec2 rp_size = g_medium_font->CalcTextSizeA(g_medium_font->FontSize,
g_medium_font->FontSize, std::numeric_limits<float>::max(), wrap_width, rp.data(), rp.data() + rp.size()); std::numeric_limits<float>::max(), wrap_width, rp.data(), rp.data() + rp.size());
// we make the image one line higher, so we only need to compensate when it's multiline RP // we make the image one line higher, so we only need to compensate when it's multiline RP
rp_height = rp_size.y - g_medium_font->FontSize; rp_height = rp_size.y - g_medium_font->FontSize;
@ -4454,11 +4477,12 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
GSTexture* const cover = GetCoverForCurrentGame(); GSTexture* const cover = GetCoverForCurrentGame();
const ImVec2 image_min( const ImVec2 image_min(display_size.x - LayoutScale(10.0f + image_width) - rp_height,
display_size.x - LayoutScale(10.0f + image_width) - rp_height, display_size.y - LayoutScale(10.0f + image_height) - rp_height); display_size.y - LayoutScale(10.0f + image_height) - rp_height);
const ImVec2 image_max(image_min.x + LayoutScale(image_width) + rp_height, image_min.y + LayoutScale(image_height) + rp_height); const ImVec2 image_max(
const ImRect image_rect(CenterImage( image_min.x + LayoutScale(image_width) + rp_height, image_min.y + LayoutScale(image_height) + rp_height);
ImRect(image_min, image_max), ImVec2(static_cast<float>(cover->GetWidth()), static_cast<float>(cover->GetHeight())))); const ImRect image_rect(CenterImage(ImRect(image_min, image_max),
ImVec2(static_cast<float>(cover->GetWidth()), static_cast<float>(cover->GetHeight()))));
dl->AddImage(cover->GetNativeHandle(), image_rect.Min, image_rect.Max); dl->AddImage(cover->GetNativeHandle(), image_rect.Min, image_rect.Max);
} }
@ -4474,7 +4498,8 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
#endif #endif
std::strftime(buf, sizeof(buf), "%X", &ltime); std::strftime(buf, sizeof(buf), "%X", &ltime);
const ImVec2 time_size(g_large_font->CalcTextSizeA(g_large_font->FontSize, std::numeric_limits<float>::max(), -1.0f, buf)); const ImVec2 time_size(
g_large_font->CalcTextSizeA(g_large_font->FontSize, std::numeric_limits<float>::max(), -1.0f, buf));
const ImVec2 time_pos(display_size.x - LayoutScale(10.0f) - time_size.x, LayoutScale(10.0f)); const ImVec2 time_pos(display_size.x - LayoutScale(10.0f) - time_size.x, LayoutScale(10.0f));
DrawShadowedText(dl, g_large_font, time_pos, text_color, buf); DrawShadowedText(dl, g_large_font, time_pos, text_color, buf);
@ -4486,15 +4511,17 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
const std::string session_time_str(GameList::FormatTimespan(session_time, true)); const std::string session_time_str(GameList::FormatTimespan(session_time, true));
std::snprintf(buf, std::size(buf), "This Session: %s", session_time_str.c_str()); std::snprintf(buf, std::size(buf), "This Session: %s", session_time_str.c_str());
const ImVec2 session_size(g_medium_font->CalcTextSizeA(g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, buf)); const ImVec2 session_size(
const ImVec2 session_pos( g_medium_font->CalcTextSizeA(g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, buf));
display_size.x - LayoutScale(10.0f) - session_size.x, time_pos.y + g_large_font->FontSize + LayoutScale(4.0f)); const ImVec2 session_pos(display_size.x - LayoutScale(10.0f) - session_size.x,
time_pos.y + g_large_font->FontSize + LayoutScale(4.0f));
DrawShadowedText(dl, g_medium_font, session_pos, text_color, buf); DrawShadowedText(dl, g_medium_font, session_pos, text_color, buf);
std::snprintf(buf, std::size(buf), "All Time: %s", played_time_str.c_str()); std::snprintf(buf, std::size(buf), "All Time: %s", played_time_str.c_str());
const ImVec2 total_size(g_medium_font->CalcTextSizeA(g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, buf)); const ImVec2 total_size(
const ImVec2 total_pos( g_medium_font->CalcTextSizeA(g_medium_font->FontSize, std::numeric_limits<float>::max(), -1.0f, buf));
display_size.x - LayoutScale(10.0f) - total_size.x, session_pos.y + g_medium_font->FontSize + LayoutScale(4.0f)); const ImVec2 total_pos(display_size.x - LayoutScale(10.0f) - total_size.x,
session_pos.y + g_medium_font->FontSize + LayoutScale(4.0f));
DrawShadowedText(dl, g_medium_font, total_pos, text_color, buf); DrawShadowedText(dl, g_medium_font, total_pos, text_color, buf);
} }
} }
@ -4502,8 +4529,8 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
const ImVec2 window_size(LayoutScale(500.0f, LAYOUT_SCREEN_HEIGHT)); 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 - window_size.y);
if (BeginFullscreenWindow( if (BeginFullscreenWindow(window_pos, window_size, "pause_menu", ImVec4(0.0f, 0.0f, 0.0f, 0.0f), 0.0f, 10.0f,
window_pos, window_size, "pause_menu", ImVec4(0.0f, 0.0f, 0.0f, 0.0f), 0.0f, 10.0f, ImGuiWindowFlags_NoBackground)) ImGuiWindowFlags_NoBackground))
{ {
static constexpr u32 submenu_item_count[] = { static constexpr u32 submenu_item_count[] = {
11, // None 11, // None
@ -4514,8 +4541,9 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
}; };
const bool just_focused = ResetFocusHere(); const bool just_focused = ResetFocusHere();
BeginMenuButtons(submenu_item_count[static_cast<u32>(s_current_pause_submenu)], 1.0f, ImGuiFullscreen::LAYOUT_MENU_BUTTON_X_PADDING, BeginMenuButtons(submenu_item_count[static_cast<u32>(s_current_pause_submenu)], 1.0f,
ImGuiFullscreen::LAYOUT_MENU_BUTTON_Y_PADDING, ImGuiFullscreen::LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY); ImGuiFullscreen::LAYOUT_MENU_BUTTON_X_PADDING, ImGuiFullscreen::LAYOUT_MENU_BUTTON_Y_PADDING,
ImGuiFullscreen::LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY);
switch (s_current_pause_submenu) switch (s_current_pause_submenu)
{ {
@ -4524,6 +4552,9 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
// NOTE: Menu close must come first, because otherwise VM destruction options will race. // NOTE: Menu close must come first, because otherwise VM destruction options will race.
const bool can_load_or_save_state = s_current_disc_crc != 0; const bool can_load_or_save_state = s_current_disc_crc != 0;
if (just_focused)
ImGui::SetFocusID(ImGui::GetID(ICON_FA_PLAY " Resume Game"), ImGui::GetCurrentWindow());
if (ActiveButton(ICON_FA_PLAY " Resume Game", false) || WantsToCloseMenu()) if (ActiveButton(ICON_FA_PLAY " Resume Game", false) || WantsToCloseMenu())
ClosePauseMenu(); ClosePauseMenu();
@ -4603,13 +4634,14 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
case PauseSubMenu::Exit: case PauseSubMenu::Exit:
{ {
if (just_focused) if (just_focused)
ImGui::SetFocusID(ImGui::GetID(ICON_FA_POWER_OFF " Exit Without Saving"), ImGui::GetCurrentWindow());
if (ActiveButton(ICON_FA_BACKWARD " Back To Pause Menu", false))
{ {
OpenPauseSubMenu(PauseSubMenu::None); ImGui::SetFocusID(
ImGui::GetID(ICON_FA_POWER_OFF " Exit Without Saving"), ImGui::GetCurrentWindow());
} }
if (ActiveButton(ICON_FA_BACKWARD " Back To Pause Menu", false) || WantsToCloseMenu())
OpenPauseSubMenu(PauseSubMenu::None);
if (ActiveButton(ICON_FA_SYNC " Reset System", false)) if (ActiveButton(ICON_FA_SYNC " Reset System", false))
{ {
ClosePauseMenu(); ClosePauseMenu();
@ -4627,7 +4659,10 @@ void FullscreenUI::DrawPauseMenu(MainWindowType type)
#ifdef ENABLE_ACHIEVEMENTS #ifdef ENABLE_ACHIEVEMENTS
case PauseSubMenu::Achievements: case PauseSubMenu::Achievements:
{ {
if (ActiveButton(ICON_FA_BACKWARD " Back To Pause Menu", false)) if (just_focused)
ImGui::SetFocusID(ImGui::GetID(ICON_FA_BACKWARD " Back To Pause Menu"), ImGui::GetCurrentWindow());
if (ActiveButton(ICON_FA_BACKWARD " Back To Pause Menu", false) || WantsToCloseMenu())
OpenPauseSubMenu(PauseSubMenu::None); OpenPauseSubMenu(PauseSubMenu::None);
if (ActiveButton(ICON_FA_TROPHY " Achievements", false)) if (ActiveButton(ICON_FA_TROPHY " Achievements", false))
@ -4765,8 +4800,6 @@ void FullscreenUI::CloseSaveStateSelector()
s_save_state_selector_loading = false; s_save_state_selector_loading = false;
s_save_state_selector_resuming = false; s_save_state_selector_resuming = false;
s_save_state_selector_game_path = {}; s_save_state_selector_game_path = {};
if (s_current_main_window != MainWindowType::GameList)
ReturnToMainWindow();
} }
void FullscreenUI::DrawSaveStateSelector(bool is_loading) void FullscreenUI::DrawSaveStateSelector(bool is_loading)
@ -4796,7 +4829,10 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
ImGui::PopStyleVar(5); ImGui::PopStyleVar(5);
if (!is_open) if (!is_open)
{
CloseSaveStateSelector(); CloseSaveStateSelector();
ReturnToPreviousWindow();
}
return; return;
} }
@ -4809,7 +4845,10 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
{ {
BeginNavBar(); BeginNavBar();
if (NavButton(ICON_FA_BACKWARD, true, true)) if (NavButton(ICON_FA_BACKWARD, true, true))
{
CloseSaveStateSelector(); CloseSaveStateSelector();
ReturnToPreviousWindow();
}
NavTitle(is_loading ? "Load State" : "Save State"); NavTitle(is_loading ? "Load State" : "Save State");
EndNavBar(); EndNavBar();
@ -4895,6 +4934,7 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
Host::RunOnCPUThread([slot = entry.slot]() { VMManager::SaveStateToSlot(slot); }); Host::RunOnCPUThread([slot = entry.slot]() { VMManager::SaveStateToSlot(slot); });
CloseSaveStateSelector(); CloseSaveStateSelector();
ReturnToMainWindow();
closed = true; closed = true;
} }
@ -4917,6 +4957,7 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
if (s_save_state_selector_slots.empty()) if (s_save_state_selector_slots.empty())
{ {
CloseSaveStateSelector(); CloseSaveStateSelector();
ReturnToMainWindow();
closed = true; closed = true;
} }
else else
@ -5015,17 +5056,13 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
if (pressed) if (pressed)
{ {
if (is_loading) if (is_loading)
{
DoLoadState(entry.path); DoLoadState(entry.path);
CloseSaveStateSelector();
break;
}
else else
{
Host::RunOnCPUThread([slot = entry.slot]() { VMManager::SaveStateToSlot(slot); }); Host::RunOnCPUThread([slot = entry.slot]() { VMManager::SaveStateToSlot(slot); });
CloseSaveStateSelector();
break; CloseSaveStateSelector();
} ReturnToMainWindow();
break;
} }
if (hovered && if (hovered &&
@ -5060,7 +5097,10 @@ void FullscreenUI::DrawSaveStateSelector(bool is_loading)
ImGui::PopStyleVar(5); ImGui::PopStyleVar(5);
if (!close_handled && WantsToCloseMenu()) if (!close_handled && WantsToCloseMenu())
{
CloseSaveStateSelector(); CloseSaveStateSelector();
ReturnToPreviousWindow();
}
} }
bool FullscreenUI::OpenLoadStateSelectorForGameResume(const GameList::Entry* entry) bool FullscreenUI::OpenLoadStateSelectorForGameResume(const GameList::Entry* entry)
@ -5295,7 +5335,7 @@ void FullscreenUI::DrawGameListWindow()
} }
if (NavButton(ICON_FA_BACKWARD, true, true)) if (NavButton(ICON_FA_BACKWARD, true, true))
ReturnToMainWindow(); ReturnToPreviousWindow();
NavTitle(titles[static_cast<u32>(s_game_list_page)]); NavTitle(titles[static_cast<u32>(s_game_list_page)]);
RightAlignNavButtons(count, ITEM_WIDTH, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY); RightAlignNavButtons(count, ITEM_WIDTH, LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY);
@ -5341,7 +5381,7 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size)
if (WantsToCloseMenu()) if (WantsToCloseMenu())
{ {
if (ImGui::IsWindowFocused()) if (ImGui::IsWindowFocused())
ReturnToMainWindow(); ReturnToPreviousWindow();
} }
const GameList::Entry* selected_entry = nullptr; const GameList::Entry* selected_entry = nullptr;
@ -5534,7 +5574,7 @@ void FullscreenUI::DrawGameGrid(const ImVec2& heading_size)
if (WantsToCloseMenu()) if (WantsToCloseMenu())
{ {
if (ImGui::IsWindowFocused()) if (ImGui::IsWindowFocused())
ReturnToMainWindow(); ReturnToPreviousWindow();
} }
ResetFocusHere(); ResetFocusHere();
@ -5701,7 +5741,7 @@ void FullscreenUI::DrawGameListSettingsPage(const ImVec2& heading_size)
if (WantsToCloseMenu()) if (WantsToCloseMenu())
{ {
if (ImGui::IsWindowFocused()) if (ImGui::IsWindowFocused())
ReturnToMainWindow(); ReturnToPreviousWindow();
} }
auto lock = Host::GetSettingsLock(); auto lock = Host::GetSettingsLock();
@ -6342,10 +6382,10 @@ void FullscreenUI::DrawAchievementsWindow()
const u32 current_points = Achievements::GetCurrentPointsForGame(); const u32 current_points = Achievements::GetCurrentPointsForGame();
const u32 total_points = Achievements::GetMaximumPointsForGame(); const u32 total_points = Achievements::GetMaximumPointsForGame();
if (FloatingButton(ICON_FA_WINDOW_CLOSE, 10.0f, 10.0f, -1.0f, -1.0f, 1.0f, 0.0f, true, g_large_font) || WantsToCloseMenu()) if (FloatingButton(ICON_FA_WINDOW_CLOSE, 10.0f, 10.0f, -1.0f, -1.0f, 1.0f, 0.0f, true, g_large_font))
{
ReturnToMainWindow(); ReturnToMainWindow();
} if (WantsToCloseMenu())
ReturnToPreviousWindow();
const ImRect title_bb(ImVec2(left, top), ImVec2(right, top + g_large_font->FontSize)); const ImRect title_bb(ImVec2(left, top), ImVec2(right, top + g_large_font->FontSize));
text = Achievements::GetGameTitle(); text = Achievements::GetGameTitle();
@ -6735,10 +6775,10 @@ void FullscreenUI::DrawLeaderboardsWindow()
if (!is_leaderboard_open) if (!is_leaderboard_open)
{ {
if (FloatingButton(ICON_FA_WINDOW_CLOSE, 10.0f, 10.0f, -1.0f, -1.0f, 1.0f, 0.0f, true, g_large_font) || WantsToCloseMenu()) if (FloatingButton(ICON_FA_WINDOW_CLOSE, 10.0f, 10.0f, -1.0f, -1.0f, 1.0f, 0.0f, true, g_large_font))
{
ReturnToMainWindow(); ReturnToMainWindow();
} if (WantsToCloseMenu())
ReturnToPreviousWindow();
} }
else else
{ {