mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Tables: Fixed auto-width columns when using synced-instances of same table. (#7218)
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ocornut
					ocornut