|
|
|
@ -607,6 +607,8 @@ struct ALIGN_TO_CACHE_LINE UIState
|
|
|
|
std::unordered_map<std::string, std::string> icon_image_map;
|
|
|
|
std::unordered_map<std::string, std::string> icon_image_map;
|
|
|
|
std::vector<const GameList::Entry*> game_list_sorted_entries;
|
|
|
|
std::vector<const GameList::Entry*> game_list_sorted_entries;
|
|
|
|
GameListView game_list_view = GameListView::Grid;
|
|
|
|
GameListView game_list_view = GameListView::Grid;
|
|
|
|
|
|
|
|
std::string game_list_current_selection_path;
|
|
|
|
|
|
|
|
float game_list_current_selection_timeout = 0.0f;
|
|
|
|
bool game_list_show_trophy_icons = true;
|
|
|
|
bool game_list_show_trophy_icons = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
@ -7973,6 +7975,39 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size)
|
|
|
|
SetWindowNavWrapping(false, true);
|
|
|
|
SetWindowNavWrapping(false, true);
|
|
|
|
EndFullscreenColumnWindow();
|
|
|
|
EndFullscreenColumnWindow();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// avoid clearing the selection for a couple of seconds when the mouse goes inbetween items
|
|
|
|
|
|
|
|
static constexpr float ITEM_TIMEOUT = 1.0f;
|
|
|
|
|
|
|
|
if (!selected_entry)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!s_state.game_list_current_selection_path.empty())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// reset countdown if a dialog was open
|
|
|
|
|
|
|
|
if (AreAnyDialogsOpen())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_timeout = ITEM_TIMEOUT;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_timeout -= ImGui::GetIO().DeltaTime;
|
|
|
|
|
|
|
|
if (s_state.game_list_current_selection_timeout <= 0.0f)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_timeout = 0.0f;
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_path.clear();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!s_state.game_list_current_selection_path.empty())
|
|
|
|
|
|
|
|
selected_entry = GameList::GetEntryForPath(s_state.game_list_current_selection_path);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// reset countdown on new or current item
|
|
|
|
|
|
|
|
if (s_state.game_list_current_selection_path != selected_entry->path)
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_path = selected_entry->path;
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_timeout = ITEM_TIMEOUT;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr float info_window_width = 530.0f;
|
|
|
|
static constexpr float info_window_width = 530.0f;
|
|
|
|
if (BeginFullscreenColumnWindow(-info_window_width, 0.0f, "game_list_info",
|
|
|
|
if (BeginFullscreenColumnWindow(-info_window_width, 0.0f, "game_list_info",
|
|
|
|
ModAlpha(UIStyle.PrimaryDarkColor, GetBackgroundAlpha())))
|
|
|
|
ModAlpha(UIStyle.PrimaryDarkColor, GetBackgroundAlpha())))
|
|
|
|
@ -8594,6 +8629,8 @@ void FullscreenUI::SwitchToGameList()
|
|
|
|
s_state.game_list_view =
|
|
|
|
s_state.game_list_view =
|
|
|
|
static_cast<GameListView>(Host::GetBaseIntSettingValue("Main", "DefaultFullscreenUIGameView", 0));
|
|
|
|
static_cast<GameListView>(Host::GetBaseIntSettingValue("Main", "DefaultFullscreenUIGameView", 0));
|
|
|
|
s_state.game_list_show_trophy_icons = Host::GetBaseBoolSettingValue("Main", "FullscreenUIShowTrophyIcons", true);
|
|
|
|
s_state.game_list_show_trophy_icons = Host::GetBaseBoolSettingValue("Main", "FullscreenUIShowTrophyIcons", true);
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_path = {};
|
|
|
|
|
|
|
|
s_state.game_list_current_selection_timeout = 0.0f;
|
|
|
|
|
|
|
|
|
|
|
|
// Wipe icon map, because a new save might give us an icon.
|
|
|
|
// Wipe icon map, because a new save might give us an icon.
|
|
|
|
for (const auto& it : s_state.icon_image_map)
|
|
|
|
for (const auto& it : s_state.icon_image_map)
|
|
|
|
|