From e16564e67a2e88d4cbe3afa6594650712790fba3 Mon Sep 17 00:00:00 2001 From: omar Date: Mon, 1 Jul 2019 20:57:15 +0200 Subject: [PATCH] Scrollbar: Avoid overlapping the opposite side when window (often a child window) is forcibly too small. --- docs/CHANGELOG.txt | 1 + imgui_demo.cpp | 4 ++-- imgui_widgets.cpp | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 3eaed626..d8e96b4c 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -43,6 +43,7 @@ Breaking Changes: Other Changes: - Window: Fixed InnerClipRect right-most coordinates using wrong padding setting (introduced in 1.71). +- Scrollbar: Avoid overlapping the opposite side when window (often a child window) is forcibly too small. - Word-wrapping: Fixed overzealous word-wrapping when glyph edge lands exactly on the limit. Because of this, auto-fitting exactly unwrapped text would make it wrap. (fixes initial 1.15 commit, 78645a7d). - Scrolling: Added SetScrollHereX(), SetScrollFromPosX() for completeness. (#1580) [@kevreco] diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 8d9337a5..a8d72f2e 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -2079,8 +2079,8 @@ static void ShowDemoWindowLayout() ImGuiStyle& style = ImGui::GetStyle(); float child_w = (ImGui::GetContentRegionAvail().x - 4 * style.ItemSpacing.x) / 5; - if (child_w < 20.0f) - child_w = 20.0f; + if (child_w < 1.0f) + child_w = 1.0f; ImGui::PushID("##VerticalScrolling"); for (int i = 0; i < 5; i++) { diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index a5959c23..8af935c5 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -895,13 +895,13 @@ void ImGui::Scrollbar(ImGuiAxis axis) ImRect bb; if (axis == ImGuiAxis_X) { - bb.Min = ImVec2(inner_rect.Min.x, outer_rect.Max.y - border_size - scrollbar_size); + bb.Min = ImVec2(inner_rect.Min.x, ImMax(outer_rect.Min.y, outer_rect.Max.y - border_size - scrollbar_size)); bb.Max = ImVec2(inner_rect.Max.x, outer_rect.Max.y); rounding_corners |= ImDrawCornerFlags_BotLeft; } else { - bb.Min = ImVec2(outer_rect.Max.x - border_size - scrollbar_size, inner_rect.Min.y); + bb.Min = ImVec2(ImMax(outer_rect.Min.x, outer_rect.Max.x - border_size - scrollbar_size), inner_rect.Min.y); bb.Max = ImVec2(outer_rect.Max.x, window->InnerRect.Max.y); rounding_corners |= ((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0; }