mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Internals: Merge in minor noise from wip Tables branch to simplify further merging.
This commit is contained in:
		
							
								
								
									
										40
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -3934,6 +3934,11 @@ void ImGui::Shutdown(ImGuiContext* context) | |||||||
|     g.DrawDataBuilder.ClearFreeMemory(); |     g.DrawDataBuilder.ClearFreeMemory(); | ||||||
|     g.BackgroundDrawList.ClearFreeMemory(); |     g.BackgroundDrawList.ClearFreeMemory(); | ||||||
|     g.ForegroundDrawList.ClearFreeMemory(); |     g.ForegroundDrawList.ClearFreeMemory(); | ||||||
|  |  | ||||||
|  |     g.TabBars.Clear(); | ||||||
|  |     g.CurrentTabBarStack.clear(); | ||||||
|  |     g.ShrinkWidthBuffer.clear(); | ||||||
|  |  | ||||||
|     g.PrivateClipboard.clear(); |     g.PrivateClipboard.clear(); | ||||||
|     g.InputTextState.ClearFreeMemory(); |     g.InputTextState.ClearFreeMemory(); | ||||||
|  |  | ||||||
| @@ -6744,7 +6749,8 @@ void ImGui::SetNextWindowBgAlpha(float alpha) | |||||||
| // FIXME: This is in window space (not screen space!). We should try to obsolete all those functions. | // FIXME: This is in window space (not screen space!). We should try to obsolete all those functions. | ||||||
| ImVec2 ImGui::GetContentRegionMax() | ImVec2 ImGui::GetContentRegionMax() | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GImGui->CurrentWindow; |     ImGuiContext& g = *GImGui; | ||||||
|  |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|     ImVec2 mx = window->ContentsRegionRect.Max - window->Pos; |     ImVec2 mx = window->ContentsRegionRect.Max - window->Pos; | ||||||
|     if (window->DC.CurrentColumns) |     if (window->DC.CurrentColumns) | ||||||
|         mx.x = window->WorkRect.Max.x - window->Pos.x; |         mx.x = window->WorkRect.Max.x - window->Pos.x; | ||||||
| @@ -6754,7 +6760,8 @@ ImVec2 ImGui::GetContentRegionMax() | |||||||
| // [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features. | // [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features. | ||||||
| ImVec2 ImGui::GetContentRegionMaxAbs() | ImVec2 ImGui::GetContentRegionMaxAbs() | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GImGui->CurrentWindow; |     ImGuiContext& g = *GImGui; | ||||||
|  |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|     ImVec2 mx = window->ContentsRegionRect.Max; |     ImVec2 mx = window->ContentsRegionRect.Max; | ||||||
|     if (window->DC.CurrentColumns) |     if (window->DC.CurrentColumns) | ||||||
|         mx.x = window->WorkRect.Max.x; |         mx.x = window->WorkRect.Max.x; | ||||||
| @@ -9650,14 +9657,16 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // State | ||||||
|     enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Contents, WRT_ContentsRegionRect, WRT_Count }; // Windows Rect Type |     enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Contents, WRT_ContentsRegionRect, WRT_Count }; // Windows Rect Type | ||||||
|     const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Contents", "ContentsRegionRect" }; |     const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Contents", "ContentsRegionRect" }; | ||||||
|  |  | ||||||
|     static bool show_windows_begin_order = false; |  | ||||||
|     static bool show_windows_rects = false; |     static bool show_windows_rects = false; | ||||||
|     static int  show_windows_rect_type = WRT_WorkRect; |     static int  show_windows_rect_type = WRT_WorkRect; | ||||||
|  |     static bool show_windows_begin_order = false; | ||||||
|     static bool show_drawcmd_clip_rects = true; |     static bool show_drawcmd_clip_rects = true; | ||||||
|  |  | ||||||
|  |     // Basic info | ||||||
|  |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     ImGui::Text("Dear ImGui %s", ImGui::GetVersion()); |     ImGui::Text("Dear ImGui %s", ImGui::GetVersion()); | ||||||
|     ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); |     ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); | ||||||
| @@ -9666,6 +9675,12 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|     ImGui::Text("%d active allocations", io.MetricsActiveAllocations); |     ImGui::Text("%d active allocations", io.MetricsActiveAllocations); | ||||||
|     ImGui::Separator(); |     ImGui::Separator(); | ||||||
|  |  | ||||||
|  |     // Helper functions to display common structures: | ||||||
|  |     // - NodeDrawList | ||||||
|  |     // - NodeColumns | ||||||
|  |     // - NodeWindow | ||||||
|  |     // - NodeWindows | ||||||
|  |     // - NodeTabBar | ||||||
|     struct Funcs |     struct Funcs | ||||||
|     { |     { | ||||||
|         static ImRect GetWindowRect(ImGuiWindow* window, int rect_type) |         static ImRect GetWindowRect(ImGuiWindow* window, int rect_type) | ||||||
| @@ -9830,8 +9845,6 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     // Access private state, we are going to display the draw lists from last frame |  | ||||||
|     ImGuiContext& g = *GImGui; |  | ||||||
|     Funcs::NodeWindows(g.Windows, "Windows"); |     Funcs::NodeWindows(g.Windows, "Windows"); | ||||||
|     if (ImGui::TreeNode("DrawList", "Active DrawLists (%d)", g.DrawDataBuilder.Layers[0].Size)) |     if (ImGui::TreeNode("DrawList", "Active DrawLists (%d)", g.DrawDataBuilder.Layers[0].Size)) | ||||||
|     { |     { | ||||||
| @@ -9857,6 +9870,20 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|         ImGui::TreePop(); |         ImGui::TreePop(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if 0 | ||||||
|  |     if (ImGui::TreeNode("Docking")) | ||||||
|  |     { | ||||||
|  |         ImGui::TreePop(); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if 0 | ||||||
|  |     if (ImGui::TreeNode("Tables", "Tables (%d)", g.Tables.Data.Size)) | ||||||
|  |     { | ||||||
|  |         ImGui::TreePop(); | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     if (ImGui::TreeNode("Internal state")) |     if (ImGui::TreeNode("Internal state")) | ||||||
|     { |     { | ||||||
|         const char* input_source_names[] = { "None", "Mouse", "Nav", "NavKeyboard", "NavGamepad" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT); |         const char* input_source_names[] = { "None", "Mouse", "Nav", "NavKeyboard", "NavGamepad" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT); | ||||||
| @@ -9903,6 +9930,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|         ImGui::TreePop(); |         ImGui::TreePop(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Tool: Display windows Rectangles and Begin Order | ||||||
|     if (show_windows_rects || show_windows_begin_order) |     if (show_windows_rects || show_windows_begin_order) | ||||||
|     { |     { | ||||||
|         for (int n = 0; n < g.Windows.Size; n++) |         for (int n = 0; n < g.Windows.Size; n++) | ||||||
|   | |||||||
| @@ -358,7 +358,8 @@ enum ImGuiSelectableFlagsPrivate_ | |||||||
|     ImGuiSelectableFlags_PressedOnClick     = 1 << 21, |     ImGuiSelectableFlags_PressedOnClick     = 1 << 21, | ||||||
|     ImGuiSelectableFlags_PressedOnRelease   = 1 << 22, |     ImGuiSelectableFlags_PressedOnRelease   = 1 << 22, | ||||||
|     ImGuiSelectableFlags_DrawFillAvailWidth = 1 << 23,  // FIXME: We may be able to remove this (added in 6251d379 for menus) |     ImGuiSelectableFlags_DrawFillAvailWidth = 1 << 23,  // FIXME: We may be able to remove this (added in 6251d379 for menus) | ||||||
|     ImGuiSelectableFlags_AllowItemOverlap   = 1 << 24 |     ImGuiSelectableFlags_AllowItemOverlap   = 1 << 24, | ||||||
|  |     ImGuiSelectableFlags_DrawHoveredWhenHeld= 1 << 25   // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow. | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // Extend ImGuiTreeNodeFlags_ | // Extend ImGuiTreeNodeFlags_ | ||||||
| @@ -827,13 +828,13 @@ struct ImGuiShrinkWidthItem | |||||||
|     float           Width; |     float           Width; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct ImGuiTabBarRef | struct ImGuiPtrOrIndex | ||||||
| { | { | ||||||
|     ImGuiTabBar*    Ptr;                    // Either field can be set, not both. Dock node tab bars are loose while BeginTabBar() ones are in a pool. |     void*           Ptr;                // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool. | ||||||
|     int             IndexInMainPool; |     int             Index;              // Usually index in a main pool. | ||||||
|  |  | ||||||
|     ImGuiTabBarRef(ImGuiTabBar* ptr)        { Ptr = ptr; IndexInMainPool = -1; } |     ImGuiPtrOrIndex(void* ptr)          { Ptr = ptr; Index = -1; } | ||||||
|     ImGuiTabBarRef(int index_in_main_pool)  { Ptr = NULL; IndexInMainPool = index_in_main_pool; } |     ImGuiPtrOrIndex(int index)          { Ptr = NULL; Index = index; } | ||||||
| }; | }; | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| @@ -986,9 +987,9 @@ struct ImGuiContext | |||||||
|     unsigned char           DragDropPayloadBufLocal[8];         // Local buffer for small payloads |     unsigned char           DragDropPayloadBufLocal[8];         // Local buffer for small payloads | ||||||
|  |  | ||||||
|     // Tab bars |     // Tab bars | ||||||
|     ImPool<ImGuiTabBar>             TabBars; |  | ||||||
|     ImGuiTabBar*                    CurrentTabBar; |     ImGuiTabBar*                    CurrentTabBar; | ||||||
|     ImVector<ImGuiTabBarRef>        CurrentTabBarStack; |     ImPool<ImGuiTabBar>             TabBars; | ||||||
|  |     ImVector<ImGuiPtrOrIndex>       CurrentTabBarStack; | ||||||
|     ImVector<ImGuiShrinkWidthItem>  ShrinkWidthBuffer; |     ImVector<ImGuiShrinkWidthItem>  ShrinkWidthBuffer; | ||||||
|  |  | ||||||
|     // Widget state |     // Widget state | ||||||
| @@ -1425,7 +1426,7 @@ struct ImGuiTabBar | |||||||
|     float               ScrollingSpeed; |     float               ScrollingSpeed; | ||||||
|     ImGuiTabBarFlags    Flags; |     ImGuiTabBarFlags    Flags; | ||||||
|     ImGuiID             ReorderRequestTabId; |     ImGuiID             ReorderRequestTabId; | ||||||
|     int                 ReorderRequestDir; |     ImS8                ReorderRequestDir; | ||||||
|     bool                WantLayout; |     bool                WantLayout; | ||||||
|     bool                VisibleTabWasSubmitted; |     bool                VisibleTabWasSubmitted; | ||||||
|     short               LastTabItemIdx;         // For BeginTabItem()/EndTabItem() |     short               LastTabItemIdx;         // For BeginTabItem()/EndTabItem() | ||||||
|   | |||||||
| @@ -5490,6 +5490,8 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl | |||||||
|         window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection; |         window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection; | ||||||
|  |  | ||||||
|     // Render |     // Render | ||||||
|  |     if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld)) | ||||||
|  |         hovered = true; | ||||||
|     if (hovered || selected) |     if (hovered || selected) | ||||||
|     { |     { | ||||||
|         const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); |         const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); | ||||||
| @@ -6271,18 +6273,18 @@ static int IMGUI_CDECL TabItemComparerByVisibleOffset(const void* lhs, const voi | |||||||
|     return (int)(a->Offset - b->Offset); |     return (int)(a->Offset - b->Offset); | ||||||
| } | } | ||||||
|  |  | ||||||
| static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiTabBarRef& ref) | static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     return ref.Ptr ? ref.Ptr : g.TabBars.GetByIndex(ref.IndexInMainPool); |     return ref.Ptr ? (ImGuiTabBar*)ref.Ptr : g.TabBars.GetByIndex(ref.Index); | ||||||
| } | } | ||||||
|  |  | ||||||
| static ImGuiTabBarRef GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar) | static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     if (g.TabBars.Contains(tab_bar)) |     if (g.TabBars.Contains(tab_bar)) | ||||||
|         return ImGuiTabBarRef(g.TabBars.GetIndex(tab_bar)); |         return ImGuiPtrOrIndex(g.TabBars.GetIndex(tab_bar)); | ||||||
|     return ImGuiTabBarRef(tab_bar); |     return ImGuiPtrOrIndex(tab_bar); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool    ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags) | bool    ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags) | ||||||
| @@ -6637,7 +6639,7 @@ void ImGui::TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* | |||||||
|     IM_ASSERT(dir == -1 || dir == +1); |     IM_ASSERT(dir == -1 || dir == +1); | ||||||
|     IM_ASSERT(tab_bar->ReorderRequestTabId == 0); |     IM_ASSERT(tab_bar->ReorderRequestTabId == 0); | ||||||
|     tab_bar->ReorderRequestTabId = tab->ID; |     tab_bar->ReorderRequestTabId = tab->ID; | ||||||
|     tab_bar->ReorderRequestDir = dir; |     tab_bar->ReorderRequestDir = (ImS8)dir; | ||||||
| } | } | ||||||
|  |  | ||||||
| static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar) | static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 omar
					omar