| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6824,7 +6824,7 @@ struct ImGuiTabBarSection | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					namespace ImGui | 
					 | 
					 | 
					 | 
					namespace ImGui | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static void             TabBarLayout(ImGuiTabBar* tab_bar); | 
					 | 
					 | 
					 | 
					    static void             TabBarLayout(ImGuiTabBar* tab_bar); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static ImU32            TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label); | 
					 | 
					 | 
					 | 
					    static ImU32            TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label, ImGuiWindow* docked_window); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static float            TabBarCalcMaxTabWidth(); | 
					 | 
					 | 
					 | 
					    static float            TabBarCalcMaxTabWidth(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static float            TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling); | 
					 | 
					 | 
					 | 
					    static float            TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    static void             TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImGuiTabBarSection* sections); | 
					 | 
					 | 
					 | 
					    static void             TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImGuiTabBarSection* sections); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6918,7 +6918,7 @@ bool    ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImG | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Ensure correct ordering when toggling ImGuiTabBarFlags_Reorderable flag, or when a new tab was added while being not reorderable
 | 
					 | 
					 | 
					 | 
					    // Ensure correct ordering when toggling ImGuiTabBarFlags_Reorderable flag, or when a new tab was added while being not reorderable
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if ((flags & ImGuiTabBarFlags_Reorderable) != (tab_bar->Flags & ImGuiTabBarFlags_Reorderable) || (tab_bar->TabsAddedNew && !(flags & ImGuiTabBarFlags_Reorderable))) | 
					 | 
					 | 
					 | 
					    if ((flags & ImGuiTabBarFlags_Reorderable) != (tab_bar->Flags & ImGuiTabBarFlags_Reorderable) || (tab_bar->TabsAddedNew && !(flags & ImGuiTabBarFlags_Reorderable))) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (tab_bar->Tabs.Size > 1 && (flags & ImGuiTabBarFlags_DockNode) == 0) | 
					 | 
					 | 
					 | 
					        if (tab_bar->Tabs.Size > 1 && (flags & ImGuiTabBarFlags_DockNode) == 0) // FIXME: TabBar with DockNode can now be hybrid
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByBeginOrder); | 
					 | 
					 | 
					 | 
					            ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByBeginOrder); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    tab_bar->TabsAddedNew = false; | 
					 | 
					 | 
					 | 
					    tab_bar->TabsAddedNew = false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7177,6 +7177,7 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        { | 
					 | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ImGuiTabItem* tab = &tab_bar->Tabs[section_tab_index + tab_n]; | 
					 | 
					 | 
					 | 
					            ImGuiTabItem* tab = &tab_bar->Tabs[section_tab_index + tab_n]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            tab->Offset = tab_offset; | 
					 | 
					 | 
					 | 
					            tab->Offset = tab_offset; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            tab->NameOffset = -1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            tab_offset += tab->Width + (tab_n < section->TabCount - 1 ? g.Style.ItemInnerSpacing.x : 0.0f); | 
					 | 
					 | 
					 | 
					            tab_offset += tab->Width + (tab_n < section->TabCount - 1 ? g.Style.ItemInnerSpacing.x : 0.0f); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        tab_bar->WidthAllTabs += ImMax(section->Width + section->Spacing, 0.0f); | 
					 | 
					 | 
					 | 
					        tab_bar->WidthAllTabs += ImMax(section->Width + section->Spacing, 0.0f); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -7184,6 +7185,9 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        section_tab_index += section->TabCount; | 
					 | 
					 | 
					 | 
					        section_tab_index += section->TabCount; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Clear name buffers
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    tab_bar->TabsNames.Buf.resize(0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // If we have lost the selected tab, select the next most recently active one
 | 
					 | 
					 | 
					 | 
					    // If we have lost the selected tab, select the next most recently active one
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (found_selected_tab_id == false) | 
					 | 
					 | 
					 | 
					    if (found_selected_tab_id == false) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        tab_bar->SelectedTabId = 0; | 
					 | 
					 | 
					 | 
					        tab_bar->SelectedTabId = 0; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7220,21 +7224,18 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    tab_bar->ScrollingRectMinX = tab_bar->BarRect.Min.x + sections[0].Width + sections[0].Spacing; | 
					 | 
					 | 
					 | 
					    tab_bar->ScrollingRectMinX = tab_bar->BarRect.Min.x + sections[0].Width + sections[0].Spacing; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    tab_bar->ScrollingRectMaxX = tab_bar->BarRect.Max.x - sections[2].Width - sections[1].Spacing; | 
					 | 
					 | 
					 | 
					    tab_bar->ScrollingRectMaxX = tab_bar->BarRect.Max.x - sections[2].Width - sections[1].Spacing; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Clear name buffers
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        tab_bar->TabsNames.Buf.resize(0); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Actual layout in host window (we don't do it in BeginTabBar() so as not to waste an extra frame)
 | 
					 | 
					 | 
					 | 
					    // Actual layout in host window (we don't do it in BeginTabBar() so as not to waste an extra frame)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ImGuiWindow* window = g.CurrentWindow; | 
					 | 
					 | 
					 | 
					    ImGuiWindow* window = g.CurrentWindow; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    window->DC.CursorPos = tab_bar->BarRect.Min; | 
					 | 
					 | 
					 | 
					    window->DC.CursorPos = tab_bar->BarRect.Min; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ItemSize(ImVec2(tab_bar->WidthAllTabsIdeal, tab_bar->BarRect.GetHeight()), tab_bar->FramePadding.y); | 
					 | 
					 | 
					 | 
					    ItemSize(ImVec2(tab_bar->WidthAllTabsIdeal, tab_bar->BarRect.GetHeight()), tab_bar->FramePadding.y); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// Dockables uses Name/ID in the global namespace. Non-dockable items use the ID stack.
 | 
					 | 
					 | 
					 | 
					// Dockable uses Name/ID in the global namespace. Non-dockable items use the ID stack.
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label) | 
					 | 
					 | 
					 | 
					static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label, ImGuiWindow* docked_window) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (tab_bar->Flags & ImGuiTabBarFlags_DockNode) | 
					 | 
					 | 
					 | 
					    if (docked_window != NULL) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_DockNode); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGuiID id = ImHashStr(label); | 
					 | 
					 | 
					 | 
					        ImGuiID id = ImHashStr(label); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        KeepAliveID(id); | 
					 | 
					 | 
					 | 
					        KeepAliveID(id); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return id; | 
					 | 
					 | 
					 | 
					        return id; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7581,7 +7582,7 @@ bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return false; | 
					 | 
					 | 
					 | 
					        return false; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const ImGuiStyle& style = g.Style; | 
					 | 
					 | 
					 | 
					    const ImGuiStyle& style = g.Style; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const ImGuiID id = TabBarCalcTabID(tab_bar, label); | 
					 | 
					 | 
					 | 
					    const ImGuiID id = TabBarCalcTabID(tab_bar, label, docked_window); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // If the user called us with *p_open == false, we early out and don't render.
 | 
					 | 
					 | 
					 | 
					    // If the user called us with *p_open == false, we early out and don't render.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // We make a call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID.
 | 
					 | 
					 | 
					 | 
					    // We make a call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID.
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7631,9 +7632,10 @@ bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    tab->Window = docked_window; | 
					 | 
					 | 
					 | 
					    tab->Window = docked_window; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Append name with zero-terminator
 | 
					 | 
					 | 
					 | 
					    // Append name with zero-terminator
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (tab_bar->Flags & ImGuiTabBarFlags_DockNode) | 
					 | 
					 | 
					 | 
					    // (regular tabs are permitted in a DockNode tab bar, but window tabs not permitted in a non-DockNode tab bar)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (tab->Window != NULL) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        IM_ASSERT(tab->Window != NULL); | 
					 | 
					 | 
					 | 
					        IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_DockNode); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        tab->NameOffset = -1; | 
					 | 
					 | 
					 | 
					        tab->NameOffset = -1; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else | 
					 | 
					 | 
					 | 
					    else | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -7851,7 +7853,7 @@ void    ImGui::SetTabItemClosed(const char* label) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (is_within_manual_tab_bar) | 
					 | 
					 | 
					 | 
					    if (is_within_manual_tab_bar) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGuiTabBar* tab_bar = g.CurrentTabBar; | 
					 | 
					 | 
					 | 
					        ImGuiTabBar* tab_bar = g.CurrentTabBar; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ImGuiID tab_id = TabBarCalcTabID(tab_bar, label); | 
					 | 
					 | 
					 | 
					        ImGuiID tab_id = TabBarCalcTabID(tab_bar, label, NULL); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id)) | 
					 | 
					 | 
					 | 
					        if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            tab->WantClose = true; // Will be processed by next call to TabBarLayout()
 | 
					 | 
					 | 
					 | 
					            tab->WantClose = true; // Will be processed by next call to TabBarLayout()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -7860,7 +7862,7 @@ void    ImGui::SetTabItemClosed(const char* label) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (window->DockIsActive) | 
					 | 
					 | 
					 | 
					        if (window->DockIsActive) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            if (ImGuiDockNode* node = window->DockNode) | 
					 | 
					 | 
					 | 
					            if (ImGuiDockNode* node = window->DockNode) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            { | 
					 | 
					 | 
					 | 
					            { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                ImGuiID tab_id = TabBarCalcTabID(node->TabBar, label); | 
					 | 
					 | 
					 | 
					                ImGuiID tab_id = TabBarCalcTabID(node->TabBar, label, window); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                TabBarRemoveTab(node->TabBar, tab_id); | 
					 | 
					 | 
					 | 
					                TabBarRemoveTab(node->TabBar, tab_id); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                window->DockTabWantClose = true; | 
					 | 
					 | 
					 | 
					                window->DockTabWantClose = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |