|
@@ -888,6 +888,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
|
|
|
sum_width_requests += table->CellPaddingX * 2.0f;
|
|
|
}
|
|
|
table->ColumnsEnabledFixedCount = (ImGuiTableColumnIdx)count_fixed;
|
|
|
+ table->ColumnsStretchSumWeights = stretch_sum_weights;
|
|
|
|
|
|
// [Part 4] Apply final widths based on requested widths
|
|
|
const ImRect work_rect = table->WorkRect;
|
|
@@ -1284,17 +1285,23 @@ void ImGui::EndTable()
|
|
|
splitter->Merge(inner_window->DrawList);
|
|
|
|
|
|
// Update ColumnsAutoFitWidth to get us ahead for host using our size to auto-resize without waiting for next BeginTable()
|
|
|
- const float width_spacings = (table->OuterPaddingX * 2.0f) + (table->CellSpacingX1 + table->CellSpacingX2) * (table->ColumnsEnabledCount - 1);
|
|
|
- table->ColumnsAutoFitWidth = width_spacings + (table->CellPaddingX * 2.0f) * table->ColumnsEnabledCount;
|
|
|
+ float auto_fit_width_for_fixed = 0.0f;
|
|
|
+ float auto_fit_width_for_stretched = 0.0f;
|
|
|
+ float auto_fit_width_for_stretched_min = 0.0f;
|
|
|
for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
|
|
|
if (table->EnabledMaskByIndex & ((ImU64)1 << column_n))
|
|
|
{
|
|
|
ImGuiTableColumn* column = &table->Columns[column_n];
|
|
|
- if ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && !(column->Flags & ImGuiTableColumnFlags_NoResize))
|
|
|
- table->ColumnsAutoFitWidth += column->WidthRequest;
|
|
|
+ float column_width_request = ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && !(column->Flags & ImGuiTableColumnFlags_NoResize)) ? column->WidthRequest : TableGetColumnWidthAuto(table, column);
|
|
|
+ if (column->Flags & ImGuiTableColumnFlags_WidthFixed)
|
|
|
+ auto_fit_width_for_fixed += column_width_request;
|
|
|
else
|
|
|
- table->ColumnsAutoFitWidth += TableGetColumnWidthAuto(table, column);
|
|
|
+ auto_fit_width_for_stretched += column_width_request;
|
|
|
+ if ((column->Flags & ImGuiTableColumnFlags_WidthStretch) && (column->Flags & ImGuiTableColumnFlags_NoResize) != 0)
|
|
|
+ auto_fit_width_for_stretched_min = ImMax(auto_fit_width_for_stretched_min, column_width_request / (column->StretchWeight / table->ColumnsStretchSumWeights));
|
|
|
}
|
|
|
+ const float width_spacings = (table->OuterPaddingX * 2.0f) + (table->CellSpacingX1 + table->CellSpacingX2) * (table->ColumnsEnabledCount - 1);
|
|
|
+ table->ColumnsAutoFitWidth = width_spacings + (table->CellPaddingX * 2.0f) * table->ColumnsEnabledCount + auto_fit_width_for_fixed + ImMax(auto_fit_width_for_stretched, auto_fit_width_for_stretched_min);
|
|
|
|
|
|
// Update scroll
|
|
|
if ((table->Flags & ImGuiTableFlags_ScrollX) == 0 && inner_window != outer_window)
|