mirror of
https://github.com/xemu-project/imgui.git
synced 2024-11-23 18:29:51 +00:00
parent
f139846750
commit
f3f2578e8f
22
imgui.cpp
22
imgui.cpp
@ -3346,11 +3346,23 @@ void ImGui::DestroyContext(ImGuiContext* ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// No specific ordering/dependency support, will see as needed
|
// 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;
|
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.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)
|
// Call context hooks (used by e.g. test engine)
|
||||||
@ -3780,6 +3792,12 @@ void ImGui::NewFrame()
|
|||||||
{
|
{
|
||||||
IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
|
IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
|
||||||
ImGuiContext& g = *GImGui;
|
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);
|
CallContextHooks(&g, ImGuiContextHookType_NewFramePre);
|
||||||
|
|
||||||
|
@ -1223,10 +1223,11 @@ struct IMGUI_API ImGuiStackSizes
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
typedef void (*ImGuiContextHookCallback)(ImGuiContext* ctx, ImGuiContextHook* hook);
|
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
|
struct ImGuiContextHook
|
||||||
{
|
{
|
||||||
|
ImGuiID HookId; // A unique ID assigned by AddContextHook()
|
||||||
ImGuiContextHookType Type;
|
ImGuiContextHookType Type;
|
||||||
ImGuiID Owner;
|
ImGuiID Owner;
|
||||||
ImGuiContextHookCallback Callback;
|
ImGuiContextHookCallback Callback;
|
||||||
@ -1454,6 +1455,7 @@ struct ImGuiContext
|
|||||||
ImChunkStream<ImGuiWindowSettings> SettingsWindows; // ImGuiWindow .ini settings entries
|
ImChunkStream<ImGuiWindowSettings> SettingsWindows; // ImGuiWindow .ini settings entries
|
||||||
ImChunkStream<ImGuiTableSettings> SettingsTables; // ImGuiTable .ini settings entries
|
ImChunkStream<ImGuiTableSettings> SettingsTables; // ImGuiTable .ini settings entries
|
||||||
ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
|
ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
|
||||||
|
ImGuiID HookIdNext; // Next available HookId
|
||||||
|
|
||||||
// Capture/Logging
|
// Capture/Logging
|
||||||
bool LogEnabled; // Currently capturing
|
bool LogEnabled; // Currently capturing
|
||||||
@ -2185,7 +2187,8 @@ namespace ImGui
|
|||||||
IMGUI_API void UpdateMouseMovingWindowEndFrame();
|
IMGUI_API void UpdateMouseMovingWindowEndFrame();
|
||||||
|
|
||||||
// Generic context hooks
|
// 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);
|
IMGUI_API void CallContextHooks(ImGuiContext* context, ImGuiContextHookType type);
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
|
Loading…
Reference in New Issue
Block a user