mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	
							
								
								
									
										22
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -3346,11 +3346,23 @@ void ImGui::DestroyContext(ImGuiContext* ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// No specific ordering/dependency support, will see as needed
 | 
			
		||||
void ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook* hook)
 | 
			
		||||
ImGuiID ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook* hook)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *ctx;
 | 
			
		||||
    IM_ASSERT(hook->Callback != NULL);
 | 
			
		||||
    IM_ASSERT(hook->Callback != NULL && hook->HookId == 0 && hook->Type != ImGuiContextHookType_PendingRemoval_);
 | 
			
		||||
    g.Hooks.push_back(*hook);
 | 
			
		||||
    g.Hooks.back().HookId = ++g.HookIdNext;
 | 
			
		||||
    return g.HookIdNext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Deferred removal, avoiding issue with changing vector while iterating it
 | 
			
		||||
void ImGui::RemoveContextHook(ImGuiContext* ctx, ImGuiID hook_id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *ctx;
 | 
			
		||||
    IM_ASSERT(hook_id != 0);
 | 
			
		||||
    for (int n = 0; n < g.Hooks.Size; n++)
 | 
			
		||||
        if (g.Hooks[n].HookId == hook_id)
 | 
			
		||||
            g.Hooks[n].Type = ImGuiContextHookType_PendingRemoval_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Call context hooks (used by e.g. test engine)
 | 
			
		||||
@@ -3781,6 +3793,12 @@ void ImGui::NewFrame()
 | 
			
		||||
    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    
 | 
			
		||||
    // Remove pending delete hooks before frame start.
 | 
			
		||||
    // This deferred removal avoid issues of removal while iterating the hook vector
 | 
			
		||||
    for (int n = g.Hooks.Size - 1; n >= 0; n--)
 | 
			
		||||
        if (g.Hooks[n].Type == ImGuiContextHookType_PendingRemoval_)
 | 
			
		||||
            g.Hooks.erase(&g.Hooks[n]);
 | 
			
		||||
 | 
			
		||||
    CallContextHooks(&g, ImGuiContextHookType_NewFramePre);
 | 
			
		||||
 | 
			
		||||
    // Check and assert for various common IO and Configuration mistakes
 | 
			
		||||
 
 | 
			
		||||
@@ -1223,10 +1223,11 @@ struct IMGUI_API ImGuiStackSizes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
typedef void (*ImGuiContextHookCallback)(ImGuiContext* ctx, ImGuiContextHook* hook);
 | 
			
		||||
enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiContextHookType_NewFramePost, ImGuiContextHookType_EndFramePre, ImGuiContextHookType_EndFramePost, ImGuiContextHookType_RenderPre, ImGuiContextHookType_RenderPost, ImGuiContextHookType_Shutdown };
 | 
			
		||||
enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiContextHookType_NewFramePost, ImGuiContextHookType_EndFramePre, ImGuiContextHookType_EndFramePost, ImGuiContextHookType_RenderPre, ImGuiContextHookType_RenderPost, ImGuiContextHookType_Shutdown, ImGuiContextHookType_PendingRemoval_ };
 | 
			
		||||
 | 
			
		||||
struct ImGuiContextHook
 | 
			
		||||
{
 | 
			
		||||
    ImGuiID                     HookId;     // A unique ID assigned by AddContextHook()
 | 
			
		||||
    ImGuiContextHookType        Type;
 | 
			
		||||
    ImGuiID                     Owner;
 | 
			
		||||
    ImGuiContextHookCallback    Callback;
 | 
			
		||||
@@ -1454,6 +1455,7 @@ struct ImGuiContext
 | 
			
		||||
    ImChunkStream<ImGuiWindowSettings>  SettingsWindows;        // ImGuiWindow .ini settings entries
 | 
			
		||||
    ImChunkStream<ImGuiTableSettings>   SettingsTables;         // ImGuiTable .ini settings entries
 | 
			
		||||
    ImVector<ImGuiContextHook>          Hooks;                  // Hooks for extensions (e.g. test engine)
 | 
			
		||||
    ImGuiID                             HookIdNext;             // Next available HookId
 | 
			
		||||
 | 
			
		||||
    // Capture/Logging
 | 
			
		||||
    bool                    LogEnabled;                         // Currently capturing
 | 
			
		||||
@@ -2185,7 +2187,8 @@ namespace ImGui
 | 
			
		||||
    IMGUI_API void          UpdateMouseMovingWindowEndFrame();
 | 
			
		||||
 | 
			
		||||
    // Generic context hooks
 | 
			
		||||
    IMGUI_API void          AddContextHook(ImGuiContext* context, const ImGuiContextHook* hook);
 | 
			
		||||
    IMGUI_API ImGuiID       AddContextHook(ImGuiContext* context, const ImGuiContextHook* hook);
 | 
			
		||||
    IMGUI_API void          RemoveContextHook(ImGuiContext* context, ImGuiID hook_to_remove);
 | 
			
		||||
    IMGUI_API void          CallContextHooks(ImGuiContext* context, ImGuiContextHookType type);
 | 
			
		||||
 | 
			
		||||
    // Settings
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user