Pārlūkot izejas kodu

Tables, MultiSelect: Fixed an issue where column width may be mismeasured when calling BeginMultiSelect() while inside a table. (#8250)

ocornut 8 mēneši atpakaļ
vecāks
revīzija
fd93229770
3 mainītis faili ar 9 papildinājumiem un 1 dzēšanām
  1. 2 0
      docs/CHANGELOG.txt
  2. 1 1
      imgui.h
  3. 6 0
      imgui_widgets.cpp

+ 2 - 0
docs/CHANGELOG.txt

@@ -49,6 +49,8 @@ Other changes:
   value is being modified. (#8242)
 - InputText: Added sanity check to detect some cases of passing a non
   zero-terminated input buffer.
+- Tables, MultiSelect: Fixed an issue where column width may be mismeasured
+  when calling BeginMultiSelect() while inside a table. (#8250)
 - Drags: Added ImGuiSliderFlags_NoSpeedTweaks flag to disable keyboard
   modifiers altering the tweak speed. Useful if you want to alter tweak speed
   yourself based on your own logic. (#8223)

+ 1 - 1
imgui.h

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

+ 6 - 0
imgui_widgets.cpp

@@ -7518,6 +7518,12 @@ ImGuiMultiSelectIO* ImGui::BeginMultiSelect(ImGuiMultiSelectFlags flags, int sel
     if (flags & ImGuiMultiSelectFlags_BoxSelect2d)
         flags &= ~ImGuiMultiSelectFlags_BoxSelect1d;
 
+    // FIXME: Workaround to the fact we override CursorMaxPos, meaning size measurement are lost. (#8250)
+    // They should perhaps be stacked properly?
+    if (ImGuiTable* table = g.CurrentTable)
+        if (table->CurrentColumn != -1)
+            TableEndCell(table); // This is currently safe to call multiple time. If that properly is lost we can extract the "save measurement" part of it.
+
     // FIXME: BeginFocusScope()
     const ImGuiID id = window->IDStack.back();
     ms->Clear();