|  |  | @ -392,7 +392,7 @@ bool    ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
 |  |  |  |     table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->FreezeRowsRequest = table->FreezeRowsCount = 0; // This will be setup by TableSetupScrollFreeze(), if any
 |  |  |  |     table->FreezeRowsRequest = table->FreezeRowsCount = 0; // This will be setup by TableSetupScrollFreeze(), if any
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->FreezeColumnsRequest = table->FreezeColumnsCount = 0; |  |  |  |     table->FreezeColumnsRequest = table->FreezeColumnsCount = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->IsUnfrozen = true; |  |  |  |     table->IsUnfrozenRows = true; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     table->DeclColumnsCount = 0; |  |  |  |     table->DeclColumnsCount = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // Using opaque colors facilitate overlapping elements of the grid
 |  |  |  |     // Using opaque colors facilitate overlapping elements of the grid
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -868,6 +868,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) | 
			
		
	
		
		
			
				
					
					|  |  |  |     // [Part 7] Setup final position, offset, skip/clip states and clipping rectangles, detect hovered column
 |  |  |  |     // [Part 7] Setup final position, offset, skip/clip states and clipping rectangles, detect hovered column
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // Process columns in their visible orders as we are comparing the visible order and adjusting host_clip_rect while looping.
 |  |  |  |     // Process columns in their visible orders as we are comparing the visible order and adjusting host_clip_rect while looping.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     int visible_n = 0; |  |  |  |     int visible_n = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     bool offset_x_frozen = (table->FreezeColumnsCount > 0); | 
			
		
	
		
		
			
				
					
					|  |  |  |     float offset_x = ((table->FreezeColumnsCount > 0) ? table->OuterRect.Min.x : work_rect.Min.x) + table->OuterPaddingX - table->CellSpacingX1; |  |  |  |     float offset_x = ((table->FreezeColumnsCount > 0) ? table->OuterRect.Min.x : work_rect.Min.x) + table->OuterPaddingX - table->CellSpacingX1; | 
			
		
	
		
		
			
				
					
					|  |  |  |     ImRect host_clip_rect = table->InnerClipRect; |  |  |  |     ImRect host_clip_rect = table->InnerClipRect; | 
			
		
	
		
		
			
				
					
					|  |  |  |     //host_clip_rect.Max.x += table->CellPaddingX + table->CellSpacingX2;
 |  |  |  |     //host_clip_rect.Max.x += table->CellPaddingX + table->CellSpacingX2;
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -880,8 +881,11 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         column->NavLayerCurrent = (ImS8)((table->FreezeRowsCount > 0 || column_n < table->FreezeColumnsCount) ? ImGuiNavLayer_Menu : ImGuiNavLayer_Main); |  |  |  |         column->NavLayerCurrent = (ImS8)((table->FreezeRowsCount > 0 || column_n < table->FreezeColumnsCount) ? ImGuiNavLayer_Menu : ImGuiNavLayer_Main); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (table->FreezeColumnsCount > 0 && table->FreezeColumnsCount == visible_n) |  |  |  |         if (offset_x_frozen && table->FreezeColumnsCount == visible_n) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |             offset_x += work_rect.Min.x - table->OuterRect.Min.x; |  |  |  |             offset_x += work_rect.Min.x - table->OuterRect.Min.x; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             offset_x_frozen = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // Clear status flags
 |  |  |  |         // Clear status flags
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         column->Flags &= ~ImGuiTableColumnFlags_StatusMask_; |  |  |  |         column->Flags &= ~ImGuiTableColumnFlags_StatusMask_; | 
			
		
	
	
		
		
			
				
					|  |  | @ -1084,6 +1088,10 @@ void ImGui::TableUpdateBorders(ImGuiTable* table) | 
			
		
	
		
		
			
				
					
					|  |  |  |         if ((table->Flags & ImGuiTableFlags_NoBordersInBody) && table->IsUsingHeaders == false) |  |  |  |         if ((table->Flags & ImGuiTableFlags_NoBordersInBody) && table->IsUsingHeaders == false) | 
			
		
	
		
		
			
				
					
					|  |  |  |             continue; |  |  |  |             continue; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (table->FreezeColumnsCount > 0) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if (column->MaxX < table->Columns[table->DisplayOrderToIndex[table->FreezeColumnsCount - 1]].MaxX) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 continue; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         ImGuiID column_id = TableGetColumnResizeID(table, column_n, table->InstanceCurrent); |  |  |  |         ImGuiID column_id = TableGetColumnResizeID(table, column_n, table->InstanceCurrent); | 
			
		
	
		
		
			
				
					
					|  |  |  |         ImRect hit_rect(column->MaxX - hit_half_width, hit_y1, column->MaxX + hit_half_width, border_y2_hit); |  |  |  |         ImRect hit_rect(column->MaxX - hit_half_width, hit_y1, column->MaxX + hit_half_width, border_y2_hit); | 
			
		
	
		
		
			
				
					
					|  |  |  |         //GetForegroundDrawList()->AddRect(hit_rect.Min, hit_rect.Max, IM_COL32(255, 0, 0, 100));
 |  |  |  |         //GetForegroundDrawList()->AddRect(hit_rect.Min, hit_rect.Max, IM_COL32(255, 0, 0, 100));
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -1353,7 +1361,7 @@ void ImGui::TableSetupScrollFreeze(int columns, int rows) | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->FreezeColumnsCount = (table->InnerWindow->Scroll.x != 0.0f) ? table->FreezeColumnsRequest : 0; |  |  |  |     table->FreezeColumnsCount = (table->InnerWindow->Scroll.x != 0.0f) ? table->FreezeColumnsRequest : 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->FreezeRowsRequest = (table->Flags & ImGuiTableFlags_ScrollY) ? (ImGuiTableColumnIdx)rows : 0; |  |  |  |     table->FreezeRowsRequest = (table->Flags & ImGuiTableFlags_ScrollY) ? (ImGuiTableColumnIdx)rows : 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->FreezeRowsCount = (table->InnerWindow->Scroll.y != 0.0f) ? table->FreezeRowsRequest : 0; |  |  |  |     table->FreezeRowsCount = (table->InnerWindow->Scroll.y != 0.0f) ? table->FreezeRowsRequest : 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->IsUnfrozen = (table->FreezeRowsCount == 0); // Make sure this is set before TableUpdateLayout() so ImGuiListClipper can benefit from it.b
 |  |  |  |     table->IsUnfrozenRows = (table->FreezeRowsCount == 0); // Make sure this is set before TableUpdateLayout() so ImGuiListClipper can benefit from it.b
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | int ImGui::TableGetColumnCount() |  |  |  | int ImGui::TableGetColumnCount() | 
			
		
	
	
		
		
			
				
					|  |  | @ -1653,8 +1661,8 @@ void ImGui::TableEndRow(ImGuiTable* table) | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (unfreeze_rows_actual) |  |  |  |     if (unfreeze_rows_actual) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         IM_ASSERT(table->IsUnfrozen == false); |  |  |  |         IM_ASSERT(table->IsUnfrozenRows == false); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         table->IsUnfrozen = true; |  |  |  |         table->IsUnfrozenRows = true; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         // BgClipRect starts as table->InnerClipRect, reduce it now and make BgClipRectForDrawCmd == BgClipRect
 |  |  |  |         // BgClipRect starts as table->InnerClipRect, reduce it now and make BgClipRectForDrawCmd == BgClipRect
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         float y0 = ImMax(table->RowPosY2 + 1, window->InnerClipRect.Min.y); |  |  |  |         float y0 = ImMax(table->RowPosY2 + 1, window->InnerClipRect.Min.y); | 
			
		
	
	
		
		
			
				
					|  |  | @ -1812,7 +1820,7 @@ void ImGui::TableEndCell(ImGuiTable* table) | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (table->RowFlags & ImGuiTableRowFlags_Headers) |  |  |  |     if (table->RowFlags & ImGuiTableRowFlags_Headers) | 
			
		
	
		
		
			
				
					
					|  |  |  |         p_max_pos_x = &column->ContentMaxXHeadersUsed;  // Useful in case user submit contents in header row that is not a TableHeader() call
 |  |  |  |         p_max_pos_x = &column->ContentMaxXHeadersUsed;  // Useful in case user submit contents in header row that is not a TableHeader() call
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     else |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |         p_max_pos_x = table->IsUnfrozen ? &column->ContentMaxXUnfrozen : &column->ContentMaxXFrozen; |  |  |  |         p_max_pos_x = table->IsUnfrozenRows ? &column->ContentMaxXUnfrozen : &column->ContentMaxXFrozen; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     *p_max_pos_x = ImMax(*p_max_pos_x, window->DC.CursorMaxPos.x); |  |  |  |     *p_max_pos_x = ImMax(*p_max_pos_x, window->DC.CursorMaxPos.x); | 
			
		
	
		
		
			
				
					
					|  |  |  |     table->RowPosY2 = ImMax(table->RowPosY2, window->DC.CursorMaxPos.y + table->CellPaddingY); |  |  |  |     table->RowPosY2 = ImMax(table->RowPosY2, window->DC.CursorMaxPos.y + table->CellPaddingY); | 
			
		
	
		
		
			
				
					
					|  |  |  |     column->ItemWidth = window->DC.ItemWidth; |  |  |  |     column->ItemWidth = window->DC.ItemWidth; | 
			
		
	
	
		
		
			
				
					|  |  | @ -3332,15 +3340,15 @@ void ImGui::DebugNodeTable(ImGuiTable* table) | 
			
		
	
		
		
			
				
					
					|  |  |  |         ImGuiTableColumn* column = &table->Columns[n]; |  |  |  |         ImGuiTableColumn* column = &table->Columns[n]; | 
			
		
	
		
		
			
				
					
					|  |  |  |         const char* name = TableGetColumnName(table, n); |  |  |  |         const char* name = TableGetColumnName(table, n); | 
			
		
	
		
		
			
				
					
					|  |  |  |         ImFormatString(buf, IM_ARRAYSIZE(buf), |  |  |  |         ImFormatString(buf, IM_ARRAYSIZE(buf), | 
			
		
	
		
		
			
				
					
					|  |  |  |             "Column %d order %d name '%s': offset %+.2f to %+.2f\n" |  |  |  |             "Column %d order %d '%s': offset %+.2f to %+.2f%s\n" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             "Enabled: %d, VisibleX/Y: %d/%d, RequestOutput: %d, SkipItems: %d, DrawChannels: %d,%d\n" |  |  |  |             "Enabled: %d, VisibleX/Y: %d/%d, RequestOutput: %d, SkipItems: %d, DrawChannels: %d,%d\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |             "WidthGiven: %.1f, Request/Auto: %.1f/%.1f, StretchWeight: %.3f (%.1f%%)\n" |  |  |  |             "WidthGiven: %.1f, Request/Auto: %.1f/%.1f, StretchWeight: %.3f (%.1f%%)\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |             "MinX: %.1f, MaxX: %.1f (%+.1f), ClipRect: %.1f to %.1f (+%.1f)\n" |  |  |  |             "MinX: %.1f, MaxX: %.1f (%+.1f), ClipRect: %.1f to %.1f (+%.1f)\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |             "ContentWidth: %.1f,%.1f, HeadersUsed/Ideal %.1f/%.1f\n" |  |  |  |             "ContentWidth: %.1f,%.1f, HeadersUsed/Ideal %.1f/%.1f\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |             "Sort: %d%s, UserID: 0x%08X, Flags: 0x%04X: %s%s%s%s..", |  |  |  |             "Sort: %d%s, UserID: 0x%08X, Flags: 0x%04X: %s%s%s%s..", | 
			
		
	
		
		
			
				
					
					|  |  |  |             n, column->DisplayOrder, name, column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x, |  |  |  |             n, column->DisplayOrder, name, column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x, (n < table->FreezeColumnsRequest) ? " (Frozen)" : "", | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             column->IsEnabled, column->IsVisibleX, column->IsVisibleY, column->IsRequestOutput, column->IsSkipItems, column->DrawChannelFrozen, column->DrawChannelUnfrozen, |  |  |  |             column->IsEnabled, column->IsVisibleX, column->IsVisibleY, column->IsRequestOutput, column->IsSkipItems, column->DrawChannelFrozen, column->DrawChannelUnfrozen, | 
			
		
	
		
		
			
				
					
					|  |  |  |             column->WidthGiven, column->WidthRequest, column->WidthAuto, column->StretchWeight, (column->StretchWeight / sum_weights) * 100.0f, |  |  |  |             column->WidthGiven, column->WidthRequest, column->WidthAuto, column->StretchWeight, column->StretchWeight > 0.0f ? (column->StretchWeight / sum_weights) * 100.0f : 0.0f, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             column->MinX, column->MaxX, column->MaxX - column->MinX, column->ClipRect.Min.x, column->ClipRect.Max.x, column->ClipRect.Max.x - column->ClipRect.Min.x, |  |  |  |             column->MinX, column->MaxX, column->MaxX - column->MinX, column->ClipRect.Min.x, column->ClipRect.Max.x, column->ClipRect.Max.x - column->ClipRect.Min.x, | 
			
		
	
		
		
			
				
					
					|  |  |  |             column->ContentMaxXFrozen - column->WorkMinX, column->ContentMaxXUnfrozen - column->WorkMinX, column->ContentMaxXHeadersUsed - column->WorkMinX, column->ContentMaxXHeadersIdeal - column->WorkMinX, |  |  |  |             column->ContentMaxXFrozen - column->WorkMinX, column->ContentMaxXUnfrozen - column->WorkMinX, column->ContentMaxXHeadersUsed - column->WorkMinX, column->ContentMaxXHeadersIdeal - column->WorkMinX, | 
			
		
	
		
		
			
				
					
					|  |  |  |             column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? " (Asc)" : (column->SortDirection == ImGuiSortDirection_Descending) ? " (Des)" : "", column->UserID, column->Flags, |  |  |  |             column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? " (Asc)" : (column->SortDirection == ImGuiSortDirection_Descending) ? " (Des)" : "", column->UserID, column->Flags, | 
			
		
	
	
		
		
			
				
					|  |  | 
 |