mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-04 12:08:47 +02:00
30
imgui.cpp
30
imgui.cpp
@ -3697,20 +3697,23 @@ void ImGui::GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeF
|
||||
|
||||
ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
|
||||
{
|
||||
ImGuiContext* prev_ctx = GetCurrentContext();
|
||||
ImGuiContext* ctx = IM_NEW(ImGuiContext)(shared_font_atlas);
|
||||
if (GImGui == NULL)
|
||||
SetCurrentContext(ctx);
|
||||
Initialize(ctx);
|
||||
SetCurrentContext(ctx);
|
||||
Initialize();
|
||||
if (prev_ctx != NULL)
|
||||
SetCurrentContext(prev_ctx); // Restore previous context if any, else keep new one.
|
||||
return ctx;
|
||||
}
|
||||
|
||||
void ImGui::DestroyContext(ImGuiContext* ctx)
|
||||
{
|
||||
ImGuiContext* prev_ctx = GetCurrentContext();
|
||||
if (ctx == NULL)
|
||||
ctx = GImGui;
|
||||
Shutdown(ctx);
|
||||
if (GImGui == ctx)
|
||||
SetCurrentContext(NULL);
|
||||
ctx = prev_ctx;
|
||||
SetCurrentContext(ctx);
|
||||
Shutdown();
|
||||
SetCurrentContext((prev_ctx != ctx) ? prev_ctx : NULL);
|
||||
IM_DELETE(ctx);
|
||||
}
|
||||
|
||||
@ -4464,9 +4467,9 @@ void ImGui::NewFrame()
|
||||
CallContextHooks(&g, ImGuiContextHookType_NewFramePost);
|
||||
}
|
||||
|
||||
void ImGui::Initialize(ImGuiContext* context)
|
||||
void ImGui::Initialize()
|
||||
{
|
||||
ImGuiContext& g = *context;
|
||||
ImGuiContext& g = *GImGui;
|
||||
IM_ASSERT(!g.Initialized && !g.SettingsLoaded);
|
||||
|
||||
// Add .ini handle for ImGuiWindow type
|
||||
@ -4496,10 +4499,10 @@ void ImGui::Initialize(ImGuiContext* context)
|
||||
}
|
||||
|
||||
// This function is merely here to free heap allocations.
|
||||
void ImGui::Shutdown(ImGuiContext* context)
|
||||
void ImGui::Shutdown()
|
||||
{
|
||||
// The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame)
|
||||
ImGuiContext& g = *context;
|
||||
ImGuiContext& g = *GImGui;
|
||||
if (g.IO.Fonts && g.FontAtlasOwnedByContext)
|
||||
{
|
||||
g.IO.Fonts->Locked = false;
|
||||
@ -4513,12 +4516,7 @@ void ImGui::Shutdown(ImGuiContext* context)
|
||||
|
||||
// Save settings (unless we haven't attempted to load them: CreateContext/DestroyContext without a call to NewFrame shouldn't save an empty file)
|
||||
if (g.SettingsLoaded && g.IO.IniFilename != NULL)
|
||||
{
|
||||
ImGuiContext* backup_context = GImGui;
|
||||
SetCurrentContext(&g);
|
||||
SaveIniSettingsToDisk(g.IO.IniFilename);
|
||||
SetCurrentContext(backup_context);
|
||||
}
|
||||
|
||||
CallContextHooks(&g, ImGuiContextHookType_Shutdown);
|
||||
|
||||
|
Reference in New Issue
Block a user