mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-28 01:20:55 +01:00
Debug Tools: Added io.ConfigDebugBeginReturnValueOnce / io.ConfigDebugBeginReturnValueLoop options.
This commit is contained in:
parent
552969e33e
commit
cc2177de15
@ -81,6 +81,8 @@ Other changes:
|
|||||||
before and can accept the same data type. (#6183).
|
before and can accept the same data type. (#6183).
|
||||||
- Drag and Drop: Clear drag and drop state as soon as delivery is accepted in order to
|
- Drag and Drop: Clear drag and drop state as soon as delivery is accepted in order to
|
||||||
avoid inteferences. (#5817, #6183) [@DimaKoltun]
|
avoid inteferences. (#5817, #6183) [@DimaKoltun]
|
||||||
|
- Debug Tools: Added io.ConfigDebugBeginReturnValueOnce / io.ConfigDebugBeginReturnValueLoop
|
||||||
|
options to simulate Begin/BeginChild returning false to facilitate debugging user behavior.
|
||||||
- Backends: OpenGL3: Fixed restoration of a potentially deleted OpenGL program. If an active
|
- Backends: OpenGL3: Fixed restoration of a potentially deleted OpenGL program. If an active
|
||||||
program was pending deletion, attempting to restore it would error. (#6220, #6224) [@Cyphall]
|
program was pending deletion, attempting to restore it would error. (#6220, #6224) [@Cyphall]
|
||||||
- Backends: Win32: Use WM_NCMOUSEMOVE / WM_NCMOUSELEAVE to track mouse positions over
|
- Backends: Win32: Use WM_NCMOUSEMOVE / WM_NCMOUSELEAVE to track mouse positions over
|
||||||
|
24
imgui.cpp
24
imgui.cpp
@ -1230,6 +1230,8 @@ ImGuiIO::ImGuiIO()
|
|||||||
ConfigWindowsResizeFromEdges = true;
|
ConfigWindowsResizeFromEdges = true;
|
||||||
ConfigWindowsMoveFromTitleBarOnly = false;
|
ConfigWindowsMoveFromTitleBarOnly = false;
|
||||||
ConfigMemoryCompactTimer = 60.0f;
|
ConfigMemoryCompactTimer = 60.0f;
|
||||||
|
ConfigDebugBeginReturnValueOnce = false;
|
||||||
|
ConfigDebugBeginReturnValueLoop = false;
|
||||||
|
|
||||||
// Platform Functions
|
// Platform Functions
|
||||||
// Note: Initialize() will setup default clipboard/ime handlers.
|
// Note: Initialize() will setup default clipboard/ime handlers.
|
||||||
@ -4601,6 +4603,13 @@ void ImGui::NewFrame()
|
|||||||
Begin("Debug##Default");
|
Begin("Debug##Default");
|
||||||
IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true);
|
IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true);
|
||||||
|
|
||||||
|
// [DEBUG] When io.ConfigDebugBeginReturnValue is set, we make Begin()/BeginChild() return false at different level of the window-stack,
|
||||||
|
// allowing to validate correct Begin/End behavior in user code.
|
||||||
|
if (g.IO.ConfigDebugBeginReturnValueLoop)
|
||||||
|
g.DebugBeginReturnValueCullDepth = (g.DebugBeginReturnValueCullDepth == -1) ? 0 : ((g.DebugBeginReturnValueCullDepth + ((g.FrameCount % 4) == 0 ? 1 : 0)) % 10);
|
||||||
|
else
|
||||||
|
g.DebugBeginReturnValueCullDepth = -1;
|
||||||
|
|
||||||
CallContextHooks(&g, ImGuiContextHookType_NewFramePost);
|
CallContextHooks(&g, ImGuiContextHookType_NewFramePost);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6735,6 +6744,15 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->SkipItems = skip_items;
|
window->SkipItems = skip_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [DEBUG] io.ConfigDebugBeginReturnValue override return value to test Begin/End and BeginChild/EndChild behaviors.
|
||||||
|
// (The implicit fallback window is NOT automatically ended allowing it to always be able to receive commands without crashing)
|
||||||
|
if (!window->IsFallbackWindow && ((g.IO.ConfigDebugBeginReturnValueOnce && window_just_created) || (g.IO.ConfigDebugBeginReturnValueLoop && g.DebugBeginReturnValueCullDepth == g.CurrentWindowStack.Size)))
|
||||||
|
{
|
||||||
|
if (window->AutoFitFramesX > 0) { window->AutoFitFramesX++; }
|
||||||
|
if (window->AutoFitFramesY > 0) { window->AutoFitFramesY++; }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return !window->SkipItems;
|
return !window->SkipItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8994,7 +9012,9 @@ static void ImGui::ErrorCheckEndFrameSanityChecks()
|
|||||||
{
|
{
|
||||||
if (g.CurrentWindowStack.Size > 1)
|
if (g.CurrentWindowStack.Size > 1)
|
||||||
{
|
{
|
||||||
|
ImGuiWindow* window = g.CurrentWindowStack.back().Window; // <-- This window was not Ended!
|
||||||
IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?");
|
IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?");
|
||||||
|
IM_UNUSED(window);
|
||||||
while (g.CurrentWindowStack.Size > 1)
|
while (g.CurrentWindowStack.Size > 1)
|
||||||
End();
|
End();
|
||||||
}
|
}
|
||||||
@ -13460,6 +13480,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Checkbox("Debug Begin/BeginChild return value", &io.ConfigDebugBeginReturnValueLoop);
|
||||||
|
SameLine();
|
||||||
|
MetricsHelpMarker("Some calls to Begin()/BeginChild() will return false.\n\nWill cycle through window depths then repeat. Windows should be flickering while running.");
|
||||||
|
|
||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
imgui.h
8
imgui.h
@ -1941,6 +1941,14 @@ struct ImGuiIO
|
|||||||
bool ConfigWindowsMoveFromTitleBarOnly; // = false // Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar.
|
bool ConfigWindowsMoveFromTitleBarOnly; // = false // Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar.
|
||||||
float ConfigMemoryCompactTimer; // = 60.0f // Timer (in seconds) to free transient windows/tables memory buffers when unused. Set to -1.0f to disable.
|
float ConfigMemoryCompactTimer; // = 60.0f // Timer (in seconds) to free transient windows/tables memory buffers when unused. Set to -1.0f to disable.
|
||||||
|
|
||||||
|
// Debug options
|
||||||
|
// - tools to test correct Begin/End and BeginChild/EndChild behaviors.
|
||||||
|
// - presently Begn()/End() and BeginChild()EndChild() needs to ALWAYS be called in tandem, regardless of return value of BeginXXX()
|
||||||
|
// this is inconsistent with other BeginXXX functions and create confusion for many users.
|
||||||
|
// - we expect to update the API eventually. In the meanwhile we provided tools to facilitate checking user-code behavior.
|
||||||
|
bool ConfigDebugBeginReturnValueOnce; // = false // First-time calls to Begin()/BeginChild() will return false. NEEDS TO BE SET AT APPLICATION BOOT TIME if you don't want to miss windows.
|
||||||
|
bool ConfigDebugBeginReturnValueLoop; // = false // Some calls to Begin()/BeginChild() will return false. Will cycle through window depths then repeat. Suggested use: add "io.ConfigDebugBeginReturnValue = io.KeyShift" in your main loop then occasionally press SHIFT. Windows should be flickering while running.
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// Platform Functions
|
// Platform Functions
|
||||||
// (the imgui_impl_xxxx backend files are setting those up for you)
|
// (the imgui_impl_xxxx backend files are setting those up for you)
|
||||||
|
@ -463,6 +463,15 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
|||||||
ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly);
|
ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly);
|
||||||
ImGui::Checkbox("io.ConfigMacOSXBehaviors", &io.ConfigMacOSXBehaviors);
|
ImGui::Checkbox("io.ConfigMacOSXBehaviors", &io.ConfigMacOSXBehaviors);
|
||||||
ImGui::Text("Also see Style->Rendering for rendering options.");
|
ImGui::Text("Also see Style->Rendering for rendering options.");
|
||||||
|
|
||||||
|
ImGui::SeparatorText("Debug");
|
||||||
|
ImGui::BeginDisabled();
|
||||||
|
ImGui::Checkbox("io.ConfigDebugBeginReturnValueOnce", &io.ConfigDebugBeginReturnValueOnce); // .
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
ImGui::SameLine(); HelpMarker("First calls to Begin()/BeginChild() will return false.\n\nTHIS OPTION IS DISABLED because it needs to be set at application boot-time to make sense. Showing the disabled option is a way to make this feature easier to discover");
|
||||||
|
ImGui::Checkbox("io.ConfigDebugBeginReturnValueLoop", &io.ConfigDebugBeginReturnValueLoop);
|
||||||
|
ImGui::SameLine(); HelpMarker("Some calls to Begin()/BeginChild() will return false.\n\nWill cycle through window depths then repeat. Windows should be flickering while running.");
|
||||||
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
ImGui::Spacing();
|
ImGui::Spacing();
|
||||||
}
|
}
|
||||||
|
@ -1996,6 +1996,7 @@ struct ImGuiContext
|
|||||||
ImGuiTextIndex DebugLogIndex;
|
ImGuiTextIndex DebugLogIndex;
|
||||||
ImU8 DebugLogClipperAutoDisableFrames;
|
ImU8 DebugLogClipperAutoDisableFrames;
|
||||||
ImU8 DebugLocateFrames; // For DebugLocateItemOnHover(). This is used together with DebugLocateId which is in a hot/cached spot above.
|
ImU8 DebugLocateFrames; // For DebugLocateItemOnHover(). This is used together with DebugLocateId which is in a hot/cached spot above.
|
||||||
|
ImS8 DebugBeginReturnValueCullDepth; // Cycle between 0..9 then wrap around.
|
||||||
bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
|
bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
|
||||||
ImU8 DebugItemPickerMouseButton;
|
ImU8 DebugItemPickerMouseButton;
|
||||||
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
||||||
@ -2169,6 +2170,7 @@ struct ImGuiContext
|
|||||||
DebugLocateId = 0;
|
DebugLocateId = 0;
|
||||||
DebugLogClipperAutoDisableFrames = 0;
|
DebugLogClipperAutoDisableFrames = 0;
|
||||||
DebugLocateFrames = 0;
|
DebugLocateFrames = 0;
|
||||||
|
DebugBeginReturnValueCullDepth = -1;
|
||||||
DebugItemPickerActive = false;
|
DebugItemPickerActive = false;
|
||||||
DebugItemPickerMouseButton = ImGuiMouseButton_Left;
|
DebugItemPickerMouseButton = ImGuiMouseButton_Left;
|
||||||
DebugItemPickerBreakId = 0;
|
DebugItemPickerBreakId = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user