mirror of
https://github.com/xemu-project/imgui.git
synced 2024-11-27 04:00:22 +00:00
Misc: moved StacSizeOnBegin out of window instance into window stack data.
This commit is contained in:
parent
66cd21db88
commit
2d0a6a4969
21
imgui.cpp
21
imgui.cpp
@ -5845,12 +5845,12 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
|
|
||||||
// Add to stack
|
// Add to stack
|
||||||
// We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
|
// We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
|
||||||
|
g.CurrentWindow = window;
|
||||||
ImGuiWindowStackData window_stack_data;
|
ImGuiWindowStackData window_stack_data;
|
||||||
window_stack_data.Window = window;
|
window_stack_data.Window = window;
|
||||||
window_stack_data.ParentLastItemDataBackup = g.LastItemData;
|
window_stack_data.ParentLastItemDataBackup = g.LastItemData;
|
||||||
|
window_stack_data.StackSizesOnBegin.SetToCurrentState();
|
||||||
g.CurrentWindowStack.push_back(window_stack_data);
|
g.CurrentWindowStack.push_back(window_stack_data);
|
||||||
g.CurrentWindow = window;
|
|
||||||
window->DC.StackSizesOnBegin.SetToCurrentState();
|
|
||||||
g.CurrentWindow = NULL;
|
g.CurrentWindow = NULL;
|
||||||
|
|
||||||
if (flags & ImGuiWindowFlags_Popup)
|
if (flags & ImGuiWindowFlags_Popup)
|
||||||
@ -6465,10 +6465,10 @@ void ImGui::End()
|
|||||||
|
|
||||||
// Pop from window stack
|
// Pop from window stack
|
||||||
g.LastItemData = g.CurrentWindowStack.back().ParentLastItemDataBackup;
|
g.LastItemData = g.CurrentWindowStack.back().ParentLastItemDataBackup;
|
||||||
g.CurrentWindowStack.pop_back();
|
|
||||||
if (window->Flags & ImGuiWindowFlags_Popup)
|
if (window->Flags & ImGuiWindowFlags_Popup)
|
||||||
g.BeginPopupStack.pop_back();
|
g.BeginPopupStack.pop_back();
|
||||||
window->DC.StackSizesOnBegin.CompareWithCurrentState();
|
g.CurrentWindowStack.back().StackSizesOnBegin.CompareWithCurrentState();
|
||||||
|
g.CurrentWindowStack.pop_back();
|
||||||
SetCurrentWindow(g.CurrentWindowStack.Size == 0 ? NULL : g.CurrentWindowStack.back().Window);
|
SetCurrentWindow(g.CurrentWindowStack.Size == 0 ? NULL : g.CurrentWindowStack.back().Window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7348,6 +7348,7 @@ void ImGui::ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, vo
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGuiWindow* window = g.CurrentWindow;
|
ImGuiWindow* window = g.CurrentWindow;
|
||||||
|
ImGuiStackSizes* stack_sizes = &g.CurrentWindowStack.back().StackSizesOnBegin;
|
||||||
IM_ASSERT(window != NULL);
|
IM_ASSERT(window != NULL);
|
||||||
while (g.CurrentTabBar != NULL) //-V1044
|
while (g.CurrentTabBar != NULL) //-V1044
|
||||||
{
|
{
|
||||||
@ -7359,7 +7360,7 @@ void ImGui::ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, vo
|
|||||||
if (log_callback) log_callback(user_data, "Recovered from missing TreePop() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing TreePop() in '%s'", window->Name);
|
||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
while (g.GroupStack.Size > window->DC.StackSizesOnBegin.SizeOfGroupStack)
|
while (g.GroupStack.Size > stack_sizes->SizeOfGroupStack)
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing EndGroup() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing EndGroup() in '%s'", window->Name);
|
||||||
EndGroup();
|
EndGroup();
|
||||||
@ -7369,27 +7370,27 @@ void ImGui::ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, vo
|
|||||||
if (log_callback) log_callback(user_data, "Recovered from missing PopID() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing PopID() in '%s'", window->Name);
|
||||||
PopID();
|
PopID();
|
||||||
}
|
}
|
||||||
while (g.DisabledStackSize > window->DC.StackSizesOnBegin.SizeOfDisabledStack)
|
while (g.DisabledStackSize > stack_sizes->SizeOfDisabledStack)
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing EndDisabled() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing EndDisabled() in '%s'", window->Name);
|
||||||
EndDisabled();
|
EndDisabled();
|
||||||
}
|
}
|
||||||
while (g.ColorStack.Size > window->DC.StackSizesOnBegin.SizeOfColorStack)
|
while (g.ColorStack.Size > stack_sizes->SizeOfColorStack)
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing PopStyleColor() in '%s' for ImGuiCol_%s", window->Name, GetStyleColorName(g.ColorStack.back().Col));
|
if (log_callback) log_callback(user_data, "Recovered from missing PopStyleColor() in '%s' for ImGuiCol_%s", window->Name, GetStyleColorName(g.ColorStack.back().Col));
|
||||||
PopStyleColor();
|
PopStyleColor();
|
||||||
}
|
}
|
||||||
while (g.ItemFlagsStack.Size > window->DC.StackSizesOnBegin.SizeOfItemFlagsStack)
|
while (g.ItemFlagsStack.Size > stack_sizes->SizeOfItemFlagsStack)
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing PopItemFlag() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing PopItemFlag() in '%s'", window->Name);
|
||||||
PopItemFlag();
|
PopItemFlag();
|
||||||
}
|
}
|
||||||
while (g.StyleVarStack.Size > window->DC.StackSizesOnBegin.SizeOfStyleVarStack)
|
while (g.StyleVarStack.Size > stack_sizes->SizeOfStyleVarStack)
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing PopStyleVar() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing PopStyleVar() in '%s'", window->Name);
|
||||||
PopStyleVar();
|
PopStyleVar();
|
||||||
}
|
}
|
||||||
while (g.FocusScopeStack.Size > window->DC.StackSizesOnBegin.SizeOfFocusScopeStack)
|
while (g.FocusScopeStack.Size > stack_sizes->SizeOfFocusScopeStack)
|
||||||
{
|
{
|
||||||
if (log_callback) log_callback(user_data, "Recovered from missing PopFocusScope() in '%s'", window->Name);
|
if (log_callback) log_callback(user_data, "Recovered from missing PopFocusScope() in '%s'", window->Name);
|
||||||
PopFocusScope();
|
PopFocusScope();
|
||||||
|
@ -1123,11 +1123,29 @@ struct ImGuiLastItemData
|
|||||||
ImGuiLastItemData() { memset(this, 0, sizeof(*this)); }
|
ImGuiLastItemData() { memset(this, 0, sizeof(*this)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct IMGUI_API ImGuiStackSizes
|
||||||
|
{
|
||||||
|
short SizeOfIDStack;
|
||||||
|
short SizeOfColorStack;
|
||||||
|
short SizeOfStyleVarStack;
|
||||||
|
short SizeOfFontStack;
|
||||||
|
short SizeOfFocusScopeStack;
|
||||||
|
short SizeOfGroupStack;
|
||||||
|
short SizeOfItemFlagsStack;
|
||||||
|
short SizeOfBeginPopupStack;
|
||||||
|
short SizeOfDisabledStack;
|
||||||
|
|
||||||
|
ImGuiStackSizes() { memset(this, 0, sizeof(*this)); }
|
||||||
|
void SetToCurrentState();
|
||||||
|
void CompareWithCurrentState();
|
||||||
|
};
|
||||||
|
|
||||||
// Data saved for each window pushed into the stack
|
// Data saved for each window pushed into the stack
|
||||||
struct ImGuiWindowStackData
|
struct ImGuiWindowStackData
|
||||||
{
|
{
|
||||||
ImGuiWindow* Window;
|
ImGuiWindow* Window;
|
||||||
ImGuiLastItemData ParentLastItemDataBackup;
|
ImGuiLastItemData ParentLastItemDataBackup;
|
||||||
|
ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ImGuiShrinkWidthItem
|
struct ImGuiShrinkWidthItem
|
||||||
@ -1373,23 +1391,6 @@ struct ImGuiMetricsConfig
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IMGUI_API ImGuiStackSizes
|
|
||||||
{
|
|
||||||
short SizeOfIDStack;
|
|
||||||
short SizeOfColorStack;
|
|
||||||
short SizeOfStyleVarStack;
|
|
||||||
short SizeOfFontStack;
|
|
||||||
short SizeOfFocusScopeStack;
|
|
||||||
short SizeOfGroupStack;
|
|
||||||
short SizeOfItemFlagsStack;
|
|
||||||
short SizeOfBeginPopupStack;
|
|
||||||
short SizeOfDisabledStack;
|
|
||||||
|
|
||||||
ImGuiStackSizes() { memset(this, 0, sizeof(*this)); }
|
|
||||||
void SetToCurrentState();
|
|
||||||
void CompareWithCurrentState();
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] Generic context hooks
|
// [SECTION] Generic context hooks
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -1867,7 +1868,6 @@ struct IMGUI_API ImGuiWindowTempData
|
|||||||
float TextWrapPos; // Current text wrap pos.
|
float TextWrapPos; // Current text wrap pos.
|
||||||
ImVector<float> ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth)
|
ImVector<float> ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth)
|
||||||
ImVector<float> TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos)
|
ImVector<float> TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos)
|
||||||
ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting // FIXME: Can be moved to ImGuiWindowStackData
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Storage for one window
|
// Storage for one window
|
||||||
|
Loading…
Reference in New Issue
Block a user