mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Misc: extracted ErrorCheckEndWindowRecover() out of ErrorCheckEndFrameRecover(). (#1651)
This commit is contained in:
		
							
								
								
									
										113
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -7316,61 +7316,11 @@ void    ImGui::ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, voi
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    while (g.CurrentWindowStack.Size > 0)
 | 
			
		||||
    {
 | 
			
		||||
        while (g.CurrentTable && (g.CurrentTable->OuterWindow == g.CurrentWindow || g.CurrentTable->InnerWindow == g.CurrentWindow))
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing EndTable() in '%s'", g.CurrentTable->OuterWindow->Name);
 | 
			
		||||
            EndTable();
 | 
			
		||||
        }
 | 
			
		||||
        ErrorCheckEndWindowRecover(log_callback, user_data);
 | 
			
		||||
        ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
        IM_ASSERT(window != NULL);
 | 
			
		||||
        while (g.CurrentTabBar != NULL) //-V1044
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing EndTabBar() in '%s'", window->Name);
 | 
			
		||||
            EndTabBar();
 | 
			
		||||
        }
 | 
			
		||||
        while (window->DC.TreeDepth > 0)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing TreePop() in '%s'", window->Name);
 | 
			
		||||
            TreePop();
 | 
			
		||||
        }
 | 
			
		||||
        while (g.GroupStack.Size > window->DC.StackSizesOnBegin.SizeOfGroupStack)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing EndGroup() in '%s'", window->Name);
 | 
			
		||||
            EndGroup();
 | 
			
		||||
        }
 | 
			
		||||
        while (window->IDStack.Size > 1)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing PopID() in '%s'", window->Name);
 | 
			
		||||
            PopID();
 | 
			
		||||
        }
 | 
			
		||||
        while (g.DisabledStackSize > window->DC.StackSizesOnBegin.SizeOfDisabledStack)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing EndDisabled() in '%s'", window->Name);
 | 
			
		||||
            EndDisabled();
 | 
			
		||||
        }
 | 
			
		||||
        while (g.ColorStack.Size > window->DC.StackSizesOnBegin.SizeOfColorStack)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing PopStyleColor() in '%s' for ImGuiCol_%s", window->Name, GetStyleColorName(g.ColorStack.back().Col));
 | 
			
		||||
            PopStyleColor();
 | 
			
		||||
        }
 | 
			
		||||
        while (g.ItemFlagsStack.Size > window->DC.StackSizesOnBegin.SizeOfItemFlagsStack)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing PopItemFlag() in '%s'", window->Name);
 | 
			
		||||
            PopItemFlag();
 | 
			
		||||
        }
 | 
			
		||||
        while (g.StyleVarStack.Size > window->DC.StackSizesOnBegin.SizeOfStyleVarStack)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing PopStyleVar() in '%s'", window->Name);
 | 
			
		||||
            PopStyleVar();
 | 
			
		||||
        }
 | 
			
		||||
        while (g.FocusScopeStack.Size > window->DC.StackSizesOnBegin.SizeOfFocusScopeStack)
 | 
			
		||||
        {
 | 
			
		||||
            if (log_callback) log_callback(user_data, "Recovered from missing PopFocusScope() in '%s'", window->Name);
 | 
			
		||||
            PopFocusScope();
 | 
			
		||||
        }
 | 
			
		||||
        if (g.CurrentWindowStack.Size == 1)
 | 
			
		||||
        {
 | 
			
		||||
            IM_ASSERT(g.CurrentWindow->IsFallbackWindow);
 | 
			
		||||
            IM_ASSERT(window->IsFallbackWindow);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        IM_ASSERT(window == g.CurrentWindow);
 | 
			
		||||
@@ -7387,6 +7337,65 @@ void    ImGui::ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, voi
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Must be called before End()/EndChild()
 | 
			
		||||
void    ImGui::ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    while (g.CurrentTable && (g.CurrentTable->OuterWindow == g.CurrentWindow || g.CurrentTable->InnerWindow == g.CurrentWindow))
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing EndTable() in '%s'", g.CurrentTable->OuterWindow->Name);
 | 
			
		||||
        EndTable();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    IM_ASSERT(window != NULL);
 | 
			
		||||
    while (g.CurrentTabBar != NULL) //-V1044
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing EndTabBar() in '%s'", window->Name);
 | 
			
		||||
        EndTabBar();
 | 
			
		||||
    }
 | 
			
		||||
    while (window->DC.TreeDepth > 0)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing TreePop() in '%s'", window->Name);
 | 
			
		||||
        TreePop();
 | 
			
		||||
    }
 | 
			
		||||
    while (g.GroupStack.Size > window->DC.StackSizesOnBegin.SizeOfGroupStack)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing EndGroup() in '%s'", window->Name);
 | 
			
		||||
        EndGroup();
 | 
			
		||||
    }
 | 
			
		||||
    while (window->IDStack.Size > 1)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing PopID() in '%s'", window->Name);
 | 
			
		||||
        PopID();
 | 
			
		||||
    }
 | 
			
		||||
    while (g.DisabledStackSize > window->DC.StackSizesOnBegin.SizeOfDisabledStack)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing EndDisabled() in '%s'", window->Name);
 | 
			
		||||
        EndDisabled();
 | 
			
		||||
    }
 | 
			
		||||
    while (g.ColorStack.Size > window->DC.StackSizesOnBegin.SizeOfColorStack)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing PopStyleColor() in '%s' for ImGuiCol_%s", window->Name, GetStyleColorName(g.ColorStack.back().Col));
 | 
			
		||||
        PopStyleColor();
 | 
			
		||||
    }
 | 
			
		||||
    while (g.ItemFlagsStack.Size > window->DC.StackSizesOnBegin.SizeOfItemFlagsStack)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing PopItemFlag() in '%s'", window->Name);
 | 
			
		||||
        PopItemFlag();
 | 
			
		||||
    }
 | 
			
		||||
    while (g.StyleVarStack.Size > window->DC.StackSizesOnBegin.SizeOfStyleVarStack)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing PopStyleVar() in '%s'", window->Name);
 | 
			
		||||
        PopStyleVar();
 | 
			
		||||
    }
 | 
			
		||||
    while (g.FocusScopeStack.Size > window->DC.StackSizesOnBegin.SizeOfFocusScopeStack)
 | 
			
		||||
    {
 | 
			
		||||
        if (log_callback) log_callback(user_data, "Recovered from missing PopFocusScope() in '%s'", window->Name);
 | 
			
		||||
        PopFocusScope();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Save current stack sizes for later compare
 | 
			
		||||
void ImGuiStackSizes::SetToCurrentState()
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user