mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-27 16:29:02 +08:00
Tables: Fixed auto-width columns when using synced-instances of same table. (#7218)
This commit is contained in:
parent
25a492f330
commit
d3c3514a59
@ -60,6 +60,8 @@ Other changes:
|
|||||||
- Windows: BeginChild(): Resizing logic for child windows evaluates whether per-axis clamping
|
- Windows: BeginChild(): Resizing logic for child windows evaluates whether per-axis clamping
|
||||||
should be applied based on parent scrollbars, not child scrollbars. (#7440, #1710) [@cfillion]
|
should be applied based on parent scrollbars, not child scrollbars. (#7440, #1710) [@cfillion]
|
||||||
Adjust those resizing limits to match window padding rather than inner clipping rectangle.
|
Adjust those resizing limits to match window padding rather than inner clipping rectangle.
|
||||||
|
- Tables: Fixed auto-width columns when using synced-instances of same table, width of
|
||||||
|
one instance would bleed into next one instead of sharing their widths. (#7218)
|
||||||
- Tables: Angled headers: fixed border hit box extending beyond when used within
|
- Tables: Angled headers: fixed border hit box extending beyond when used within
|
||||||
non-scrollable tables. (#7416) [@cfillion]
|
non-scrollable tables. (#7416) [@cfillion]
|
||||||
- Tables: Angled headers: fixed borders not moving back up after TableAngleHeadersRow()
|
- Tables: Angled headers: fixed borders not moving back up after TableAngleHeadersRow()
|
||||||
|
@ -5478,6 +5478,7 @@ static void ShowDemoWindowTables()
|
|||||||
HelpMarker("Multiple tables with the same identifier will share their settings, width, visibility, order etc.");
|
HelpMarker("Multiple tables with the same identifier will share their settings, width, visibility, order etc.");
|
||||||
|
|
||||||
static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Borders | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoSavedSettings;
|
static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Borders | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoSavedSettings;
|
||||||
|
ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags, ImGuiTableFlags_Resizable);
|
||||||
ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", &flags, ImGuiTableFlags_ScrollY);
|
ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", &flags, ImGuiTableFlags_ScrollY);
|
||||||
ImGui::CheckboxFlags("ImGuiTableFlags_SizingFixedFit", &flags, ImGuiTableFlags_SizingFixedFit);
|
ImGui::CheckboxFlags("ImGuiTableFlags_SizingFixedFit", &flags, ImGuiTableFlags_SizingFixedFit);
|
||||||
ImGui::CheckboxFlags("ImGuiTableFlags_HighlightHoveredColumn", &flags, ImGuiTableFlags_HighlightHoveredColumn);
|
ImGui::CheckboxFlags("ImGuiTableFlags_HighlightHoveredColumn", &flags, ImGuiTableFlags_HighlightHoveredColumn);
|
||||||
|
@ -1068,6 +1068,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
|
|||||||
// - ClipRect.Max.x: using WorkMaxX instead of MaxX (aka including padding) makes things more consistent when resizing down, tho slightly detrimental to visibility in very-small column.
|
// - ClipRect.Max.x: using WorkMaxX instead of MaxX (aka including padding) makes things more consistent when resizing down, tho slightly detrimental to visibility in very-small column.
|
||||||
// - ClipRect.Max.x: using MaxX makes it easier for header to receive hover highlight with no discontinuity and display sorting arrow.
|
// - ClipRect.Max.x: using MaxX makes it easier for header to receive hover highlight with no discontinuity and display sorting arrow.
|
||||||
// - FIXME-TABLE: We want equal width columns to have equal (ClipRect.Max.x - WorkMinX) width, which means ClipRect.max.x cannot stray off host_clip_rect.Max.x else right-most column may appear shorter.
|
// - FIXME-TABLE: We want equal width columns to have equal (ClipRect.Max.x - WorkMinX) width, which means ClipRect.max.x cannot stray off host_clip_rect.Max.x else right-most column may appear shorter.
|
||||||
|
const float previous_instance_work_min_x = column->WorkMinX;
|
||||||
column->WorkMinX = column->MinX + table->CellPaddingX + table->CellSpacingX1;
|
column->WorkMinX = column->MinX + table->CellPaddingX + table->CellSpacingX1;
|
||||||
column->WorkMaxX = column->MaxX - table->CellPaddingX - table->CellSpacingX2; // Expected max
|
column->WorkMaxX = column->MaxX - table->CellPaddingX - table->CellSpacingX2; // Expected max
|
||||||
column->ItemWidth = ImTrunc(column->WidthGiven * 0.65f);
|
column->ItemWidth = ImTrunc(column->WidthGiven * 0.65f);
|
||||||
@ -1120,8 +1121,22 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
|
|||||||
// column->WorkMinX = ImLerp(column->WorkMinX, ImMax(column->StartX, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f);
|
// column->WorkMinX = ImLerp(column->WorkMinX, ImMax(column->StartX, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f);
|
||||||
|
|
||||||
// Reset content width variables
|
// Reset content width variables
|
||||||
column->ContentMaxXFrozen = column->ContentMaxXUnfrozen = column->WorkMinX;
|
if (table->InstanceCurrent == 0)
|
||||||
column->ContentMaxXHeadersUsed = column->ContentMaxXHeadersIdeal = column->WorkMinX;
|
{
|
||||||
|
column->ContentMaxXFrozen = column->WorkMinX;
|
||||||
|
column->ContentMaxXUnfrozen = column->WorkMinX;
|
||||||
|
column->ContentMaxXHeadersUsed = column->WorkMinX;
|
||||||
|
column->ContentMaxXHeadersIdeal = column->WorkMinX;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// As we store an absolute value to make per-cell updates faster, we need to offset values used for width computation.
|
||||||
|
const float offset_from_previous_instance = column->WorkMinX - previous_instance_work_min_x;
|
||||||
|
column->ContentMaxXFrozen += offset_from_previous_instance;
|
||||||
|
column->ContentMaxXUnfrozen += offset_from_previous_instance;
|
||||||
|
column->ContentMaxXHeadersUsed += offset_from_previous_instance;
|
||||||
|
column->ContentMaxXHeadersIdeal += offset_from_previous_instance;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't decrement auto-fit counters until container window got a chance to submit its items
|
// Don't decrement auto-fit counters until container window got a chance to submit its items
|
||||||
if (table->HostSkipItems == false)
|
if (table->HostSkipItems == false)
|
||||||
|
Loading…
Reference in New Issue
Block a user