mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20: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