|
@@ -2088,6 +2088,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
|
|
|
LastFrameActive = -1;
|
|
LastFrameActive = -1;
|
|
|
ItemWidthDefault = 0.0f;
|
|
ItemWidthDefault = 0.0f;
|
|
|
FontWindowScale = 1.0f;
|
|
FontWindowScale = 1.0f;
|
|
|
|
|
+ SettingsIdx = -1;
|
|
|
|
|
|
|
|
DrawList = &DrawListInst;
|
|
DrawList = &DrawListInst;
|
|
|
DrawList->_OwnerName = Name;
|
|
DrawList->_OwnerName = Name;
|
|
@@ -3880,9 +3881,14 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
|
|
|
ImGuiWindow* window = g.Windows[i];
|
|
ImGuiWindow* window = g.Windows[i];
|
|
|
if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
|
|
if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
|
|
|
continue;
|
|
continue;
|
|
|
- ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ ImGuiWindowSettings* settings = (window->SettingsIdx != -1) ? &g.SettingsWindows[window->SettingsIdx] : ImGui::FindWindowSettings(window->ID);
|
|
|
if (!settings)
|
|
if (!settings)
|
|
|
|
|
+ {
|
|
|
settings = AddWindowSettings(window->Name);
|
|
settings = AddWindowSettings(window->Name);
|
|
|
|
|
+ window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
|
|
|
|
|
+ }
|
|
|
|
|
+ IM_ASSERT(settings->ID == window->ID);
|
|
|
settings->Pos = window->Pos;
|
|
settings->Pos = window->Pos;
|
|
|
settings->Size = window->SizeFull;
|
|
settings->Size = window->SizeFull;
|
|
|
settings->Collapsed = window->Collapsed;
|
|
settings->Collapsed = window->Collapsed;
|
|
@@ -3985,7 +3991,7 @@ ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
|
|
|
{
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
ImGuiContext& g = *GImGui;
|
|
|
for (int i = 0; i != g.SettingsWindows.Size; i++)
|
|
for (int i = 0; i != g.SettingsWindows.Size; i++)
|
|
|
- if (g.SettingsWindows[i].Id == id)
|
|
|
|
|
|
|
+ if (g.SettingsWindows[i].ID == id)
|
|
|
return &g.SettingsWindows[i];
|
|
return &g.SettingsWindows[i];
|
|
|
return NULL;
|
|
return NULL;
|
|
|
}
|
|
}
|
|
@@ -3996,7 +4002,7 @@ static ImGuiWindowSettings* AddWindowSettings(const char* name)
|
|
|
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
|
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
|
|
ImGuiWindowSettings* settings = &g.SettingsWindows.back();
|
|
ImGuiWindowSettings* settings = &g.SettingsWindows.back();
|
|
|
settings->Name = ImStrdup(name);
|
|
settings->Name = ImStrdup(name);
|
|
|
- settings->Id = ImHash(name, 0);
|
|
|
|
|
|
|
+ settings->ID = ImHash(name, 0);
|
|
|
return settings;
|
|
return settings;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -5699,6 +5705,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
|
|
|
// Retrieve settings from .ini file
|
|
// Retrieve settings from .ini file
|
|
|
if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
|
|
if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
|
|
|
{
|
|
{
|
|
|
|
|
+ window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
|
|
|
SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
|
|
SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
|
|
|
window->Pos = ImFloor(settings->Pos);
|
|
window->Pos = ImFloor(settings->Pos);
|
|
|
window->Collapsed = settings->Collapsed;
|
|
window->Collapsed = settings->Collapsed;
|
|
@@ -5779,7 +5786,10 @@ static ImVec2 CalcSizeAutoFit(ImGuiWindow* window, const ImVec2& size_contents)
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
// When the window cannot fit all contents (either because of constraints, either because screen is too small): we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than DisplaySize-WindowPadding.
|
|
// When the window cannot fit all contents (either because of constraints, either because screen is too small): we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than DisplaySize-WindowPadding.
|
|
|
- ImVec2 size_auto_fit = ImClamp(size_contents, style.WindowMinSize, ImMax(style.WindowMinSize, g.IO.DisplaySize - g.Style.DisplaySafeAreaPadding * 2.0f));
|
|
|
|
|
|
|
+ ImVec2 size_min(0.0f, 0.0f);
|
|
|
|
|
+ if (!(window->Flags & ImGuiWindowFlags_ChildMenu))
|
|
|
|
|
+ size_min = style.WindowMinSize;
|
|
|
|
|
+ ImVec2 size_auto_fit = ImClamp(size_contents, size_min, ImMax(size_min, g.IO.DisplaySize - style.DisplaySafeAreaPadding * 2.0f));
|
|
|
ImVec2 size_auto_fit_after_constraint = CalcSizeAfterConstraint(window, size_auto_fit);
|
|
ImVec2 size_auto_fit_after_constraint = CalcSizeAfterConstraint(window, size_auto_fit);
|
|
|
if (size_auto_fit_after_constraint.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar))
|
|
if (size_auto_fit_after_constraint.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar))
|
|
|
size_auto_fit.y += style.ScrollbarSize;
|
|
size_auto_fit.y += style.ScrollbarSize;
|
|
@@ -13881,9 +13891,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
ImGuiWindowFlags flags = window->Flags;
|
|
ImGuiWindowFlags flags = window->Flags;
|
|
|
NodeDrawList(window, window->DrawList, "DrawList");
|
|
NodeDrawList(window, window->DrawList, "DrawList");
|
|
|
ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
|
|
ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
|
|
|
- ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s..)", flags,
|
|
|
|
|
|
|
+ ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s..)", flags,
|
|
|
(flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip) ? "Tooltip " : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
|
|
(flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip) ? "Tooltip " : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
|
|
|
- (flags & ImGuiWindowFlags_Modal) ? "Modal " : "", (flags & ImGuiWindowFlags_ChildMenu) ? "ChildMenu " : "", (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "");
|
|
|
|
|
|
|
+ (flags & ImGuiWindowFlags_Modal) ? "Modal " : "", (flags & ImGuiWindowFlags_ChildMenu) ? "ChildMenu " : "", (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
|
|
|
|
|
+ (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
|
|
|
ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetScrollMaxX(window), window->Scroll.y, GetScrollMaxY(window));
|
|
ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetScrollMaxX(window), window->Scroll.y, GetScrollMaxY(window));
|
|
|
ImGui::BulletText("Active: %d, WriteAccessed: %d", window->Active, window->WriteAccessed);
|
|
ImGui::BulletText("Active: %d, WriteAccessed: %d", window->Active, window->WriteAccessed);
|
|
|
ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask);
|
|
ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask);
|