mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Tables: Various internal renaming + merge StartXHeaders/StartXRows into StartX.
This commit is contained in:
		
							
								
								
									
										26
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -10501,8 +10501,8 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|     // Debugging enums |     // Debugging enums | ||||||
|     enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type |     enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type | ||||||
|     const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentRegionRect" }; |     const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentRegionRect" }; | ||||||
|     enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersIdeal, TRT_ColumnsContentRowsFrozen, TRT_ColumnsContentRowsUnfrozen, TRT_Count }; // Tables Rect Type |     enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersIdeal, TRT_ColumnsContentFrozen, TRT_ColumnsContentUnfrozen, TRT_Count }; // Tables Rect Type | ||||||
|     const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersIdeal", "ColumnsContentRowsFrozen", "ColumnsContentRowsUnfrozen" }; |     const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersIdeal", "ColumnsContentFrozen", "ColumnsContentUnfrozen" }; | ||||||
|     if (cfg->ShowWindowsRectsType < 0) |     if (cfg->ShowWindowsRectsType < 0) | ||||||
|         cfg->ShowWindowsRectsType = WRT_WorkRect; |         cfg->ShowWindowsRectsType = WRT_WorkRect; | ||||||
|     if (cfg->ShowTablesRectsType < 0) |     if (cfg->ShowTablesRectsType < 0) | ||||||
| @@ -10512,17 +10512,17 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|     { |     { | ||||||
|         static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n) |         static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n) | ||||||
|         { |         { | ||||||
|             if (rect_type == TRT_OuterRect)                 { return table->OuterRect; } |             if (rect_type == TRT_OuterRect)                     { return table->OuterRect; } | ||||||
|             else if (rect_type == TRT_WorkRect)             { return table->WorkRect; } |             else if (rect_type == TRT_WorkRect)                 { return table->WorkRect; } | ||||||
|             else if (rect_type == TRT_HostClipRect)         { return table->HostClipRect; } |             else if (rect_type == TRT_HostClipRect)             { return table->HostClipRect; } | ||||||
|             else if (rect_type == TRT_InnerClipRect)        { return table->InnerClipRect; } |             else if (rect_type == TRT_InnerClipRect)            { return table->InnerClipRect; } | ||||||
|             else if (rect_type == TRT_BackgroundClipRect)   { return table->BackgroundClipRect; } |             else if (rect_type == TRT_BackgroundClipRect)       { return table->BackgroundClipRect; } | ||||||
|             else if (rect_type == TRT_ColumnsRect)                  { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table->LastOuterHeight); } |             else if (rect_type == TRT_ColumnsRect)              { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table->LastOuterHeight); } | ||||||
|             else if (rect_type == TRT_ColumnsClipRect)              { ImGuiTableColumn* c = &table->Columns[n]; return c->ClipRect; } |             else if (rect_type == TRT_ColumnsClipRect)          { ImGuiTableColumn* c = &table->Columns[n]; return c->ClipRect; } | ||||||
|             else if (rect_type == TRT_ColumnsContentHeadersUsed)    { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersUsed, table->InnerClipRect.Min.y + table->LastFirstRowHeight); }    // Note: y1/y2 not always accurate |             else if (rect_type == TRT_ColumnsContentHeadersUsed){ ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersUsed, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } // Note: y1/y2 not always accurate | ||||||
|             else if (rect_type == TRT_ColumnsContentHeadersIdeal)   { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersIdeal, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } // " |             else if (rect_type == TRT_ColumnsContentHeadersIdeal){ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersIdeal, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } | ||||||
|             else if (rect_type == TRT_ColumnsContentRowsFrozen)     { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthRowsFrozen, table->InnerClipRect.Min.y + table->LastFirstRowHeight); }     // " |             else if (rect_type == TRT_ColumnsContentFrozen)     { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthFrozen, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } | ||||||
|             else if (rect_type == TRT_ColumnsContentRowsUnfrozen)   { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y + table->LastFirstRowHeight, c->MinX + c->ContentWidthRowsUnfrozen, table->InnerClipRect.Max.y); }   // " |             else if (rect_type == TRT_ColumnsContentUnfrozen)   { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y + table->LastFirstRowHeight, c->MinX + c->ContentWidthUnfrozen, table->InnerClipRect.Max.y); } | ||||||
|             IM_ASSERT(0); |             IM_ASSERT(0); | ||||||
|             return ImRect(); |             return ImRect(); | ||||||
|         } |         } | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -654,9 +654,9 @@ namespace ImGui | |||||||
|  |  | ||||||
|     // Tables |     // Tables | ||||||
|     // [ALPHA API] API may evolve! |     // [ALPHA API] API may evolve! | ||||||
|     // - Full-featured replacement for old Columns API |     // - Full-featured replacement for old Columns API. | ||||||
|     // - See Demo->Tables for details. |     // - See Demo->Tables for details. | ||||||
|     // - See ImGuiTableFlags_ and ImGuiTableColumnsFlags_ enums for a description of available flags. |     // - See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags. | ||||||
|     // The typical call flow is: |     // The typical call flow is: | ||||||
|     // - 1. Call BeginTable() |     // - 1. Call BeginTable() | ||||||
|     // - 2. Optionally call TableSetupColumn() to submit column name/flags/defaults |     // - 2. Optionally call TableSetupColumn() to submit column name/flags/defaults | ||||||
| @@ -684,7 +684,7 @@ namespace ImGui | |||||||
|     IMGUI_API bool          TableSetColumnIndex(int column_n);          // append into the specified column. Return true if column is visible. |     IMGUI_API bool          TableSetColumnIndex(int column_n);          // append into the specified column. Return true if column is visible. | ||||||
|     IMGUI_API int           TableGetColumnIndex();                      // return current column index. |     IMGUI_API int           TableGetColumnIndex();                      // return current column index. | ||||||
|     // Tables: Headers & Columns declaration |     // Tables: Headers & Columns declaration | ||||||
|     // - Use TableSetupColumn() to specify label, resizing policy, default width, id, various other flags etc. |     // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc. | ||||||
|     //   Important: this will not display anything! The name passed to TableSetupColumn() is used by TableHeadersRow() and context-menus. |     //   Important: this will not display anything! The name passed to TableSetupColumn() is used by TableHeadersRow() and context-menus. | ||||||
|     // - Use TableHeadersRow() to create a row and automatically submit a TableHeader() for each column. |     // - Use TableHeadersRow() to create a row and automatically submit a TableHeader() for each column. | ||||||
|     //   Headers are required to perform some interactions: reordering, sorting, context menu (FIXME-TABLE: context menu should work without!) |     //   Headers are required to perform some interactions: reordering, sorting, context menu (FIXME-TABLE: context menu should work without!) | ||||||
| @@ -1070,13 +1070,13 @@ enum ImGuiTableFlags_ | |||||||
|     ImGuiTableFlags_Borders                         = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter,   // Draw all borders. |     ImGuiTableFlags_Borders                         = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter,   // Draw all borders. | ||||||
|     ImGuiTableFlags_NoBordersInBody                 = 1 << 12,  // Disable vertical borders in columns Body (borders will always appears in Headers). |     ImGuiTableFlags_NoBordersInBody                 = 1 << 12,  // Disable vertical borders in columns Body (borders will always appears in Headers). | ||||||
|     ImGuiTableFlags_NoBordersInBodyUntilResize      = 1 << 13,  // Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). |     ImGuiTableFlags_NoBordersInBodyUntilResize      = 1 << 13,  // Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). | ||||||
|     // Sizing, Padding |     // Sizing | ||||||
|     ImGuiTableFlags_SizingPolicyFixedX              = 1 << 14,  // Default if ScrollX is on. Columns will default to use _WidthFixed or _WidthAlwaysAutoResize policy. Read description above for more details. |     ImGuiTableFlags_SizingPolicyFixedX              = 1 << 14,  // Default if ScrollX is on. Columns will default to use _WidthFixed or _WidthAlwaysAutoResize policy. Read description above for more details. | ||||||
|     ImGuiTableFlags_SizingPolicyStretchX            = 1 << 15,  // Default if ScrollX is off. Columns will default to use _WidthStretch policy. Read description above for more details. |     ImGuiTableFlags_SizingPolicyStretchX            = 1 << 15,  // Default if ScrollX is off. Columns will default to use _WidthStretch policy. Read description above for more details. | ||||||
|     ImGuiTableFlags_NoHeadersWidth                  = 1 << 16,  // Disable header width contribution to automatic width calculation. |     ImGuiTableFlags_NoHeadersWidth                  = 1 << 16,  // Disable header width contribution to automatic width calculation. | ||||||
|     ImGuiTableFlags_NoHostExtendY                   = 1 << 17,  // (FIXME-TABLE: Reword as SizingPolicy?) Disable extending past the limit set by outer_size.y, only meaningful when neither of ScrollX|ScrollY are set (data below the limit will be clipped and not visible) |     ImGuiTableFlags_NoHostExtendY                   = 1 << 17,  // (FIXME-TABLE: Reword as SizingPolicy?) Disable extending past the limit set by outer_size.y, only meaningful when neither of ScrollX|ScrollY are set (data below the limit will be clipped and not visible) | ||||||
|     ImGuiTableFlags_NoKeepColumnsVisible            = 1 << 18,  // (FIXME-TABLE) Disable code that keeps column always minimally visible when table width gets too small and horizontal scrolling is off. |     ImGuiTableFlags_NoKeepColumnsVisible            = 1 << 18,  // (FIXME-TABLE) Disable code that keeps column always minimally visible when table width gets too small and horizontal scrolling is off. | ||||||
|     ImGuiTableFlags_NoClip                          = 1 << 19,  // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with ScrollFreeze options. |     ImGuiTableFlags_NoClip                          = 1 << 19,  // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze(). | ||||||
|     // Scrolling |     // Scrolling | ||||||
|     ImGuiTableFlags_ScrollX                         = 1 << 20,  // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Because this create a child window, ScrollY is currently generally recommended when using ScrollX. |     ImGuiTableFlags_ScrollX                         = 1 << 20,  // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Because this create a child window, ScrollY is currently generally recommended when using ScrollX. | ||||||
|     ImGuiTableFlags_ScrollY                         = 1 << 21,  // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. |     ImGuiTableFlags_ScrollY                         = 1 << 21,  // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. | ||||||
|   | |||||||
| @@ -1901,15 +1901,14 @@ struct ImGuiTableColumn | |||||||
|     float                   WidthStretchWeight;             // Master width weight when (Flags & _WidthStretch). Often around ~1.0f initially. |     float                   WidthStretchWeight;             // Master width weight when (Flags & _WidthStretch). Often around ~1.0f initially. | ||||||
|     float                   WidthRequest;                   // Master width absolute value when !(Flags & _WidthStretch). When Stretch this is derived every frame from WidthStretchWeight in TableUpdateLayout() |     float                   WidthRequest;                   // Master width absolute value when !(Flags & _WidthStretch). When Stretch this is derived every frame from WidthStretchWeight in TableUpdateLayout() | ||||||
|     float                   WidthGiven;                     // Final/actual width visible == (MaxX - MinX), locked in TableUpdateLayout(). May be >WidthRequest to honor minimum width, may be <WidthRequest to honor shrinking columns down in tight space. |     float                   WidthGiven;                     // Final/actual width visible == (MaxX - MinX), locked in TableUpdateLayout(). May be >WidthRequest to honor minimum width, may be <WidthRequest to honor shrinking columns down in tight space. | ||||||
|     float                   StartXRows;                     // Start position for the frame, currently ~(MinX + CellPaddingX) |     float                   StartX;                         // Start position for the frame, currently ~(MinX + CellPaddingX) | ||||||
|     float                   StartXHeaders; |     float                   ContentMaxPosFrozen;            // Submitted contents absolute maximum position, from which we can infer width. Kept as float because we need to manipulate those between each cell change. | ||||||
|     float                   ContentMaxPosRowsFrozen;        // Submitted contents absolute maximum position, from which we can infer width. |     float                   ContentMaxPosUnfrozen; | ||||||
|     float                   ContentMaxPosRowsUnfrozen;      // (kept as float because we need to manipulate those between each cell change) |  | ||||||
|     float                   ContentMaxPosHeadersUsed; |     float                   ContentMaxPosHeadersUsed; | ||||||
|     float                   ContentMaxPosHeadersIdeal; |     float                   ContentMaxPosHeadersIdeal; | ||||||
|     ImS16                   ContentWidthRowsFrozen;         // Contents width. Because row freezing is not correlated with headers/not-headers we need all 4 variants (ImDrawCmd merging uses different data than alignment code). |     ImS16                   ContentWidthFrozen;             // Contents width for frozen rows (apart from headers). Encoded as ImS16 because we actually rarely use those width. | ||||||
|     ImS16                   ContentWidthRowsUnfrozen;       // (encoded as ImS16 because we actually rarely use those width) |     ImS16                   ContentWidthUnfrozen; | ||||||
|     ImS16                   ContentWidthHeadersUsed;        // TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls |     ImS16                   ContentWidthHeadersUsed;        // Contents width for headers rows (regardless of freezing). TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls | ||||||
|     ImS16                   ContentWidthHeadersIdeal; |     ImS16                   ContentWidthHeadersIdeal; | ||||||
|     ImS16                   NameOffset;                     // Offset into parent ColumnsNames[] |     ImS16                   NameOffset;                     // Offset into parent ColumnsNames[] | ||||||
|     bool                    IsVisible;                      // Is the column not marked Hidden by the user? (could be clipped by scrolling, etc). |     bool                    IsVisible;                      // Is the column not marked Hidden by the user? (could be clipped by scrolling, etc). | ||||||
| @@ -1920,8 +1919,8 @@ struct ImGuiTableColumn | |||||||
|     ImS8                    DisplayOrder;                   // Index within Table's IndexToDisplayOrder[] (column may be reordered by users) |     ImS8                    DisplayOrder;                   // Index within Table's IndexToDisplayOrder[] (column may be reordered by users) | ||||||
|     ImS8                    IndexWithinVisibleSet;          // Index within visible set (<= IndexToDisplayOrder) |     ImS8                    IndexWithinVisibleSet;          // Index within visible set (<= IndexToDisplayOrder) | ||||||
|     ImS8                    DrawChannelCurrent;             // Index within DrawSplitter.Channels[] |     ImS8                    DrawChannelCurrent;             // Index within DrawSplitter.Channels[] | ||||||
|     ImS8                    DrawChannelRowsBeforeFreeze; |     ImS8                    DrawChannelFrozen; | ||||||
|     ImS8                    DrawChannelRowsAfterFreeze; |     ImS8                    DrawChannelUnfrozen; | ||||||
|     ImS8                    PrevVisibleColumn;              // Index of prev visible column within Columns[], -1 if first visible column |     ImS8                    PrevVisibleColumn;              // Index of prev visible column within Columns[], -1 if first visible column | ||||||
|     ImS8                    NextVisibleColumn;              // Index of next visible column within Columns[], -1 if last visible column |     ImS8                    NextVisibleColumn;              // Index of next visible column within Columns[], -1 if last visible column | ||||||
|     ImS8                    AutoFitQueue;                   // Queue of 8 values for the next 8 frames to request auto-fit |     ImS8                    AutoFitQueue;                   // Queue of 8 values for the next 8 frames to request auto-fit | ||||||
| @@ -1936,7 +1935,7 @@ struct ImGuiTableColumn | |||||||
|         NameOffset = -1; |         NameOffset = -1; | ||||||
|         IsVisible = IsVisibleNextFrame = true; |         IsVisible = IsVisibleNextFrame = true; | ||||||
|         DisplayOrder = IndexWithinVisibleSet = -1; |         DisplayOrder = IndexWithinVisibleSet = -1; | ||||||
|         DrawChannelCurrent = DrawChannelRowsBeforeFreeze = DrawChannelRowsAfterFreeze = -1; |         DrawChannelCurrent = DrawChannelFrozen = DrawChannelUnfrozen = -1; | ||||||
|         PrevVisibleColumn = NextVisibleColumn = -1; |         PrevVisibleColumn = NextVisibleColumn = -1; | ||||||
|         AutoFitQueue = CannotSkipItemsQueue = (1 << 3) - 1; // Skip for three frames |         AutoFitQueue = CannotSkipItemsQueue = (1 << 3) - 1; // Skip for three frames | ||||||
|         SortOrder = -1; |         SortOrder = -1; | ||||||
| @@ -2286,7 +2285,7 @@ namespace ImGui | |||||||
|     IMGUI_API void          TableEndRow(ImGuiTable* table); |     IMGUI_API void          TableEndRow(ImGuiTable* table); | ||||||
|     IMGUI_API void          TableBeginCell(ImGuiTable* table, int column_n); |     IMGUI_API void          TableBeginCell(ImGuiTable* table, int column_n); | ||||||
|     IMGUI_API void          TableEndCell(ImGuiTable* table); |     IMGUI_API void          TableEndCell(ImGuiTable* table); | ||||||
|     IMGUI_API ImRect        TableGetCellRect(); |     IMGUI_API ImRect        TableGetCellBgRect(); | ||||||
|     IMGUI_API const char*   TableGetColumnName(const ImGuiTable* table, int column_n); |     IMGUI_API const char*   TableGetColumnName(const ImGuiTable* table, int column_n); | ||||||
|     IMGUI_API ImGuiID       TableGetColumnResizeID(const ImGuiTable* table, int column_n, int instance_no = 0); |     IMGUI_API ImGuiID       TableGetColumnResizeID(const ImGuiTable* table, int column_n, int instance_no = 0); | ||||||
|     IMGUI_API void          TableSetColumnAutofit(ImGuiTable* table, int column_n); |     IMGUI_API void          TableSetColumnAutofit(ImGuiTable* table, int column_n); | ||||||
|   | |||||||
| @@ -532,16 +532,16 @@ void ImGui::TableUpdateDrawChannels(ImGuiTable* table) | |||||||
|         ImGuiTableColumn* column = &table->Columns[column_n]; |         ImGuiTableColumn* column = &table->Columns[column_n]; | ||||||
|         if (!column->IsClipped) |         if (!column->IsClipped) | ||||||
|         { |         { | ||||||
|             column->DrawChannelRowsBeforeFreeze = (ImS8)(draw_channel_current); |             column->DrawChannelFrozen = (ImS8)(draw_channel_current); | ||||||
|             column->DrawChannelRowsAfterFreeze = (ImS8)(draw_channel_current + (table->FreezeRowsCount > 0 ? channels_for_row : 0)); |             column->DrawChannelUnfrozen = (ImS8)(draw_channel_current + (table->FreezeRowsCount > 0 ? channels_for_row : 0)); | ||||||
|             if (!(table->Flags & ImGuiTableFlags_NoClip)) |             if (!(table->Flags & ImGuiTableFlags_NoClip)) | ||||||
|                 draw_channel_current++; |                 draw_channel_current++; | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             column->DrawChannelRowsBeforeFreeze = column->DrawChannelRowsAfterFreeze = table->DummyDrawChannel; |             column->DrawChannelFrozen = column->DrawChannelUnfrozen = table->DummyDrawChannel; | ||||||
|         } |         } | ||||||
|         column->DrawChannelCurrent = column->DrawChannelRowsBeforeFreeze; |         column->DrawChannelCurrent = column->DrawChannelFrozen; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -639,7 +639,7 @@ void    ImGui::TableUpdateLayout(ImGuiTable* table) | |||||||
|  |  | ||||||
|         // Calculate "ideal" column width for nothing to be clipped. |         // Calculate "ideal" column width for nothing to be clipped. | ||||||
|         // Combine width from regular rows + width from headers unless requested not to. |         // Combine width from regular rows + width from headers unless requested not to. | ||||||
|         const float column_content_width_rows = (float)ImMax(column->ContentWidthRowsFrozen, column->ContentWidthRowsUnfrozen); |         const float column_content_width_rows = (float)ImMax(column->ContentWidthFrozen, column->ContentWidthUnfrozen); | ||||||
|         const float column_content_width_headers = (float)column->ContentWidthHeadersIdeal; |         const float column_content_width_headers = (float)column->ContentWidthHeadersIdeal; | ||||||
|         float column_width_ideal = column_content_width_rows; |         float column_width_ideal = column_content_width_rows; | ||||||
|         if (!(table->Flags & ImGuiTableFlags_NoHeadersWidth) && !(column->Flags & ImGuiTableColumnFlags_NoHeaderWidth)) |         if (!(table->Flags & ImGuiTableFlags_NoHeadersWidth) && !(column->Flags & ImGuiTableColumnFlags_NoHeaderWidth)) | ||||||
| @@ -801,7 +801,7 @@ void    ImGui::TableUpdateLayout(ImGuiTable* table) | |||||||
|             // Hidden column: clear a few fields and we are done with it for the remainder of the function. |             // Hidden column: clear a few fields and we are done with it for the remainder of the function. | ||||||
|             // We set a zero-width clip rect but set Min.y/Max.y properly to not interfere with the clipper. |             // We set a zero-width clip rect but set Min.y/Max.y properly to not interfere with the clipper. | ||||||
|             column->MinX = column->MaxX = offset_x; |             column->MinX = column->MaxX = offset_x; | ||||||
|             column->StartXRows = column->StartXHeaders = offset_x; |             column->StartX = offset_x; | ||||||
|             column->WidthGiven = 0.0f; |             column->WidthGiven = 0.0f; | ||||||
|             column->ClipRect.Min.x = offset_x; |             column->ClipRect.Min.x = offset_x; | ||||||
|             column->ClipRect.Min.y = work_rect.Min.y; |             column->ClipRect.Min.y = work_rect.Min.y; | ||||||
| @@ -851,20 +851,20 @@ void    ImGui::TableUpdateLayout(ImGuiTable* table) | |||||||
|             table->HoveredColumnBody = (ImS8)column_n; |             table->HoveredColumnBody = (ImS8)column_n; | ||||||
|  |  | ||||||
|         // Starting cursor position |         // Starting cursor position | ||||||
|         column->StartXRows = column->StartXHeaders = column->MinX + table->CellPaddingX1; |         column->StartX = column->MinX + table->CellPaddingX1; | ||||||
|  |  | ||||||
|         // Alignment |         // Alignment | ||||||
|         // FIXME-TABLE: This align based on the whole column width, not per-cell, and therefore isn't useful in |         // FIXME-TABLE: This align based on the whole column width, not per-cell, and therefore isn't useful in | ||||||
|         // many cases (to be able to honor this we might be able to store a log of cells width, per row, for |         // many cases (to be able to honor this we might be able to store a log of cells width, per row, for | ||||||
|         // visible rows, but nav/programmatic scroll would have visible artifacts.) |         // visible rows, but nav/programmatic scroll would have visible artifacts.) | ||||||
|         //if (column->Flags & ImGuiTableColumnFlags_AlignRight) |         //if (column->Flags & ImGuiTableColumnFlags_AlignRight) | ||||||
|         //    column->StartXRows = ImMax(column->StartXRows, column->MaxX - column->ContentWidthRowsUnfrozen); |         //    column->StartX = ImMax(column->StartX, column->MaxX - column->ContentWidthRowsUnfrozen); | ||||||
|         //else if (column->Flags & ImGuiTableColumnFlags_AlignCenter) |         //else if (column->Flags & ImGuiTableColumnFlags_AlignCenter) | ||||||
|         //    column->StartXRows = ImLerp(column->StartXRows, ImMax(column->StartXRows, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f); |         //    column->StartX = ImLerp(column->StartX, ImMax(column->StartX, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f); | ||||||
|  |  | ||||||
|         // Reset content width variables |         // Reset content width variables | ||||||
|         const float initial_max_pos_x = column->MinX + table->CellPaddingX1; |         const float initial_max_pos_x = column->MinX + table->CellPaddingX1; | ||||||
|         column->ContentMaxPosRowsFrozen = column->ContentMaxPosRowsUnfrozen = initial_max_pos_x; |         column->ContentMaxPosFrozen = column->ContentMaxPosUnfrozen = initial_max_pos_x; | ||||||
|         column->ContentMaxPosHeadersUsed = column->ContentMaxPosHeadersIdeal = initial_max_pos_x; |         column->ContentMaxPosHeadersUsed = column->ContentMaxPosHeadersIdeal = initial_max_pos_x; | ||||||
|  |  | ||||||
|         // 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 | ||||||
| @@ -1060,13 +1060,11 @@ void    ImGui::EndTable() | |||||||
|         ImGuiTableColumn* column = &table->Columns[column_n]; |         ImGuiTableColumn* column = &table->Columns[column_n]; | ||||||
|  |  | ||||||
|         // Store content width (for both Headers and Rows) |         // Store content width (for both Headers and Rows) | ||||||
|         //float ref_x = column->MinX; |         float ref_x = column->StartX - table->CellPaddingX1; | ||||||
|         float ref_x_rows = column->StartXRows - table->CellPaddingX1; |         column->ContentWidthFrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosFrozen - ref_x); | ||||||
|         float ref_x_headers = column->StartXHeaders - table->CellPaddingX1; |         column->ContentWidthUnfrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosUnfrozen - ref_x); | ||||||
|         column->ContentWidthRowsFrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosRowsFrozen - ref_x_rows); |         column->ContentWidthHeadersUsed = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersUsed - ref_x); | ||||||
|         column->ContentWidthRowsUnfrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosRowsUnfrozen - ref_x_rows); |         column->ContentWidthHeadersIdeal = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersIdeal - ref_x); | ||||||
|         column->ContentWidthHeadersUsed = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersUsed - ref_x_headers); |  | ||||||
|         column->ContentWidthHeadersIdeal = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersIdeal - ref_x_headers); |  | ||||||
|  |  | ||||||
|         // Add an extra 1 pixel so we can see the last column vertical line if it lies on the right-most edge. |         // Add an extra 1 pixel so we can see the last column vertical line if it lies on the right-most edge. | ||||||
|         if (table->VisibleMaskByIndex & ((ImU64)1 << column_n)) |         if (table->VisibleMaskByIndex & ((ImU64)1 << column_n)) | ||||||
| @@ -1410,7 +1408,7 @@ void    ImGui::TableReorderDrawChannelsForMerge(ImGuiTable* table) | |||||||
|         const int merge_group_sub_count = is_frozen_v ? 2 : 1; |         const int merge_group_sub_count = is_frozen_v ? 2 : 1; | ||||||
|         for (int merge_group_sub_n = 0; merge_group_sub_n < merge_group_sub_count; merge_group_sub_n++) |         for (int merge_group_sub_n = 0; merge_group_sub_n < merge_group_sub_count; merge_group_sub_n++) | ||||||
|         { |         { | ||||||
|             const int channel_no = (merge_group_sub_n == 0) ? column->DrawChannelRowsBeforeFreeze : column->DrawChannelRowsAfterFreeze; |             const int channel_no = (merge_group_sub_n == 0) ? column->DrawChannelFrozen : column->DrawChannelUnfrozen; | ||||||
|  |  | ||||||
|             // Don't attempt to merge if there are multiple draw calls within the column |             // Don't attempt to merge if there are multiple draw calls within the column | ||||||
|             ImDrawChannel* src_channel = &splitter->_Channels[channel_no]; |             ImDrawChannel* src_channel = &splitter->_Channels[channel_no]; | ||||||
| @@ -1425,11 +1423,11 @@ void    ImGui::TableReorderDrawChannelsForMerge(ImGuiTable* table) | |||||||
|             { |             { | ||||||
|                 float width_contents; |                 float width_contents; | ||||||
|                 if (merge_group_sub_count == 1)     // No row freeze (same as testing !is_frozen_v) |                 if (merge_group_sub_count == 1)     // No row freeze (same as testing !is_frozen_v) | ||||||
|                     width_contents = ImMax(column->ContentWidthRowsUnfrozen, column->ContentWidthHeadersUsed); |                     width_contents = ImMax(column->ContentWidthUnfrozen, column->ContentWidthHeadersUsed); | ||||||
|                 else if (merge_group_sub_n == 0)    // Row freeze: use width before freeze |                 else if (merge_group_sub_n == 0)    // Row freeze: use width before freeze | ||||||
|                     width_contents = ImMax(column->ContentWidthRowsFrozen, column->ContentWidthHeadersUsed); |                     width_contents = ImMax(column->ContentWidthFrozen, column->ContentWidthHeadersUsed); | ||||||
|                 else                                // Row freeze: use width after freeze |                 else                                // Row freeze: use width after freeze | ||||||
|                     width_contents = column->ContentWidthRowsUnfrozen; |                     width_contents = column->ContentWidthUnfrozen; | ||||||
|                 if (width_contents > column->WidthGiven) |                 if (width_contents > column->WidthGiven) | ||||||
|                     continue; |                     continue; | ||||||
|             } |             } | ||||||
| @@ -1782,7 +1780,7 @@ void    ImGui::TableEndRow(ImGuiTable* table) | |||||||
|         for (int column_n = 0; column_n < table->ColumnsCount; column_n++) |         for (int column_n = 0; column_n < table->ColumnsCount; column_n++) | ||||||
|         { |         { | ||||||
|             ImGuiTableColumn* column = &table->Columns[column_n]; |             ImGuiTableColumn* column = &table->Columns[column_n]; | ||||||
|             column->DrawChannelCurrent = column->DrawChannelRowsAfterFreeze; |             column->DrawChannelCurrent = column->DrawChannelUnfrozen; | ||||||
|             column->ClipRect.Min.y = table->BackgroundClipRect.Min.y; |             column->ClipRect.Min.y = table->BackgroundClipRect.Min.y; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -1806,7 +1804,7 @@ void    ImGui::TableBeginCell(ImGuiTable* table, int column_n) | |||||||
|     ImGuiWindow* window = table->InnerWindow; |     ImGuiWindow* window = table->InnerWindow; | ||||||
|  |  | ||||||
|     // Start position is roughly ~~ CellRect.Min + CellPadding + Indent |     // Start position is roughly ~~ CellRect.Min + CellPadding + Indent | ||||||
|     float start_x = (table->RowFlags & ImGuiTableRowFlags_Headers) ? column->StartXHeaders : column->StartXRows; |     float start_x = column->StartX; | ||||||
|     if (column->Flags & ImGuiTableColumnFlags_IndentEnable) |     if (column->Flags & ImGuiTableColumnFlags_IndentEnable) | ||||||
|         start_x += table->RowIndentOffsetX; // ~~ += window.DC.Indent.x - table->HostIndentX, except we locked it for the row. |         start_x += table->RowIndentOffsetX; // ~~ += window.DC.Indent.x - table->HostIndentX, except we locked it for the row. | ||||||
|  |  | ||||||
| @@ -1849,7 +1847,7 @@ void    ImGui::TableEndCell(ImGuiTable* table) | |||||||
|     if (table->RowFlags & ImGuiTableRowFlags_Headers) |     if (table->RowFlags & ImGuiTableRowFlags_Headers) | ||||||
|         p_max_pos_x = &column->ContentMaxPosHeadersUsed;  // Useful in case user submit contents in header row that is not a TableHeader() call |         p_max_pos_x = &column->ContentMaxPosHeadersUsed;  // Useful in case user submit contents in header row that is not a TableHeader() call | ||||||
|     else |     else | ||||||
|         p_max_pos_x = table->IsFreezeRowsPassed ? &column->ContentMaxPosRowsUnfrozen : &column->ContentMaxPosRowsFrozen; |         p_max_pos_x = table->IsFreezeRowsPassed ? &column->ContentMaxPosUnfrozen : &column->ContentMaxPosFrozen; | ||||||
|     *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); | ||||||
|  |  | ||||||
| @@ -1951,7 +1949,7 @@ int     ImGui::TableGetColumnIndex() | |||||||
| // Return the cell rectangle based on currently known height. | // Return the cell rectangle based on currently known height. | ||||||
| // Important: we generally don't know our row height until the end of the row, so Max.y will be incorrect in many situations. | // Important: we generally don't know our row height until the end of the row, so Max.y will be incorrect in many situations. | ||||||
| // The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it. | // The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it. | ||||||
| ImRect  ImGui::TableGetCellRect() | ImRect  ImGui::TableGetCellBgRect() | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiTable* table = g.CurrentTable; |     ImGuiTable* table = g.CurrentTable; | ||||||
| @@ -2205,7 +2203,7 @@ void    ImGui::TableHeader(const char* label) | |||||||
|     ImVec2 label_pos = window->DC.CursorPos; |     ImVec2 label_pos = window->DC.CursorPos; | ||||||
|  |  | ||||||
|     // If we already got a row height, there's use that. |     // If we already got a row height, there's use that. | ||||||
|     ImRect cell_r = TableGetCellRect(); |     ImRect cell_r = TableGetCellBgRect(); | ||||||
|     cell_r.Min.x -= table->CellSpacingX; // FIXME-TABLE: TableGetCellRect() is misleading. |     cell_r.Min.x -= table->CellSpacingX; // FIXME-TABLE: TableGetCellRect() is misleading. | ||||||
|     float label_height = ImMax(label_size.y, table->RowMinHeight - g.Style.CellPadding.y * 2.0f); |     float label_height = ImMax(label_size.y, table->RowMinHeight - g.Style.CellPadding.y * 2.0f); | ||||||
|  |  | ||||||
| @@ -2847,13 +2845,13 @@ void ImGui::DebugNodeTable(ImGuiTable* table) | |||||||
|         BulletText("Column %d order %d name '%s': +%.1f to +%.1f\n" |         BulletText("Column %d order %d name '%s': +%.1f to +%.1f\n" | ||||||
|             "Visible: %d, Clipped: %d, DrawChannels: %d,%d\n" |             "Visible: %d, Clipped: %d, DrawChannels: %d,%d\n" | ||||||
|             "WidthGiven/Request: %.2f/%.2f, WidthWeight: %.3f\n" |             "WidthGiven/Request: %.2f/%.2f, WidthWeight: %.3f\n" | ||||||
|             "ContentWidth: RowsFrozen %d, RowsUnfrozen %d, HeadersUsed/Ideal %d/%d\n" |             "ContentWidth: Frozen %d, Unfrozen %d, HeadersUsed/Ideal %d/%d\n" | ||||||
|             "SortOrder: %d, SortDir: %s\n" |             "SortOrder: %d, SortDir: %s\n" | ||||||
|             "UserID: 0x%08X, Flags: 0x%04X: %s%s%s%s..", |             "UserID: 0x%08X, Flags: 0x%04X: %s%s%s%s..", | ||||||
|             n, column->DisplayOrder, name ? name : "NULL", column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x, |             n, column->DisplayOrder, name ? name : "NULL", column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x, | ||||||
|             column->IsVisible, column->IsClipped, column->DrawChannelRowsBeforeFreeze, column->DrawChannelRowsAfterFreeze, |             column->IsVisible, column->IsClipped, column->DrawChannelFrozen, column->DrawChannelUnfrozen, | ||||||
|             column->WidthGiven, column->WidthRequest, column->WidthStretchWeight, |             column->WidthGiven, column->WidthRequest, column->WidthStretchWeight, | ||||||
|             column->ContentWidthRowsFrozen, column->ContentWidthRowsUnfrozen, column->ContentWidthHeadersUsed, column->ContentWidthHeadersIdeal, |             column->ContentWidthFrozen, column->ContentWidthUnfrozen, column->ContentWidthHeadersUsed, column->ContentWidthHeadersIdeal, | ||||||
|             column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? "Ascending" : (column->SortDirection == ImGuiSortDirection_Descending) ? "Descending" : "None", |             column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? "Ascending" : (column->SortDirection == ImGuiSortDirection_Descending) ? "Descending" : "None", | ||||||
|             column->UserID, column->Flags, |             column->UserID, column->Flags, | ||||||
|             (column->Flags & ImGuiTableColumnFlags_WidthFixed) ? "WidthFixed " : "", |             (column->Flags & ImGuiTableColumnFlags_WidthFixed) ? "WidthFixed " : "", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user