Tables: Additionally commentary about clipper in the demo + minor padding tweak.

This commit is contained in:
ocornut
2020-11-03 18:47:05 +01:00
parent 94d99f9d0b
commit fe6131168a
4 changed files with 28 additions and 18 deletions

View File

@ -1098,7 +1098,7 @@ static void ShowDemoWindowWidgets()
ImGui::TableNextColumn();
ImGui::Selectable(label, &selected[i]); // FIXME-TABLE: Selection overlap
}
ImGui::EndTable();
ImGui::EndTable();
}
ImGui::Separator();
if (ImGui::BeginTable("split2", 3, ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings))
@ -3755,7 +3755,7 @@ static void ShowDemoWindowTables()
if (open_action != -1)
ImGui::SetNextItemOpen(open_action != 0);
if (ImGui::TreeNode("Vertical scrolling"))
if (ImGui::TreeNode("Vertical scrolling, with clipping"))
{
HelpMarker("Here we activate ScrollY, which will create a child window container to allow hosting scrollable contents.\n\nWe also demonstrate using ImGuiListClipper to virtualize the submission of many items.");
static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
@ -3774,6 +3774,8 @@ static void ShowDemoWindowTables()
ImGui::TableSetupColumn("Two", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("Three", ImGuiTableColumnFlags_None);
ImGui::TableHeadersRow();
// Demonstrate using clipper for large vertical lists
ImGuiListClipper clipper;
clipper.Begin(1000);
while (clipper.Step())
@ -4393,6 +4395,7 @@ static void ShowDemoWindowTables()
ImGui::TableSetupColumn("Action", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Action);
ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, -1.0f, MyItemColumnID_Quantity);
ImGui::TableSetupScrollFreeze(0, 1); // Make row always visible
ImGui::TableHeadersRow();
// Sort our data if sort specs have been changed!
if (ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
@ -4405,13 +4408,13 @@ static void ShowDemoWindowTables()
sorts_specs->SpecsDirty = false;
}
// Display data
ImGui::TableHeadersRow();
// Demonstrate using clipper for large vertical lists
ImGuiListClipper clipper;
clipper.Begin(items.Size);
while (clipper.Step())
for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
{
// Display a data item
MyItem* item = &items[row_n];
ImGui::PushID(item->ID);
ImGui::TableNextRow();
@ -4448,7 +4451,7 @@ static void ShowDemoWindowTables()
static int freeze_cols = 1;
static int freeze_rows = 1;
static int items_count = IM_ARRAYSIZE(template_items_names);
static ImVec2 outer_size_value = ImVec2(0, TEXT_BASE_HEIGHT * 15);
static ImVec2 outer_size_value = ImVec2(0, TEXT_BASE_HEIGHT * 12);
static float row_min_height = 0.0f; // Auto
static float inner_width_with_scroll = 0.0f; // Auto-extend
static bool outer_size_enabled = true;
@ -4609,14 +4612,16 @@ static void ShowDemoWindowTables()
// FIXME-TABLE FIXME-NAV: How we can get decent up/down even though we have the buttons here?
ImGui::PushButtonRepeat(true);
#if 1
// Demonstrate using clipper for large vertical lists
ImGuiListClipper clipper;
clipper.Begin(items.Size);
while (clipper.Step())
{
for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
#else
// Without clipper
{
for (int row_n = 0; row_n < items_count; row_n++)
for (int row_n = 0; row_n < items.Size; row_n++)
#endif
{
MyItem* item = &items[row_n];
@ -4691,6 +4696,7 @@ static void ShowDemoWindowTables()
}
ImGui::PopButtonRepeat();
// Store some info to display debug details below
table_scroll_cur = ImVec2(ImGui::GetScrollX(), ImGui::GetScrollY());
table_scroll_max = ImVec2(ImGui::GetScrollMaxX(), ImGui::GetScrollMaxY());
table_draw_list = ImGui::GetWindowDrawList();
@ -4703,7 +4709,8 @@ static void ShowDemoWindowTables()
ImGui::SameLine(0.0f, 0.0f);
const int table_draw_list_draw_cmd_count = table_draw_list->CmdBuffer.Size;
if (table_draw_list == parent_draw_list)
ImGui::Text(": DrawCmd: +%d (in same window)", table_draw_list_draw_cmd_count - parent_draw_list_draw_cmd_count);
ImGui::Text(": DrawCmd: +%d (in same window)",
table_draw_list_draw_cmd_count - parent_draw_list_draw_cmd_count);
else
ImGui::Text(": DrawCmd: +%d (in child window), Scroll: (%.f/%.f) (%.f/%.f)",
table_draw_list_draw_cmd_count - 1, table_scroll_cur.x, table_scroll_max.x, table_scroll_cur.y, table_scroll_max.y);
@ -4860,8 +4867,10 @@ static void ShowDemoWindowColumns()
ImVec2 child_size = ImVec2(0, ImGui::GetFontSize() * 20.0f);
ImGui::BeginChild("##ScrollingRegion", child_size, false, ImGuiWindowFlags_HorizontalScrollbar);
ImGui::Columns(10);
// Also demonstrate using clipper for large vertical lists
int ITEMS_COUNT = 2000;
ImGuiListClipper clipper; // Also demonstrate using the clipper for large list
ImGuiListClipper clipper;
clipper.Begin(ITEMS_COUNT);
while (clipper.Step())
{