SaveStateSelectorUI: Scale save state selector to LayoutScale

And some minor visual polish.
pull/3576/head
Stenzek 2 months ago
parent 073335c09b
commit 1ac7fc258a
No known key found for this signature in database

@ -1089,7 +1089,7 @@ void SaveStateSelectorUI::RefreshHotkeyLegend()
{
auto format_legend_entry = [](SmallString binding, std::string_view caption) {
InputManager::PrettifyInputBinding(binding, &ImGuiFullscreen::GetControllerIconMapping);
return fmt::format("{} - {}", binding, caption);
return fmt::format("{} {}", binding, caption);
};
s_state.load_legend = format_legend_entry(Host::GetSmallStringSettingValue("Hotkeys", "LoadSelectedSaveState"),
@ -1189,25 +1189,27 @@ void SaveStateSelectorUI::InitializePlaceholderListEntry(ListEntry* li, const st
void SaveStateSelectorUI::Draw()
{
using ImGuiFullscreen::DarkerColor;
using ImGuiFullscreen::LayoutScale;
using ImGuiFullscreen::UIStyle;
static constexpr float SCROLL_ANIMATION_TIME = 0.25f;
static constexpr float BG_ANIMATION_TIME = 0.15f;
const auto& io = ImGui::GetIO();
const float scale = ImGuiManager::GetGlobalScale();
const float width = (640.0f * scale);
const float height = (450.0f * scale);
const float width = LayoutScale(640.0f);
const float height = LayoutScale(480.0f);
const float padding_and_rounding = 18.0f * scale;
const float padding_and_rounding = LayoutScale(18.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, padding_and_rounding);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(padding_and_rounding, padding_and_rounding));
ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize, LayoutScale(14.0f));
ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarRounding, LayoutScale(10.0f));
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, LayoutScale(8.0f, 4.0f));
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, LayoutScale(4.0f, 2.0f));
ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, UIStyle.PrimaryColor);
ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, UIStyle.BackgroundColor);
ImGui::PushStyleColor(ImGuiCol_WindowBg, DarkerColor(UIStyle.PopupBackgroundColor));
ImGui::PushStyleColor(ImGuiCol_Text, UIStyle.BackgroundTextColor);
ImGui::PushFont(ImGuiManager::GetTextFont(), ImGuiManager::GetOSDFontSize(), 0.0f);
ImGui::SetNextWindowSize(ImVec2(width, height), ImGuiCond_Always);
ImGui::SetNextWindowPos(ImVec2(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f), ImGuiCond_Always,
ImVec2(0.5f, 0.5f));
@ -1217,8 +1219,10 @@ void SaveStateSelectorUI::Draw()
ImGuiWindowFlags_NoScrollbar))
{
// Leave 2 lines for the legend
const float legend_margin = ImGui::GetFontSize() * 2.0f + ImGui::GetStyle().ItemSpacing.y * 3.0f;
const float padding = 12.0f * scale;
const ImGuiStyle& style = ImGui::GetStyle();
const float padding = LayoutScale(12.0f);
const float legend_margin =
UIStyle.MediumFontSize * 2.0f + padding + style.ItemSpacing.y * 2.0f + style.CellPadding.y * 2.0f;
ImGui::BeginChild("##item_list", ImVec2(0, -legend_margin), false,
ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar |
@ -1226,8 +1230,8 @@ void SaveStateSelectorUI::Draw()
{
const s32 current_slot = GetCurrentSlot();
const bool current_slot_global = IsCurrentSlotGlobal();
const ImVec2 image_size = ImVec2(128.0f * scale, (128.0f / (4.0f / 3.0f)) * scale);
const float item_width = std::floor(width - (padding_and_rounding * 2.0f) - ImGui::GetStyle().ScrollbarSize);
const ImVec2 image_size = LayoutScale(128.0f, (128.0f / (4.0f / 3.0f)));
const float item_width = std::floor(width - (padding_and_rounding * 2.0f) - style.ScrollbarSize);
const float item_height = std::floor(image_size.y + padding * 2.0f);
const float text_indent = image_size.x + padding + padding;
@ -1292,17 +1296,27 @@ void SaveStateSelectorUI::Draw()
ImGui::Indent(text_indent);
ImGui::PushFont(ImGuiManager::GetTextFont(), UIStyle.MediumLargeFontSize, UIStyle.BoldFontWeight);
ImGui::TextUnformatted(TinyString::from_format(entry.global ?
TRANSLATE_FS("SaveStateSelectorUI", "Global Slot {}") :
TRANSLATE_FS("SaveStateSelectorUI", "Game Slot {}"),
entry.slot)
.c_str());
ImGui::PopFont();
ImGui::PushFont(ImGuiManager::GetTextFont(), UIStyle.MediumFontSize, UIStyle.NormalFontWeight);
ImGui::PushStyleColor(ImGuiCol_Text, ImGuiFullscreen::DarkerColor(style.Colors[ImGuiCol_Text]));
if (entry.global)
ImGui::TextUnformatted(entry.game_details.c_str(), entry.game_details.c_str() + entry.game_details.length());
ImGui::TextUnformatted(entry.summary.c_str(), entry.summary.c_str() + entry.summary.length());
ImGui::PushFont(ImGuiManager::GetFixedFont(), 0.0f, 0.0f);
ImGui::TextUnformatted(entry.filename.data(), entry.filename.data() + entry.filename.length());
ImGui::TextUnformatted(IMSTR_START_END(entry.game_details));
ImGui::TextUnformatted(IMSTR_START_END(entry.summary));
ImGui::PushStyleColor(ImGuiCol_Text, ImGuiFullscreen::DarkerColor(style.Colors[ImGuiCol_Text]));
ImGui::TextUnformatted(IMSTR_START_END(entry.filename));
ImGui::PopFont();
ImGui::PopStyleColor(2);
ImGui::Unindent(text_indent);
ImGui::SetCursorPosY(y_start);
@ -1316,10 +1330,13 @@ void SaveStateSelectorUI::Draw()
}
ImGui::EndChild();
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + padding);
ImGui::BeginChild("##legend", ImVec2(0, 0), false,
ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoBackground);
{
ImGui::PushFont(ImGuiManager::GetTextFont(), UIStyle.MediumFontSize, UIStyle.BoldFontWeight);
ImGui::SetCursorPosX(padding);
if (ImGui::BeginTable("table", 2))
{
@ -1334,13 +1351,13 @@ void SaveStateSelectorUI::Draw()
ImGui::EndTable();
}
ImGui::PopFont();
}
ImGui::EndChild();
}
ImGui::End();
ImGui::PopFont();
ImGui::PopStyleVar(3);
ImGui::PopStyleVar(6);
ImGui::PopStyleColor(4);
// auto-close

Loading…
Cancel
Save