|
@@ -12452,15 +12452,16 @@ void ImGui::LogButtons()
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// - UpdateSettings() [Internal]
|
|
|
// - MarkIniSettingsDirty() [Internal]
|
|
|
-// - CreateNewWindowSettings() [Internal]
|
|
|
-// - FindWindowSettingsByName() [Internal]
|
|
|
-// - FindWindowSettingsByWindow() [Internal]
|
|
|
// - FindSettingsHandler() [Internal]
|
|
|
// - ClearIniSettings() [Internal]
|
|
|
// - LoadIniSettingsFromDisk()
|
|
|
// - LoadIniSettingsFromMemory()
|
|
|
// - SaveIniSettingsToDisk()
|
|
|
// - SaveIniSettingsToMemory()
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
+// - CreateNewWindowSettings() [Internal]
|
|
|
+// - FindWindowSettingsByName() [Internal]
|
|
|
+// - FindWindowSettingsByWindow() [Internal]
|
|
|
// - WindowSettingsHandler_***() [Internal]
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
@@ -12507,48 +12508,6 @@ void ImGui::MarkIniSettingsDirty(ImGuiWindow* window)
|
|
|
g.SettingsDirtyTimer = g.IO.IniSavingRate;
|
|
|
}
|
|
|
|
|
|
-ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
|
|
|
-{
|
|
|
- ImGuiContext& g = *GImGui;
|
|
|
-
|
|
|
-#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
|
|
|
- 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;
|
|
|
-}
|
|
|
-
|
|
|
-// This is called once per window .ini entry + once per newly instanciated window.
|
|
|
-ImGuiWindowSettings* ImGui::FindWindowSettingsByName(const char* name)
|
|
|
-{
|
|
|
- ImGuiContext& g = *GImGui;
|
|
|
- ImGuiID id = ImHashStr(name);
|
|
|
- for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
|
|
|
- if (settings->ID == id)
|
|
|
- return settings;
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
-// This is faster if you are holding on a Window already as we don't need to perform a search.
|
|
|
-ImGuiWindowSettings* ImGui::FindWindowSettingsByWindow(ImGuiWindow* window)
|
|
|
-{
|
|
|
- ImGuiContext& g = *GImGui;
|
|
|
- if (window->SettingsOffset != -1)
|
|
|
- return g.SettingsWindows.ptr_from_offset(window->SettingsOffset);
|
|
|
- return FindWindowSettingsByName(window->Name); // Actual search executed once, so at this point we don't mind the redundant hashing.
|
|
|
-}
|
|
|
-
|
|
|
void ImGui::AddSettingsHandler(const ImGuiSettingsHandler* handler)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
@@ -12698,6 +12657,48 @@ const char* ImGui::SaveIniSettingsToMemory(size_t* out_size)
|
|
|
return g.SettingsIniData.c_str();
|
|
|
}
|
|
|
|
|
|
+ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
|
|
|
+{
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
+
|
|
|
+#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
|
|
|
+ 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;
|
|
|
+}
|
|
|
+
|
|
|
+// This is called once per window .ini entry + once per newly instantiated window.
|
|
|
+ImGuiWindowSettings* ImGui::FindWindowSettingsByName(const char* name)
|
|
|
+{
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
+ ImGuiID id = ImHashStr(name);
|
|
|
+ for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
|
|
|
+ if (settings->ID == id)
|
|
|
+ return settings;
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+// This is faster if you are holding on a Window already as we don't need to perform a search.
|
|
|
+ImGuiWindowSettings* ImGui::FindWindowSettingsByWindow(ImGuiWindow* window)
|
|
|
+{
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
+ if (window->SettingsOffset != -1)
|
|
|
+ return g.SettingsWindows.ptr_from_offset(window->SettingsOffset);
|
|
|
+ return FindWindowSettingsByName(window->Name); // Actual search executed once, so at this point we don't mind the redundant hashing.
|
|
|
+}
|
|
|
+
|
|
|
static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
|
|
|
{
|
|
|
ImGuiContext& g = *ctx;
|