mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 01:34:32 +00:00 
			
		
		
		
	Internals: Using more explicit PushOverrideID() helper + renamed equivalent internal tree helper.
This commit is contained in:
		@@ -6682,6 +6682,13 @@ void ImGui::PushID(int int_id)
 | 
				
			|||||||
    window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
 | 
					    window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Push a given id value ignoring the ID stack as a seed.
 | 
				
			||||||
 | 
					void ImGui::PushOverrideID(ImGuiID id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
				
			||||||
 | 
					    window->IDStack.push_back(id);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::PopID()
 | 
					void ImGui::PopID()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
					    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1431,6 +1431,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API void          SetHoveredID(ImGuiID id);
 | 
					    IMGUI_API void          SetHoveredID(ImGuiID id);
 | 
				
			||||||
    IMGUI_API void          KeepAliveID(ImGuiID id);
 | 
					    IMGUI_API void          KeepAliveID(ImGuiID id);
 | 
				
			||||||
    IMGUI_API void          MarkItemEdited(ImGuiID id);
 | 
					    IMGUI_API void          MarkItemEdited(ImGuiID id);
 | 
				
			||||||
 | 
					    IMGUI_API void          PushOverrideID(ImGuiID id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Basic Helpers for widget code
 | 
					    // Basic Helpers for widget code
 | 
				
			||||||
    IMGUI_API void          ItemSize(const ImVec2& size, float text_offset_y = 0.0f);
 | 
					    IMGUI_API void          ItemSize(const ImVec2& size, float text_offset_y = 0.0f);
 | 
				
			||||||
@@ -1546,7 +1547,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API bool          SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
 | 
					    IMGUI_API bool          SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
 | 
				
			||||||
    IMGUI_API bool          TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
 | 
					    IMGUI_API bool          TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
 | 
				
			||||||
    IMGUI_API bool          TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0);                     // Consume previous SetNextTreeNodeOpened() data, if any. May return true when logging
 | 
					    IMGUI_API bool          TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0);                     // Consume previous SetNextTreeNodeOpened() data, if any. May return true when logging
 | 
				
			||||||
    IMGUI_API void          TreePushRawID(ImGuiID id);
 | 
					    IMGUI_API void          TreePushOverrideID(ImGuiID id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
 | 
					    // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
 | 
				
			||||||
    // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
 | 
					    // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5082,7 +5082,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
 | 
				
			|||||||
    if (!item_add)
 | 
					    if (!item_add)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
 | 
					        if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
 | 
				
			||||||
            TreePushRawID(id);
 | 
					            TreePushOverrideID(id);
 | 
				
			||||||
        IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
 | 
					        IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
 | 
				
			||||||
        return is_open;
 | 
					        return is_open;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -5186,7 +5186,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
 | 
					    if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
 | 
				
			||||||
        TreePushRawID(id);
 | 
					        TreePushOverrideID(id);
 | 
				
			||||||
    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
 | 
					    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
 | 
				
			||||||
    return is_open;
 | 
					    return is_open;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -5207,7 +5207,7 @@ void ImGui::TreePush(const void* ptr_id)
 | 
				
			|||||||
    PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
 | 
					    PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::TreePushRawID(ImGuiID id)
 | 
					void ImGui::TreePushOverrideID(ImGuiID id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
					    ImGuiWindow* window = GetCurrentWindow();
 | 
				
			||||||
    Indent();
 | 
					    Indent();
 | 
				
			||||||
@@ -6211,7 +6211,7 @@ bool    ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImG
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((flags & ImGuiTabBarFlags_DockNode) == 0)
 | 
					    if ((flags & ImGuiTabBarFlags_DockNode) == 0)
 | 
				
			||||||
        window->IDStack.push_back(tab_bar->ID);
 | 
					        PushOverrideID(tab_bar->ID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Add to stack
 | 
					    // Add to stack
 | 
				
			||||||
    g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar));
 | 
					    g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar));
 | 
				
			||||||
@@ -6663,7 +6663,8 @@ static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
 | 
				
			|||||||
bool    ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags)
 | 
					bool    ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    if (g.CurrentWindow->SkipItems)
 | 
					    ImGuiWindow* window = g.CurrentWindow;
 | 
				
			||||||
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiTabBar* tab_bar = g.CurrentTabBar;
 | 
					    ImGuiTabBar* tab_bar = g.CurrentTabBar;
 | 
				
			||||||
@@ -6676,7 +6677,7 @@ bool    ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags f
 | 
				
			|||||||
    if (ret && !(flags & ImGuiTabItemFlags_NoPushId))
 | 
					    if (ret && !(flags & ImGuiTabItemFlags_NoPushId))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
 | 
					        ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
 | 
				
			||||||
        g.CurrentWindow->IDStack.push_back(tab->ID);    // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label)
 | 
					        PushOverrideID(tab->ID); // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -6684,7 +6685,8 @@ bool    ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags f
 | 
				
			|||||||
void    ImGui::EndTabItem()
 | 
					void    ImGui::EndTabItem()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    if (g.CurrentWindow->SkipItems)
 | 
					    ImGuiWindow* window = g.CurrentWindow;
 | 
				
			||||||
 | 
					    if (window->SkipItems)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGuiTabBar* tab_bar = g.CurrentTabBar;
 | 
					    ImGuiTabBar* tab_bar = g.CurrentTabBar;
 | 
				
			||||||
@@ -6696,7 +6698,7 @@ void    ImGui::EndTabItem()
 | 
				
			|||||||
    IM_ASSERT(tab_bar->LastTabItemIdx >= 0);
 | 
					    IM_ASSERT(tab_bar->LastTabItemIdx >= 0);
 | 
				
			||||||
    ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
 | 
					    ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
 | 
				
			||||||
    if (!(tab->Flags & ImGuiTabItemFlags_NoPushId))
 | 
					    if (!(tab->Flags & ImGuiTabItemFlags_NoPushId))
 | 
				
			||||||
        g.CurrentWindow->IDStack.pop_back();
 | 
					        window->IDStack.pop_back();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags)
 | 
					bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user