From 43c0ce0b3e367ac9f9f649bbd4141685c31477ae Mon Sep 17 00:00:00 2001 From: Stenzek <stenzek@gmail.com> Date: Sun, 26 Nov 2023 20:47:38 +1000 Subject: [PATCH] FullscreenUI: Put bindings on one line --- src/core/fullscreen_ui.cpp | 52 +++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/src/core/fullscreen_ui.cpp b/src/core/fullscreen_ui.cpp index 361b79c9b..981b74578 100644 --- a/src/core/fullscreen_ui.cpp +++ b/src/core/fullscreen_ui.cpp @@ -1352,17 +1352,18 @@ void FullscreenUI::DrawInputBindingButton(SettingsInterface* bsi, InputBindingIn TinyString title; title.fmt("{}/{}", section, name); + std::string value = bsi->GetStringValue(section, name); + const bool oneline = (std::count_if(value.begin(), value.end(), [](char ch) { return (ch == '&'); }) <= 1); + ImRect bb; bool visible, hovered, clicked; - clicked = - MenuButtonFrame(title, true, ImGuiFullscreen::LAYOUT_MENU_BUTTON_HEIGHT, &visible, &hovered, &bb.Min, &bb.Max); + clicked = MenuButtonFrame(title, true, + oneline ? ImGuiFullscreen::LAYOUT_MENU_BUTTON_HEIGHT_NO_SUMMARY : + ImGuiFullscreen::LAYOUT_MENU_BUTTON_HEIGHT, + &visible, &hovered, &bb.Min, &bb.Max); if (!visible) return; - const float midpoint = bb.Min.y + g_large_font->FontSize + LayoutScale(4.0f); - const ImRect title_bb(bb.Min, ImVec2(bb.Max.x, midpoint)); - const ImRect summary_bb(ImVec2(bb.Min.x, midpoint), bb.Max); - if (show_type) { if (icon_name) @@ -1393,16 +1394,37 @@ void FullscreenUI::DrawInputBindingButton(SettingsInterface* bsi, InputBindingIn } } - ImGui::PushFont(g_large_font); - ImGui::RenderTextClipped(title_bb.Min, title_bb.Max, show_type ? title.c_str() : display_name, nullptr, nullptr, - ImVec2(0.0f, 0.0f), &title_bb); - ImGui::PopFont(); + const float midpoint = bb.Min.y + g_large_font->FontSize + LayoutScale(4.0f); - const std::string value(bsi->GetStringValue(section, name)); - ImGui::PushFont(g_medium_font); - ImGui::RenderTextClipped(summary_bb.Min, summary_bb.Max, value.empty() ? FSUI_CSTR("No Binding") : value.c_str(), - nullptr, nullptr, ImVec2(0.0f, 0.0f), &summary_bb); - ImGui::PopFont(); + if (oneline) + { + ImGui::PushFont(g_large_font); + + const ImVec2 value_size(ImGui::CalcTextSize(value.empty() ? FSUI_CSTR("-") : value.c_str(), nullptr)); + const float text_end = bb.Max.x - value_size.x; + const ImRect title_bb(bb.Min, ImVec2(text_end, midpoint)); + + ImGui::RenderTextClipped(title_bb.Min, title_bb.Max, show_type ? title.c_str() : display_name, nullptr, nullptr, + ImVec2(0.0f, 0.0f), &title_bb); + ImGui::RenderTextClipped(bb.Min, bb.Max, value.empty() ? FSUI_CSTR("-") : value.c_str(), nullptr, + &value_size, ImVec2(1.0f, 0.5f), &bb); + ImGui::PopFont(); + } + else + { + const ImRect title_bb(bb.Min, ImVec2(bb.Max.x, midpoint)); + const ImRect summary_bb(ImVec2(bb.Min.x, midpoint), bb.Max); + + ImGui::PushFont(g_large_font); + ImGui::RenderTextClipped(title_bb.Min, title_bb.Max, show_type ? title.c_str() : display_name, nullptr, nullptr, + ImVec2(0.0f, 0.0f), &title_bb); + ImGui::PopFont(); + + ImGui::PushFont(g_medium_font); + ImGui::RenderTextClipped(summary_bb.Min, summary_bb.Max, value.empty() ? FSUI_CSTR("No Binding") : value.c_str(), + nullptr, nullptr, ImVec2(0.0f, 0.0f), &summary_bb); + ImGui::PopFont(); + } if (clicked) {