Tables: fixed calculation of multi-instance shared decoration/scrollbar width of scrolling tables. (#5920, #6619)

Avoid width variation when resizing down a table hosting a child window.
+ shallow tweak to GetContentRegionMax().
This commit is contained in:
ocornut 2023-07-20 10:31:39 +02:00
parent e5977f05d8
commit 2bc5d17ac3
4 changed files with 9 additions and 5 deletions

View File

@ -64,6 +64,9 @@ Other changes:
- InputText: Fixed a case where deactivation frame would write to underlying - InputText: Fixed a case where deactivation frame would write to underlying
buffer or call CallbackResize although unnecessary, in a frame where the buffer or call CallbackResize although unnecessary, in a frame where the
return value was false. return value was false.
- Tables: fixed calculation of multi-instance shared decoration/scrollbar width of
scrolling tables, to avoid flickering width variation when resizing down a table
hosting a child window. (#5920, #6619)
- Scrollbar: layout needs to take account of window border size, so a border size - Scrollbar: layout needs to take account of window border size, so a border size
will slightly reduce scrollbar size. Generally we tried to make it that window will slightly reduce scrollbar size. Generally we tried to make it that window
border size has no incidence on layout but this can't work with thick borders. (#2522) border size has no incidence on layout but this can't work with thick borders. (#2522)

View File

@ -6738,6 +6738,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
// [LEGACY] Content Region // [LEGACY] Content Region
// FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it. // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
// Unless explicit content size is specified by user, this currently represent the region leading to no scrolling.
// Used by: // Used by:
// - Mouse wheel scrolling + many other things // - Mouse wheel scrolling + many other things
window->ContentRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x + window->DecoOuterSizeX1; window->ContentRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x + window->DecoOuterSizeX1;
@ -9773,10 +9774,10 @@ ImVec2 ImGui::GetContentRegionMax()
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow; ImGuiWindow* window = g.CurrentWindow;
ImVec2 mx = window->ContentRegionRect.Max - window->Pos; ImVec2 mx = window->ContentRegionRect.Max;
if (window->DC.CurrentColumns || g.CurrentTable) if (window->DC.CurrentColumns || g.CurrentTable)
mx.x = window->WorkRect.Max.x - window->Pos.x; mx.x = window->WorkRect.Max.x;
return mx; return mx - window->Pos;
} }
// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features. // [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.

View File

@ -26,7 +26,7 @@
// Library Version // Library Version
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345') // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
#define IMGUI_VERSION "1.89.8 WIP" #define IMGUI_VERSION "1.89.8 WIP"
#define IMGUI_VERSION_NUM 18973 #define IMGUI_VERSION_NUM 18974
#define IMGUI_HAS_TABLE #define IMGUI_HAS_TABLE
/* /*

View File

@ -410,7 +410,7 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
table->HasScrollbarYPrev = table->HasScrollbarYCurr; table->HasScrollbarYPrev = table->HasScrollbarYCurr;
table->HasScrollbarYCurr = false; table->HasScrollbarYCurr = false;
} }
table->HasScrollbarYCurr |= (table->InnerWindow->ScrollMax.y > 0.0f); table->HasScrollbarYCurr |= table->InnerWindow->ScrollbarY;
} }
else else
{ {