Skip to content

When using MultiSelect with BoxSelect in a Table with ScrollY and BordersOuter, items sometimes get skipped #7970

Closed
@bratpilz

Description

Version/Branch of Dear ImGui:

Version 1.91.2 WIP, Branch: master

Back-ends:

imgui_impl_glfw.cpp + imgui_impl_opengl3.cpp

Compiler, OS:

Linux + GCC

Full config/build information:

Dear ImGui 1.91.2 WIP (19112)
--------------------------------
sizeof(size_t): 8, sizeof(ImDrawIdx): 2, sizeof(ImDrawVert): 20
define: __cplusplus=201103
define: __linux__
define: __GNUC__=12
--------------------------------
io.BackendPlatformName: imgui_impl_glfw
io.BackendRendererName: imgui_impl_opengl3
io.ConfigFlags: 0x00000003
 NavEnableKeyboard
 NavEnableGamepad
io.ConfigInputTextCursorBlink
io.ConfigWindowsResizeFromEdges
io.ConfigMemoryCompactTimer = 60.0
io.BackendFlags: 0x0000000E
 HasMouseCursors
 HasSetMousePos
 RendererHasVtxOffset
--------------------------------
io.Fonts: 1 fonts, Flags: 0x00000000, TexSize: 512,64
io.DisplaySize: 1280.00,720.00
io.DisplayFramebufferScale: 1.00,1.00
--------------------------------
style.WindowPadding: 8.00,8.00
style.WindowBorderSize: 1.00
style.FramePadding: 4.00,3.00
style.FrameRounding: 0.00
style.FrameBorderSize: 0.00
style.ItemSpacing: 8.00,4.00
style.ItemInnerSpacing: 4.00,4.00

Details:

My Issue/Question:

Hello! As described in the title, I've noticed that MultiSelect_BoxSelect1d sometimes skips items when the Table has the ScrollY and BordersOuter flags set. The BordersInner flag seems to have no effect either way, probably because it doesn't change the layout of the table like the BordersOuter flag does.

Screenshots/Video:

multi-select-borders-outer-issue.mp4

Minimal, Complete and Verifiable Example code:

// Here's some code anyone can copy and paste to reproduce your issue
	  using namespace ImGui;
	  SetNextWindowSize (ImVec2 (400.0f, 300.0f), ImGuiCond_Appearing);
	  Begin ("Test");
	  static int flags = ImGuiTableFlags_ScrollY;
	  CheckboxFlags ("BordersOuter", &flags, ImGuiTableFlags_BordersOuter);
	  SameLine();
	  CheckboxFlags ("BordersInner", &flags, ImGuiTableFlags_BordersInner);
	  if (BeginTable ("Table", 1, flags))
	    {
	      static ImGuiSelectionBasicStorage selection;
	      static unsigned const N = 1000;
	      auto ms = BeginMultiSelect (ImGuiMultiSelectFlags_BoxSelect1d, selection.Size, N);
	      selection.ApplyRequests (ms);
	      for (unsigned i = 0; i < N; ++i)
		{
		  char buf[32];
		  snprintf (buf, sizeof buf, "Item %03d", i);
		  SetNextItemSelectionUserData (i);
		  TableNextColumn();
		  Selectable (buf, selection.Contains (i));
		}
	      ms = EndMultiSelect();
	      selection.ApplyRequests (ms);
	      EndTable();
	    }
	  End();

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions