mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Tables: added ImGuiTableFlags_NoHostExtendX instead of using outer_size.x == 0.0f. Changed default outer_size to (0.0f, 0.0f). (#3605)
This commit is contained in:
		| @@ -74,19 +74,23 @@ Index of this file: | ||||
| //----------------------------------------------------------------------------- | ||||
| // About 'outer_size': | ||||
| // Its meaning needs to differ slightly depending of if we are using ScrollX/ScrollY flags. | ||||
| // Default value is ImVec2(-FLT_MIN, 0.0f). When binding this in a scripting language please follow this default value. | ||||
| // Default value is ImVec2(0.0f, 0.0f). | ||||
| //   X | ||||
| //   - outer_size.x < 0.0f  ->  Right-align from window/work-rect right-most edge. With -FLT_MIN will right-align exactly on right-most edge. | ||||
| //   - outer_size.x = 0.0f  ->  Auto width. Generally use all available width. When NOT using scrolling and NOT using any Stretch column, use only necessary width, otherwise same as -FLT_MIN. | ||||
| //   - outer_size.x > 0.0f  ->  Fixed width. | ||||
| //   - outer_size.x <= 0.0f  ->  Right-align from window/work-rect right-most edge. With -FLT_MIN or 0.0f will align exactly on right-most edge. | ||||
| //   - outer_size.x  > 0.0f  ->  Set Fixed width. | ||||
| //   Y with ScrollX/ScrollY disabled: we output table directly in current window | ||||
| //   - outer_size.y < 0.0f  ->  Bottom-align (but will auto extend, unless _NoHostExtendY is set). Not meaningful is parent window can vertically scroll. | ||||
| //   - outer_size.y = 0.0f  ->  No minimum height (but will auto extend, unless _NoHostExtendY is set) | ||||
| //   - outer_size.y > 0.0f  ->  Set Minimum height (but will auto extend, unless _NoHostExtenY is set) | ||||
| //   - outer_size.y  < 0.0f  ->  Bottom-align (but will auto extend, unless _NoHostExtendY is set). Not meaningful is parent window can vertically scroll. | ||||
| //   - outer_size.y  = 0.0f  ->  No minimum height (but will auto extend, unless _NoHostExtendY is set) | ||||
| //   - outer_size.y  > 0.0f  ->  Set Minimum height (but will auto extend, unless _NoHostExtenY is set) | ||||
| //   Y with ScrollX/ScrollY enabled: using a child window for scrolling | ||||
| //   - outer_size.y < 0.0f  ->  Bottom-align. Not meaningful is parent window can vertically scroll. | ||||
| //   - outer_size.y = 0.0f  ->  Bottom-align, consistent with BeginChild(). Not recommended unless table is last item in parent window. | ||||
| //   - outer_size.y > 0.0f  ->  Set Exact height. Recommended when using Scrolling on any axis. | ||||
| //   - outer_size.y  < 0.0f  ->  Bottom-align. Not meaningful is parent window can vertically scroll. | ||||
| //   - outer_size.y  = 0.0f  ->  Bottom-align, consistent with BeginChild(). Not recommended unless table is last item in parent window. | ||||
| //   - outer_size.y  > 0.0f  ->  Set Exact height. Recommended when using Scrolling on any axis. | ||||
| //----------------------------------------------------------------------------- | ||||
| // Outer size is also affected by the NoHostExtendX/NoHostExtendY flags. | ||||
| // Important to that note how the two flags have slightly different behaviors! | ||||
| //   - ImGuiTableFlags_NoHostExtendX -> Make outer width auto-fit to columns (overriding outer_size.x value). Only available when ScrollX/ScrollY are disabled and Stretch columns are not used. | ||||
| //   - ImGuiTableFlags_NoHostExtendY -> Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible. | ||||
| // In theory ImGuiTableFlags_NoHostExtendY could be the default and any non-scrolling tables with outer_size.y != 0.0f would use exact height. | ||||
| // This would be consistent but perhaps less useful and more confusing (as vertically clipped items are not easily noticeable) | ||||
| //----------------------------------------------------------------------------- | ||||
| @@ -255,9 +259,9 @@ inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags, ImGuiWindow* outer_w | ||||
|     if (flags & ImGuiTableFlags_Resizable) | ||||
|         flags |= ImGuiTableFlags_BordersInnerV; | ||||
|  | ||||
|     // Adjust flags: disable NoHostExtendY if we have any scrolling going on | ||||
|     if ((flags & ImGuiTableFlags_NoHostExtendY) && (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) != 0) | ||||
|         flags &= ~ImGuiTableFlags_NoHostExtendY; | ||||
|     // Adjust flags: disable NoHostExtendX/NoHostExtendY if we have any scrolling going on | ||||
|     if (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) | ||||
|         flags &= ~(ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_NoHostExtendY); | ||||
|  | ||||
|     // Adjust flags: NoBordersInBodyUntilResize takes priority over NoBordersInBody | ||||
|     if (flags & ImGuiTableFlags_NoBordersInBodyUntilResize) | ||||
| @@ -1036,8 +1040,9 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) | ||||
|     // [Part 8] Lock actual OuterRect/WorkRect right-most position. | ||||
|     // 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. | ||||
|     table->IsOuterRectMinFitX = (table->UserOuterSize.x == 0.0f) && table->RightMostStretchedColumn == -1 && (table->InnerWindow == table->OuterWindow); | ||||
|     if (table->IsOuterRectMinFitX) | ||||
|     if (table->RightMostStretchedColumn != -1) | ||||
|         table->Flags &= ~ImGuiTableFlags_NoHostExtendX; | ||||
|     if (table->Flags & ImGuiTableFlags_NoHostExtendX) | ||||
|     { | ||||
|         table->OuterRect.Max.x = table->WorkRect.Max.x = unused_x1; | ||||
|         table->InnerClipRect.Max.x = ImMin(table->InnerClipRect.Max.x, unused_x1); | ||||
| @@ -1300,7 +1305,7 @@ void    ImGui::EndTable() | ||||
|     } | ||||
|  | ||||
|     // Override declared contents width/height to enable auto-resize while not needlessly adding a scrollbar | ||||
|     if (table->IsOuterRectMinFitX) | ||||
|     if (table->Flags & ImGuiTableFlags_NoHostExtendX) | ||||
|     { | ||||
|         // FIXME-TABLE: Could we remove this section? | ||||
|         // ColumnsAutoFitWidth may be one frame ahead here since for Fixed+NoResize is calculated from latest contents | ||||
| @@ -2402,11 +2407,12 @@ void ImGui::TableDrawBorders(ImGuiTable* table) | ||||
|             const bool is_resized = (table->ResizedColumn == column_n) && (table->InstanceInteracted == table->InstanceCurrent); | ||||
|             const bool is_resizable = (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_)) == 0; | ||||
|             const bool is_frozen_separator = (table->FreezeColumnsCount != -1 && table->FreezeColumnsCount == order_n + 1); | ||||
|  | ||||
|             if (column->MaxX > table->InnerClipRect.Max.x && !is_resized) | ||||
|                 continue; | ||||
|  | ||||
|             // Decide whether right-most column is visible | ||||
|             if (column->NextEnabledColumn == -1 && !is_resizable) | ||||
|                 if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || table->IsOuterRectMinFitX) | ||||
|                 if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || (table->Flags & ImGuiTableFlags_NoHostExtendX)) | ||||
|                     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