mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Tables: Internals: Renaming, tweaks preparing ahead for trickier changes (should be all no-op).
This commit is contained in:
		| @@ -335,7 +335,7 @@ bool    ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG | ||||
|     table->ColumnsCount = columns_count; | ||||
|     table->IsLayoutLocked = false; | ||||
|     table->InnerWidth = inner_width; | ||||
|     table->IsOuterRectAutoFitX = (outer_size.x == 0.0f) && (use_child_window == false); | ||||
|     table->IsOuterRectMinFitX = (outer_size.x == 0.0f) && (use_child_window == false); // Will be set to false later if there are any Stretch column. | ||||
|  | ||||
|     // When not using a child window, WorkRect.Max will grow as we append contents. | ||||
|     if (use_child_window) | ||||
| @@ -1032,8 +1032,8 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) | ||||
|     // This is done late to handle the case of fixed-columns tables not claiming more widths that they need. | ||||
|     // Because of this we are careful with uses of WorkRect and InnerClipRect before this point. | ||||
|     if (table->RightMostStretchedColumn != -1) | ||||
|         table->IsOuterRectAutoFitX = false; | ||||
|     if (table->IsOuterRectAutoFitX) | ||||
|         table->IsOuterRectMinFitX = false; | ||||
|     if (table->IsOuterRectMinFitX) | ||||
|     { | ||||
|         table->OuterRect.Max.x = table->WorkRect.Max.x = unused_x1; | ||||
|         table->InnerClipRect.Max.x = ImMin(table->InnerClipRect.Max.x, unused_x1); | ||||
| @@ -1181,7 +1181,6 @@ void    ImGui::EndTable() | ||||
|  | ||||
|     if (inner_window != outer_window) | ||||
|     { | ||||
|         // Both OuterRect/InnerRect are valid from BeginTable | ||||
|         inner_window->DC.CursorMaxPos.y = table->RowPosY2; | ||||
|     } | ||||
|     else if (!(flags & ImGuiTableFlags_NoHostExtendY)) | ||||
| @@ -1258,9 +1257,8 @@ void    ImGui::EndTable() | ||||
|     PopID(); | ||||
|  | ||||
|     // Restore window data that we modified | ||||
|     const float backup_outer_cursor_pos_x = outer_window->DC.CursorPos.x; | ||||
|     const float backup_outer_max_pos_x = outer_window->DC.CursorMaxPos.x; | ||||
|     const float backup_inner_max_pos_x = inner_window->DC.CursorMaxPos.x; | ||||
|     const ImVec2 backup_outer_max_pos = outer_window->DC.CursorMaxPos; | ||||
|     const ImVec2 backup_inner_max_pos = inner_window->DC.CursorMaxPos; | ||||
|     inner_window->WorkRect = table->HostBackupWorkRect; | ||||
|     inner_window->ParentWorkRect = table->HostBackupParentWorkRect; | ||||
|     inner_window->SkipItems = table->HostSkipItems; | ||||
| @@ -1272,7 +1270,7 @@ void    ImGui::EndTable() | ||||
|     // Layout in outer window | ||||
|     // (FIXME: To allow auto-fit and allow desirable effect of SameLine() we dissociate 'used' vs 'ideal' size by overriding | ||||
|     // CursorPosPrevLine and CursorMaxPos manually. That should be a more general layout feature, see same problem e.g. #3414) | ||||
|     const float outer_width = table->IsOuterRectAutoFitX ? table->WorkRect.GetWidth() : table->ColumnsAutoFitWidth; | ||||
|     const float outer_width = table->IsOuterRectMinFitX ? table->WorkRect.GetWidth() : table->ColumnsAutoFitWidth; | ||||
|     const float outer_height = table->OuterRect.GetHeight(); | ||||
|     if (inner_window != outer_window) | ||||
|     { | ||||
| @@ -1284,21 +1282,21 @@ void    ImGui::EndTable() | ||||
|         outer_window->DC.CursorPosPrevLine.x = table->OuterRect.Max.x; | ||||
|     } | ||||
|  | ||||
|     // Override EndChild/ItemSize max extent with our own to enable auto-resize on the X axis when possible | ||||
|     // Override declared contents width to enable auto-resize on the X axis when possible. | ||||
|     // FIXME-TABLE: This can be improved (e.g. for Fixed columns we don't want to auto AutoFitWidth? or propagate window auto-fit to table?) | ||||
|     if (table->Flags & ImGuiTableFlags_ScrollX) | ||||
|     { | ||||
|         float max_pos_x = backup_inner_max_pos_x; | ||||
|         float max_pos_x = backup_inner_max_pos.x; | ||||
|         if (table->RightMostEnabledColumn != -1) | ||||
|             max_pos_x = ImMax(max_pos_x, table->Columns[table->RightMostEnabledColumn].MaxX); | ||||
|         if (table->ResizedColumn != -1) | ||||
|             max_pos_x = ImMax(max_pos_x, table->ResizeLockMinContentsX2); | ||||
|         inner_window->DC.CursorMaxPos.x = max_pos_x; // For inner scrolling | ||||
|         outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos_x, backup_outer_cursor_pos_x + table->ColumnsGivenWidth + inner_window->ScrollbarSizes.x); // For outer scrolling | ||||
|         outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos.x, table->OuterRect.Min.x + table->ColumnsGivenWidth + inner_window->ScrollbarSizes.x); // For outer scrolling | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos_x, table->WorkRect.Min.x + outer_width); // For auto-fit | ||||
|         outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos.x, table->WorkRect.Min.x + outer_width); // For auto-fit | ||||
|     } | ||||
|  | ||||
|     // Save settings | ||||
| @@ -2373,7 +2371,7 @@ void ImGui::TableDrawBorders(ImGuiTable* table) | ||||
|             if (column->MaxX > table->InnerClipRect.Max.x && !is_resized) | ||||
|                 continue; | ||||
|             if (column->NextEnabledColumn == -1 && !is_resizable) | ||||
|                 if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || table->IsOuterRectAutoFitX) | ||||
|                 if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || table->IsOuterRectMinFitX) | ||||
|                     continue; | ||||
|             if (column->MaxX <= column->ClipRect.Min.x) // FIXME-TABLE FIXME-STYLE: Assume BorderSize==1, this is problematic if we want to increase the border size.. | ||||
|                 continue; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user