Browse Source

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().
ocornut 2 years ago
parent
commit
2bc5d17ac3
4 changed files with 9 additions and 5 deletions
  1. 3 0
      docs/CHANGELOG.txt
  2. 4 3
      imgui.cpp
  3. 1 1
      imgui.h
  4. 1 1
      imgui_tables.cpp

+ 3 - 0
docs/CHANGELOG.txt

@@ -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)

+ 4 - 3
imgui.cpp

@@ -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;
-    return mx;
+        mx.x = window->WorkRect.Max.x;
+    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.

+ 1 - 1
imgui.h

@@ -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
 
 
 /*
 /*

+ 1 - 1
imgui_tables.cpp

@@ -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
     {
     {