From d46b181084f6abe3f31fa00740164ca8cf40751f Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Thu, 25 Apr 2024 12:57:34 +0200 Subject: [PATCH] ui: fix cosmetic issues Limit Filter fields width to what's available. Issue #1488 Avoid bouncing loop when scrollbar appearance and responsive boxart size work against each other. Issue #1489 --- core/rend/gui.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/rend/gui.cpp b/core/rend/gui.cpp index 93b480256..542f62f93 100644 --- a/core/rend/gui.cpp +++ b/core/rend/gui.cpp @@ -2869,7 +2869,8 @@ static void gui_display_content() static ImGuiTextFilter filter; #if !defined(__ANDROID__) && !defined(TARGET_IPHONE) && !defined(TARGET_UWP) && !defined(__SWITCH__) ImGui::SameLine(0, 32 * settings.display.uiScale); - filter.Draw("Filter"); + filter.Draw("Filter", ImGui::GetContentRegionAvail().x - ImGui::GetStyle().ItemSpacing.x - 32 * settings.display.uiScale + - ImGui::CalcTextSize("Settings").x - ImGui::GetStyle().FramePadding.x * 2.0f - ImGui::GetStyle().ItemSpacing.x); #endif if (gui_state != GuiState::SelectDisk) { @@ -2899,8 +2900,9 @@ static void gui_display_content() // Only if Filter and Settings aren't focused... ImGui::SetNextWindowFocus(); ImGui::BeginChild(ImGui::GetID("library"), ImVec2(0, 0), ImGuiChildFlags_Border, ImGuiWindowFlags_DragScrolling | ImGuiWindowFlags_NavFlattened); { - const int itemsPerLine = std::max(ImGui::GetContentRegionMax().x / (150 * settings.display.uiScale + ImGui::GetStyle().ItemSpacing.x), 1); - const float responsiveBoxSize = ImGui::GetContentRegionMax().x / itemsPerLine - ImGui::GetStyle().FramePadding.x * 2; + const float totalWidth = ImGui::GetContentRegionMax().x - (!ImGui::GetCurrentWindow()->ScrollbarY ? ImGui::GetStyle().ScrollbarSize : 0); + const int itemsPerLine = std::max(totalWidth / (150 * settings.display.uiScale + ImGui::GetStyle().ItemSpacing.x), 1); + const float responsiveBoxSize = totalWidth / itemsPerLine - ImGui::GetStyle().FramePadding.x * 2; const ImVec2 responsiveBoxVec2 = ImVec2(responsiveBoxSize, responsiveBoxSize); if (config::BoxartDisplayMode)