|
|
|
@ -2525,7 +2525,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
|
|
|
|
|
LastTimeActive = -1.0f;
|
|
|
|
|
ItemWidthDefault = 0.0f;
|
|
|
|
|
FontWindowScale = 1.0f;
|
|
|
|
|
SettingsIdx = -1;
|
|
|
|
|
SettingsOffset = -1;
|
|
|
|
|
|
|
|
|
|
DrawList = &DrawListInst;
|
|
|
|
|
DrawList->_OwnerName = Name;
|
|
|
|
@ -3818,7 +3818,6 @@ void ImGui::Shutdown(ImGuiContext* context)
|
|
|
|
|
g.PrivateClipboard.clear();
|
|
|
|
|
g.InputTextState.ClearFreeMemory();
|
|
|
|
|
|
|
|
|
|
g.SettingsWindowsNames.clear();
|
|
|
|
|
g.SettingsWindows.clear();
|
|
|
|
|
g.SettingsHandlers.clear();
|
|
|
|
|
|
|
|
|
@ -4704,7 +4703,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
|
|
|
|
|
if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
|
|
|
|
|
{
|
|
|
|
|
// Retrieve settings from .ini file
|
|
|
|
|
window->SettingsIdx = g.SettingsWindows.index_from_ptr(settings);
|
|
|
|
|
window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
|
|
|
|
|
SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
|
|
|
|
|
window->Pos = ImVec2(settings->Pos.x, settings->Pos.y);
|
|
|
|
|
window->Collapsed = settings->Collapsed;
|
|
|
|
@ -9205,27 +9204,31 @@ void ImGui::MarkIniSettingsDirty(ImGuiWindow* window)
|
|
|
|
|
ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
|
|
|
|
|
{
|
|
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
|
|
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
|
|
|
|
ImGuiWindowSettings* settings = &g.SettingsWindows.back();
|
|
|
|
|
|
|
|
|
|
#if !IMGUI_DEBUG_INI_SETTINGS
|
|
|
|
|
// Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
|
|
|
|
|
// Preserve the full string when IMGUI_DEBUG_INI_SETTINGS is set to make .ini inspection easier.
|
|
|
|
|
if (const char* p = strstr(name, "###"))
|
|
|
|
|
name = p;
|
|
|
|
|
#endif
|
|
|
|
|
size_t name_len = strlen(name);
|
|
|
|
|
settings->NameOffset = g.SettingsWindowsNames.size();
|
|
|
|
|
g.SettingsWindowsNames.append(name, name + name_len + 1); // Append with zero terminator
|
|
|
|
|
const size_t name_len = strlen(name);
|
|
|
|
|
|
|
|
|
|
// Allocate chunk
|
|
|
|
|
const size_t chunk_size = sizeof(ImGuiWindowSettings) + name_len + 1;
|
|
|
|
|
ImGuiWindowSettings* settings = g.SettingsWindows.alloc_chunk(chunk_size);
|
|
|
|
|
IM_PLACEMENT_NEW(settings) ImGuiWindowSettings();
|
|
|
|
|
settings->ID = ImHashStr(name, name_len);
|
|
|
|
|
memcpy(settings->GetName(), name, name_len + 1); // Store with zero terminator
|
|
|
|
|
|
|
|
|
|
return settings;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
|
|
|
|
|
{
|
|
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
|
|
for (int i = 0; i != g.SettingsWindows.Size; i++)
|
|
|
|
|
if (g.SettingsWindows[i].ID == id)
|
|
|
|
|
return &g.SettingsWindows[i];
|
|
|
|
|
for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
|
|
|
|
|
if (settings->ID == id)
|
|
|
|
|
return settings;
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -9380,11 +9383,11 @@ static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandl
|
|
|
|
|
if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
ImGuiWindowSettings* settings = (window->SettingsIdx != -1) ? &g.SettingsWindows[window->SettingsIdx] : ImGui::FindWindowSettings(window->ID);
|
|
|
|
|
ImGuiWindowSettings* settings = (window->SettingsOffset != -1) ? g.SettingsWindows.ptr_from_offset(window->SettingsOffset) : ImGui::FindWindowSettings(window->ID);
|
|
|
|
|
if (!settings)
|
|
|
|
|
{
|
|
|
|
|
settings = ImGui::CreateNewWindowSettings(window->Name);
|
|
|
|
|
window->SettingsIdx = g.SettingsWindows.index_from_ptr(settings);
|
|
|
|
|
window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
|
|
|
|
|
}
|
|
|
|
|
IM_ASSERT(settings->ID == window->ID);
|
|
|
|
|
settings->Pos = ImVec2ih((short)window->Pos.x, (short)window->Pos.y);
|
|
|
|
@ -9393,11 +9396,10 @@ static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandl
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Write to text buffer
|
|
|
|
|
buf->reserve(buf->size() + g.SettingsWindows.Size * 96); // ballpark reserve
|
|
|
|
|
for (int i = 0; i != g.SettingsWindows.Size; i++)
|
|
|
|
|
buf->reserve(buf->size() + g.SettingsWindows.size() * 6); // ballpark reserve
|
|
|
|
|
for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
|
|
|
|
|
{
|
|
|
|
|
const ImGuiWindowSettings* settings = &g.SettingsWindows[i];
|
|
|
|
|
const char* settings_name = g.SettingsWindowsNames.c_str() + settings->NameOffset;
|
|
|
|
|
const char* settings_name = settings->GetName();
|
|
|
|
|
buf->appendf("[%s][%s]\n", handler->TypeName, settings_name);
|
|
|
|
|
buf->appendf("Pos=%d,%d\n", settings->Pos.x, settings->Pos.y);
|
|
|
|
|
buf->appendf("Size=%d,%d\n", settings->Size.x, settings->Size.y);
|
|
|
|
|