mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
Debug: Added ShowDebugLogWindow().
Internal: renamed old IMGUI_DEBUG_LOG() to IMGUI_DEBUG_PRINT(). Amended once.
This commit is contained in:
parent
ec2c805e48
commit
1d6e34f3f9
@ -617,6 +617,7 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA
|
|||||||
io.AddInputCharacterUTF16((unsigned short)wParam);
|
io.AddInputCharacterUTF16((unsigned short)wParam);
|
||||||
return 0;
|
return 0;
|
||||||
case WM_SETCURSOR:
|
case WM_SETCURSOR:
|
||||||
|
// This is required to restore cursor when transitioning from e.g resize borders to client area.
|
||||||
if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor())
|
if (LOWORD(lParam) == HTCLIENT && ImGui_ImplWin32_UpdateMouseCursor())
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -111,6 +111,8 @@ Other Changes:
|
|||||||
- DrawList: Fixed texture-based anti-aliasing path with RGBA textures (#5132, #3245) [@cfillion]
|
- DrawList: Fixed texture-based anti-aliasing path with RGBA textures (#5132, #3245) [@cfillion]
|
||||||
- DrawList: Fixed divide-by-zero or glitches with Radius/Rounding values close to zero. (#5249, #5293, #3491)
|
- DrawList: Fixed divide-by-zero or glitches with Radius/Rounding values close to zero. (#5249, #5293, #3491)
|
||||||
- DrawList: Circle with a radius smaller than 0.5f won't appear, to be consistent with other primitives. [@thedmd]
|
- DrawList: Circle with a radius smaller than 0.5f won't appear, to be consistent with other primitives. [@thedmd]
|
||||||
|
- Debug: Added ShowDebugLogWindow() showing an opt-in synthetic log of principal events (focus, popup,
|
||||||
|
active id changes) helping to diagnose issues.
|
||||||
- Debug: Added DebugTextEncoding() function to facilitate diagnosing issues when not sure about whether
|
- Debug: Added DebugTextEncoding() function to facilitate diagnosing issues when not sure about whether
|
||||||
you have a UTF-8 text encoding issue or a font loading issue. [@LaMarche05, @ocornut]
|
you have a UTF-8 text encoding issue or a font loading issue. [@LaMarche05, @ocornut]
|
||||||
- Demo: Add better demo of how to use SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard().
|
- Demo: Add better demo of how to use SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard().
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp.
|
// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp.
|
||||||
//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty.
|
//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty.
|
||||||
//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended.
|
//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended.
|
||||||
//#define IMGUI_DISABLE_METRICS_WINDOW // Disable metrics/debugger and other debug tools: ShowMetricsWindow() and ShowStackToolWindow() will be empty.
|
//#define IMGUI_DISABLE_METRICS_WINDOW // Disable metrics/debugger and other debug tools: ShowMetricsWindow(), ShowDebugLogWindow() and ShowStackToolWindow() will be empty.
|
||||||
|
|
||||||
//---- Don't implement some functions to reduce linkage requirements.
|
//---- Don't implement some functions to reduce linkage requirements.
|
||||||
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a)
|
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a)
|
||||||
|
125
imgui.cpp
125
imgui.cpp
@ -83,6 +83,7 @@ CODE
|
|||||||
// [SECTION] VIEWPORTS
|
// [SECTION] VIEWPORTS
|
||||||
// [SECTION] PLATFORM DEPENDENT HELPERS
|
// [SECTION] PLATFORM DEPENDENT HELPERS
|
||||||
// [SECTION] METRICS/DEBUGGER WINDOW
|
// [SECTION] METRICS/DEBUGGER WINDOW
|
||||||
|
// [SECTION] DEBUG LOG WINDOW
|
||||||
// [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL)
|
// [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -1269,7 +1270,7 @@ void ImGuiIO::ClearInputKeys()
|
|||||||
// - float analog_value: 0.0f..1.0f
|
// - float analog_value: 0.0f..1.0f
|
||||||
void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value)
|
void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value)
|
||||||
{
|
{
|
||||||
//if (e->Down) { IMGUI_DEBUG_LOG("AddKeyEvent() Key='%s' %d, NativeKeycode = %d, NativeScancode = %d\n", ImGui::GetKeyName(e->Key), e->Down, e->NativeKeycode, e->NativeScancode); }
|
//if (e->Down) { IMGUI_DEBUG_PRINT("AddKeyEvent() Key='%s' %d, NativeKeycode = %d, NativeScancode = %d\n", ImGui::GetKeyName(e->Key), e->Down, e->NativeKeycode, e->NativeScancode); }
|
||||||
if (key == ImGuiKey_None || !AppAcceptingEvents)
|
if (key == ImGuiKey_None || !AppAcceptingEvents)
|
||||||
return;
|
return;
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -3385,6 +3386,7 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
|
|||||||
g.ActiveIdIsJustActivated = (g.ActiveId != id);
|
g.ActiveIdIsJustActivated = (g.ActiveId != id);
|
||||||
if (g.ActiveIdIsJustActivated)
|
if (g.ActiveIdIsJustActivated)
|
||||||
{
|
{
|
||||||
|
IMGUI_DEBUG_LOG_ACTIVEID("[activeid] SetActiveID(0x%08X) in Window \"%s\"\n", id, window ? window->Name : "<NULL>");
|
||||||
g.ActiveIdTimer = 0.0f;
|
g.ActiveIdTimer = 0.0f;
|
||||||
g.ActiveIdHasBeenPressedBefore = false;
|
g.ActiveIdHasBeenPressedBefore = false;
|
||||||
g.ActiveIdHasBeenEditedBefore = false;
|
g.ActiveIdHasBeenEditedBefore = false;
|
||||||
@ -4576,6 +4578,7 @@ void ImGui::Shutdown()
|
|||||||
g.LogFile = NULL;
|
g.LogFile = NULL;
|
||||||
}
|
}
|
||||||
g.LogBuffer.clear();
|
g.LogBuffer.clear();
|
||||||
|
g.DebugLogBuf.clear();
|
||||||
|
|
||||||
g.Initialized = false;
|
g.Initialized = false;
|
||||||
}
|
}
|
||||||
@ -5361,7 +5364,7 @@ static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_created,
|
|||||||
static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags)
|
static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
//IMGUI_DEBUG_LOG("CreateNewWindow '%s', flags = 0x%08X\n", name, flags);
|
//IMGUI_DEBUG_PRINT("CreateNewWindow '%s', flags = 0x%08X\n", name, flags);
|
||||||
|
|
||||||
// Create window the first time
|
// Create window the first time
|
||||||
ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name);
|
ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name);
|
||||||
@ -6781,6 +6784,7 @@ void ImGui::FocusWindow(ImGuiWindow* window)
|
|||||||
|
|
||||||
if (g.NavWindow != window)
|
if (g.NavWindow != window)
|
||||||
{
|
{
|
||||||
|
IMGUI_DEBUG_LOG_FOCUS("[focus] FocusWindow(\"%s\")\n", window ? window->Name : "<NULL>");
|
||||||
g.NavWindow = window;
|
g.NavWindow = window;
|
||||||
if (window && g.NavDisableMouseHover)
|
if (window && g.NavDisableMouseHover)
|
||||||
g.NavMousePosDirty = true;
|
g.NavMousePosDirty = true;
|
||||||
@ -6790,7 +6794,6 @@ void ImGui::FocusWindow(ImGuiWindow* window)
|
|||||||
g.NavLayer = ImGuiNavLayer_Main;
|
g.NavLayer = ImGuiNavLayer_Main;
|
||||||
g.NavInitRequest = g.NavMoveSubmitted = g.NavMoveScoringItems = false;
|
g.NavInitRequest = g.NavMoveSubmitted = g.NavMoveScoringItems = false;
|
||||||
NavUpdateAnyRequestFlag();
|
NavUpdateAnyRequestFlag();
|
||||||
//IMGUI_DEBUG_LOG("FocusWindow(\"%s\")\n", window ? window->Name : NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close popups if any
|
// Close popups if any
|
||||||
@ -7819,21 +7822,23 @@ void ImGui::SetNextFrameWantCaptureMouse(bool want_capture_mouse)
|
|||||||
g.WantCaptureMouseNextFrame = want_capture_mouse ? 1 : 0;
|
g.WantCaptureMouseNextFrame = want_capture_mouse ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef IMGUI_DISABLE_METRICS_WINDOW
|
||||||
static const char* GetInputSourceName(ImGuiInputSource source)
|
static const char* GetInputSourceName(ImGuiInputSource source)
|
||||||
{
|
{
|
||||||
const char* input_source_names[] = { "None", "Mouse", "Keyboard", "Gamepad", "Nav", "Clipboard" };
|
const char* input_source_names[] = { "None", "Mouse", "Keyboard", "Gamepad", "Nav", "Clipboard" };
|
||||||
IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT);
|
IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT);
|
||||||
return input_source_names[source];
|
return input_source_names[source];
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*static void DebugLogInputEvent(const char* prefix, const ImGuiInputEvent* e)
|
/*static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEvent* e)
|
||||||
{
|
{
|
||||||
if (e->Type == ImGuiInputEventType_MousePos) { IMGUI_DEBUG_LOG("%s: MousePos (%.1f %.1f)\n", prefix, e->MousePos.PosX, e->MousePos.PosY); return; }
|
if (e->Type == ImGuiInputEventType_MousePos) { IMGUI_DEBUG_PRINT("%s: MousePos (%.1f %.1f)\n", prefix, e->MousePos.PosX, e->MousePos.PosY); return; }
|
||||||
if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG("%s: MouseButton %d %s\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up"); return; }
|
if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_PRINT("%s: MouseButton %d %s\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up"); return; }
|
||||||
if (e->Type == ImGuiInputEventType_MouseWheel) { IMGUI_DEBUG_LOG("%s: MouseWheel (%.1f %.1f)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY); return; }
|
if (e->Type == ImGuiInputEventType_MouseWheel) { IMGUI_DEBUG_PRINT("%s: MouseWheel (%.1f %.1f)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY); return; }
|
||||||
if (e->Type == ImGuiInputEventType_Key) { IMGUI_DEBUG_LOG("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; }
|
if (e->Type == ImGuiInputEventType_Key) { IMGUI_DEBUG_PRINT("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; }
|
||||||
if (e->Type == ImGuiInputEventType_Text) { IMGUI_DEBUG_LOG("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; }
|
if (e->Type == ImGuiInputEventType_Text) { IMGUI_DEBUG_PRINT("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; }
|
||||||
if (e->Type == ImGuiInputEventType_Focus) { IMGUI_DEBUG_LOG("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; }
|
if (e->Type == ImGuiInputEventType_Focus) { IMGUI_DEBUG_PRINT("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; }
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// Process input queue
|
// Process input queue
|
||||||
@ -7953,14 +7958,14 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Record trail (for domain-specific applications wanting to access a precise trail)
|
// Record trail (for domain-specific applications wanting to access a precise trail)
|
||||||
//if (event_n != 0) IMGUI_DEBUG_LOG("Processed: %d / Remaining: %d\n", event_n, g.InputEventsQueue.Size - event_n);
|
//if (event_n != 0) IMGUI_DEBUG_PRINT("Processed: %d / Remaining: %d\n", event_n, g.InputEventsQueue.Size - event_n);
|
||||||
for (int n = 0; n < event_n; n++)
|
for (int n = 0; n < event_n; n++)
|
||||||
g.InputEventsTrail.push_back(g.InputEventsQueue[n]);
|
g.InputEventsTrail.push_back(g.InputEventsQueue[n]);
|
||||||
|
|
||||||
// [DEBUG]
|
// [DEBUG]
|
||||||
/*if (event_n != 0)
|
/*if (event_n != 0)
|
||||||
for (int n = 0; n < g.InputEventsQueue.Size; n++)
|
for (int n = 0; n < g.InputEventsQueue.Size; n++)
|
||||||
DebugLogInputEvent(n < event_n ? "Processed" : "Remaining", &g.InputEventsQueue[n]);*/
|
DebugPrintInputEvent(n < event_n ? "Processed" : "Remaining", &g.InputEventsQueue[n]);*/
|
||||||
|
|
||||||
// Remaining events will be processed on the next frame
|
// Remaining events will be processed on the next frame
|
||||||
if (event_n == g.InputEventsQueue.Size)
|
if (event_n == g.InputEventsQueue.Size)
|
||||||
@ -9080,7 +9085,9 @@ ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal()
|
|||||||
void ImGui::OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags)
|
void ImGui::OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
OpenPopupEx(g.CurrentWindow->GetID(str_id), popup_flags);
|
ImGuiID id = g.CurrentWindow->GetID(str_id);
|
||||||
|
IMGUI_DEBUG_LOG_POPUP("[popup] OpenPopup(\"%s\" -> 0x%08X\n", str_id, id);
|
||||||
|
OpenPopupEx(id, popup_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags)
|
void ImGui::OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags)
|
||||||
@ -9111,7 +9118,7 @@ void ImGui::OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags)
|
|||||||
popup_ref.OpenPopupPos = NavCalcPreferredRefPos();
|
popup_ref.OpenPopupPos = NavCalcPreferredRefPos();
|
||||||
popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos;
|
popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos;
|
||||||
|
|
||||||
IMGUI_DEBUG_LOG_POPUP("OpenPopupEx(0x%08X)\n", id);
|
IMGUI_DEBUG_LOG_POPUP("[popup] OpenPopupEx(0x%08X)\n", id);
|
||||||
if (g.OpenPopupStack.Size < current_stack_size + 1)
|
if (g.OpenPopupStack.Size < current_stack_size + 1)
|
||||||
{
|
{
|
||||||
g.OpenPopupStack.push_back(popup_ref);
|
g.OpenPopupStack.push_back(popup_ref);
|
||||||
@ -9180,7 +9187,7 @@ void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to
|
|||||||
}
|
}
|
||||||
if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
|
if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
|
||||||
{
|
{
|
||||||
IMGUI_DEBUG_LOG_POPUP("ClosePopupsOverWindow(\"%s\") -> ClosePopupToLevel(%d)\n", ref_window->Name, popup_count_to_keep);
|
IMGUI_DEBUG_LOG_POPUP("[popup] ClosePopupsOverWindow(\"%s\")\n", ref_window ? ref_window->Name : "<NULL>");
|
||||||
ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup);
|
ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9203,7 +9210,7 @@ void ImGui::ClosePopupsExceptModals()
|
|||||||
void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
|
void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
IMGUI_DEBUG_LOG_POPUP("ClosePopupToLevel(%d), restore_focus_to_window_under_popup=%d\n", remaining, restore_focus_to_window_under_popup);
|
IMGUI_DEBUG_LOG_POPUP("[popup] ClosePopupToLevel(%d), restore_focus_to_window_under_popup=%d\n", remaining, restore_focus_to_window_under_popup);
|
||||||
IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size);
|
IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size);
|
||||||
|
|
||||||
// Trim open popup stack
|
// Trim open popup stack
|
||||||
@ -9248,7 +9255,7 @@ void ImGui::CloseCurrentPopup()
|
|||||||
break;
|
break;
|
||||||
popup_idx--;
|
popup_idx--;
|
||||||
}
|
}
|
||||||
IMGUI_DEBUG_LOG_POPUP("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
|
IMGUI_DEBUG_LOG_POPUP("[popup] CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
|
||||||
ClosePopupToLevel(popup_idx, true);
|
ClosePopupToLevel(popup_idx, true);
|
||||||
|
|
||||||
// A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
|
// A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
|
||||||
@ -10129,7 +10136,7 @@ static void ImGui::NavUpdate()
|
|||||||
ImGuiIO& io = g.IO;
|
ImGuiIO& io = g.IO;
|
||||||
|
|
||||||
io.WantSetMousePos = false;
|
io.WantSetMousePos = false;
|
||||||
//if (g.NavScoringDebugCount > 0) IMGUI_DEBUG_LOG("NavScoringDebugCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.NavScoringDebugCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
|
//if (g.NavScoringDebugCount > 0) IMGUI_DEBUG_LOG_NAV("[nav] NavScoringDebugCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.NavScoringDebugCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
|
||||||
|
|
||||||
// Update Gamepad->Nav inputs mapping
|
// Update Gamepad->Nav inputs mapping
|
||||||
// Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard)
|
// Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard)
|
||||||
@ -10303,7 +10310,7 @@ static void ImGui::NavUpdate()
|
|||||||
{
|
{
|
||||||
io.MousePos = io.MousePosPrev = NavCalcPreferredRefPos();
|
io.MousePos = io.MousePosPrev = NavCalcPreferredRefPos();
|
||||||
io.WantSetMousePos = true;
|
io.WantSetMousePos = true;
|
||||||
//IMGUI_DEBUG_LOG("SetMousePos: (%.1f,%.1f)\n", io.MousePos.x, io.MousePos.y);
|
//IMGUI_DEBUG_PRINT("SetMousePos: (%.1f,%.1f)\n", io.MousePos.x, io.MousePos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// [DEBUG]
|
// [DEBUG]
|
||||||
@ -10327,7 +10334,7 @@ void ImGui::NavInitRequestApplyResult()
|
|||||||
|
|
||||||
// Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
|
// Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
|
||||||
// FIXME-NAV: On _NavFlattened windows, g.NavWindow will only be updated during subsequent frame. Not a problem currently.
|
// FIXME-NAV: On _NavFlattened windows, g.NavWindow will only be updated during subsequent frame. Not a problem currently.
|
||||||
IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: result NavID 0x%08X in Layer %d Window \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name);
|
IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: ApplyResult: NavID 0x%08X in Layer %d Window \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name);
|
||||||
SetNavID(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel);
|
SetNavID(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel);
|
||||||
g.NavIdIsAlive = true; // Mark as alive from previous frame as we got a result
|
g.NavIdIsAlive = true; // Mark as alive from previous frame as we got a result
|
||||||
if (g.NavInitRequestFromMove)
|
if (g.NavInitRequestFromMove)
|
||||||
@ -10397,7 +10404,7 @@ void ImGui::NavUpdateCreateMoveRequest()
|
|||||||
// Moving with no reference triggers a init request (will be used as a fallback if the direction fails to find a match)
|
// Moving with no reference triggers a init request (will be used as a fallback if the direction fails to find a match)
|
||||||
if (g.NavMoveSubmitted && g.NavId == 0)
|
if (g.NavMoveSubmitted && g.NavId == 0)
|
||||||
{
|
{
|
||||||
IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: from move, window \"%s\", layer=%d\n", g.NavWindow->Name, g.NavLayer);
|
IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: from move, window \"%s\", layer=%d\n", window ? window->Name : "<NULL>", g.NavLayer);
|
||||||
g.NavInitRequest = g.NavInitRequestFromMove = true;
|
g.NavInitRequest = g.NavInitRequestFromMove = true;
|
||||||
g.NavInitResultId = 0;
|
g.NavInitResultId = 0;
|
||||||
g.NavDisableHighlight = false;
|
g.NavDisableHighlight = false;
|
||||||
@ -10413,7 +10420,7 @@ void ImGui::NavUpdateCreateMoveRequest()
|
|||||||
ImRect inner_rect_rel = WindowRectAbsToRel(window, ImRect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1)));
|
ImRect inner_rect_rel = WindowRectAbsToRel(window, ImRect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1)));
|
||||||
if ((clamp_x || clamp_y) && !inner_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
|
if ((clamp_x || clamp_y) && !inner_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
|
||||||
{
|
{
|
||||||
IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n");
|
//IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n");
|
||||||
float pad_x = ImMin(inner_rect_rel.GetWidth(), window->CalcFontSize() * 0.5f);
|
float pad_x = ImMin(inner_rect_rel.GetWidth(), window->CalcFontSize() * 0.5f);
|
||||||
float pad_y = ImMin(inner_rect_rel.GetHeight(), window->CalcFontSize() * 0.5f); // Terrible approximation for the intent of starting navigation from first fully visible item
|
float pad_y = ImMin(inner_rect_rel.GetHeight(), window->CalcFontSize() * 0.5f); // Terrible approximation for the intent of starting navigation from first fully visible item
|
||||||
inner_rect_rel.Min.x = clamp_x ? (inner_rect_rel.Min.x + pad_x) : -FLT_MAX;
|
inner_rect_rel.Min.x = clamp_x ? (inner_rect_rel.Min.x + pad_x) : -FLT_MAX;
|
||||||
@ -12344,8 +12351,19 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
|
||||||
|
if (Checkbox("Show Item Picker", &g.DebugItemPickerActive) && g.DebugItemPickerActive)
|
||||||
|
DebugStartItemPicker();
|
||||||
|
SameLine();
|
||||||
|
MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash.");
|
||||||
|
|
||||||
// Stack Tool is your best friend!
|
// Stack Tool is your best friend!
|
||||||
Checkbox("Show stack tool", &cfg->ShowStackTool);
|
Checkbox("Show Debug Log", &cfg->ShowDebugLog);
|
||||||
|
SameLine();
|
||||||
|
MetricsHelpMarker("You can also call ImGui::ShowDebugLogWindow() from your code.");
|
||||||
|
|
||||||
|
// Stack Tool is your best friend!
|
||||||
|
Checkbox("Show Stack Tool", &cfg->ShowStackTool);
|
||||||
SameLine();
|
SameLine();
|
||||||
MetricsHelpMarker("You can also call ImGui::ShowStackToolWindow() from your code.");
|
MetricsHelpMarker("You can also call ImGui::ShowStackToolWindow() from your code.");
|
||||||
|
|
||||||
@ -12411,12 +12429,6 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
|
|
||||||
if (Button("Item Picker.."))
|
|
||||||
DebugStartItemPicker();
|
|
||||||
SameLine();
|
|
||||||
MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash.");
|
|
||||||
|
|
||||||
TreePop();
|
TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13086,6 +13098,58 @@ void ImGui::DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int wi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// [SECTION] DEBUG LOG
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void ImGui::DebugLog(const char* fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
DebugLogV(fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::DebugLogV(const char* fmt, va_list args)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
g.DebugLogBuf.appendf("[%05d] ", g.FrameCount);
|
||||||
|
g.DebugLogBuf.appendfv(fmt, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::ShowDebugLogWindow(bool* p_open)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
if (!(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize))
|
||||||
|
SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 12.0f), ImGuiCond_FirstUseEver);
|
||||||
|
if (!Begin("Dear ImGui Debug Log", p_open) || GetCurrentWindow()->BeginCount > 1)
|
||||||
|
{
|
||||||
|
End();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
AlignTextToFramePadding();
|
||||||
|
Text("Log events:");
|
||||||
|
SameLine(); CheckboxFlags("All", &g.DebugLogFlags, ImGuiDebugLogFlags_EventMask_);
|
||||||
|
SameLine(); CheckboxFlags("ActiveId", &g.DebugLogFlags, ImGuiDebugLogFlags_EventActiveId);
|
||||||
|
SameLine(); CheckboxFlags("Focus", &g.DebugLogFlags, ImGuiDebugLogFlags_EventFocus);
|
||||||
|
SameLine(); CheckboxFlags("Popup", &g.DebugLogFlags, ImGuiDebugLogFlags_EventPopup);
|
||||||
|
SameLine(); CheckboxFlags("Nav", &g.DebugLogFlags, ImGuiDebugLogFlags_EventNav);
|
||||||
|
|
||||||
|
if (SmallButton("Clear"))
|
||||||
|
g.DebugLogBuf.clear();
|
||||||
|
SameLine();
|
||||||
|
if (SmallButton("Copy"))
|
||||||
|
SetClipboardText(g.DebugLogBuf.c_str());
|
||||||
|
BeginChild("##log", ImVec2(0.0f, 0.0f), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar);
|
||||||
|
TextUnformatted(g.DebugLogBuf.begin(), g.DebugLogBuf.end()); // FIXME-OPT: Could use a line index, but TextUnformatted() has a semi-decent fast path for large text.
|
||||||
|
if (GetScrollY() >= GetScrollMaxY())
|
||||||
|
SetScrollHereY(1.0f);
|
||||||
|
EndChild();
|
||||||
|
|
||||||
|
End();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL)
|
// [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -13312,6 +13376,9 @@ void ImGui::DebugNodeWindowSettings(ImGuiWindowSettings*) {}
|
|||||||
void ImGui::DebugNodeWindowsList(ImVector<ImGuiWindow*>*, const char*) {}
|
void ImGui::DebugNodeWindowsList(ImVector<ImGuiWindow*>*, const char*) {}
|
||||||
void ImGui::DebugNodeViewport(ImGuiViewportP*) {}
|
void ImGui::DebugNodeViewport(ImGuiViewportP*) {}
|
||||||
|
|
||||||
|
void ImGui::DebugLog(const char*, ...) {}
|
||||||
|
void ImGui::DebugLogV(const char*, va_list) {}
|
||||||
|
void ImGui::ShowDebugLogWindow(bool*) {}
|
||||||
void ImGui::ShowStackToolWindow(bool*) {}
|
void ImGui::ShowStackToolWindow(bool*) {}
|
||||||
void ImGui::DebugHookIdInfo(ImGuiID, ImGuiDataType, const void*, const void*) {}
|
void ImGui::DebugHookIdInfo(ImGuiID, ImGuiDataType, const void*, const void*) {}
|
||||||
void ImGui::UpdateDebugToolItemPicker() {}
|
void ImGui::UpdateDebugToolItemPicker() {}
|
||||||
|
3
imgui.h
3
imgui.h
@ -65,7 +65,7 @@ Index of this file:
|
|||||||
// Version
|
// Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
||||||
#define IMGUI_VERSION "1.88 WIP"
|
#define IMGUI_VERSION "1.88 WIP"
|
||||||
#define IMGUI_VERSION_NUM 18728
|
#define IMGUI_VERSION_NUM 18729
|
||||||
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
||||||
#define IMGUI_HAS_TABLE
|
#define IMGUI_HAS_TABLE
|
||||||
|
|
||||||
@ -297,6 +297,7 @@ namespace ImGui
|
|||||||
// Demo, Debug, Information
|
// Demo, Debug, Information
|
||||||
IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
|
IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
|
||||||
IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc.
|
IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc.
|
||||||
|
IMGUI_API void ShowDebugLogWindow(bool* p_open = NULL); // create Debug Log window. display a simplified log of important dear imgui events.
|
||||||
IMGUI_API void ShowStackToolWindow(bool* p_open = NULL); // create Stack Tool window. hover items with mouse to query information about the source of their unique ID.
|
IMGUI_API void ShowStackToolWindow(bool* p_open = NULL); // create Stack Tool window. hover items with mouse to query information about the source of their unique ID.
|
||||||
IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information.
|
IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information.
|
||||||
IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
|
IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
|
||||||
|
@ -302,13 +302,19 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
|||||||
|
|
||||||
// Dear ImGui Apps (accessible from the "Tools" menu)
|
// Dear ImGui Apps (accessible from the "Tools" menu)
|
||||||
static bool show_app_metrics = false;
|
static bool show_app_metrics = false;
|
||||||
|
static bool show_app_debug_log = false;
|
||||||
static bool show_app_stack_tool = false;
|
static bool show_app_stack_tool = false;
|
||||||
static bool show_app_style_editor = false;
|
|
||||||
static bool show_app_about = false;
|
static bool show_app_about = false;
|
||||||
|
static bool show_app_style_editor = false;
|
||||||
|
|
||||||
if (show_app_metrics) { ImGui::ShowMetricsWindow(&show_app_metrics); }
|
if (show_app_metrics)
|
||||||
if (show_app_stack_tool) { ImGui::ShowStackToolWindow(&show_app_stack_tool); }
|
ImGui::ShowMetricsWindow(&show_app_metrics);
|
||||||
if (show_app_about) { ImGui::ShowAboutWindow(&show_app_about); }
|
if (show_app_debug_log)
|
||||||
|
ImGui::ShowDebugLogWindow(&show_app_debug_log);
|
||||||
|
if (show_app_stack_tool)
|
||||||
|
ImGui::ShowStackToolWindow(&show_app_stack_tool);
|
||||||
|
if (show_app_about)
|
||||||
|
ImGui::ShowAboutWindow(&show_app_about);
|
||||||
if (show_app_style_editor)
|
if (show_app_style_editor)
|
||||||
{
|
{
|
||||||
ImGui::Begin("Dear ImGui Style Editor", &show_app_style_editor);
|
ImGui::Begin("Dear ImGui Style Editor", &show_app_style_editor);
|
||||||
@ -397,6 +403,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
|||||||
IMGUI_DEMO_MARKER("Menu/Tools");
|
IMGUI_DEMO_MARKER("Menu/Tools");
|
||||||
#ifndef IMGUI_DISABLE_METRICS_WINDOW
|
#ifndef IMGUI_DISABLE_METRICS_WINDOW
|
||||||
ImGui::MenuItem("Metrics/Debugger", NULL, &show_app_metrics);
|
ImGui::MenuItem("Metrics/Debugger", NULL, &show_app_metrics);
|
||||||
|
ImGui::MenuItem("Debug Log", NULL, &show_app_debug_log);
|
||||||
ImGui::MenuItem("Stack Tool", NULL, &show_app_stack_tool);
|
ImGui::MenuItem("Stack Tool", NULL, &show_app_stack_tool);
|
||||||
#endif
|
#endif
|
||||||
ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor);
|
ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor);
|
||||||
|
@ -147,6 +147,7 @@ struct ImGuiWindowSettings; // Storage for a window .ini settings (we ke
|
|||||||
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
|
// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
|
||||||
typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
|
typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
|
||||||
typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
|
typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
|
||||||
|
typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags
|
||||||
typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag()
|
typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag()
|
||||||
typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags
|
typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags
|
||||||
typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
|
typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
|
||||||
@ -193,18 +194,17 @@ namespace ImStb
|
|||||||
// [SECTION] Macros
|
// [SECTION] Macros
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Debug Logging
|
// Debug Printing Into TTY
|
||||||
#ifndef IMGUI_DEBUG_LOG
|
#ifndef IMGUI_DEBUG_PRINT
|
||||||
#define IMGUI_DEBUG_LOG(_FMT,...) printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__)
|
#define IMGUI_DEBUG_PRINT(_FMT,...) printf("[%05d] " _FMT, g.FrameCount, __VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Debug Logging for selected systems. Remove the '((void)0) //' to enable.
|
// Debug Logging for ShowDebugLogWindow(). This is designed for relatively rare events so please don't spam.
|
||||||
//#define IMGUI_DEBUG_LOG_POPUP IMGUI_DEBUG_LOG // Enable log
|
#define IMGUI_DEBUG_LOG(...) ImGui::DebugLog(__VA_ARGS__);
|
||||||
//#define IMGUI_DEBUG_LOG_NAV IMGUI_DEBUG_LOG // Enable log
|
#define IMGUI_DEBUG_LOG_ACTIVEID(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
|
||||||
//#define IMGUI_DEBUG_LOG_IO IMGUI_DEBUG_LOG // Enable log
|
#define IMGUI_DEBUG_LOG_FOCUS(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
|
||||||
#define IMGUI_DEBUG_LOG_POPUP(...) ((void)0) // Disable log
|
#define IMGUI_DEBUG_LOG_POPUP(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
|
||||||
#define IMGUI_DEBUG_LOG_NAV(...) ((void)0) // Disable log
|
#define IMGUI_DEBUG_LOG_NAV(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
|
||||||
#define IMGUI_DEBUG_LOG_IO(...) ((void)0) // Disable log
|
|
||||||
|
|
||||||
// Static Asserts
|
// Static Asserts
|
||||||
#define IM_STATIC_ASSERT(_COND) static_assert(_COND, "")
|
#define IM_STATIC_ASSERT(_COND) static_assert(_COND, "")
|
||||||
@ -1486,8 +1486,20 @@ struct ImGuiSettingsHandler
|
|||||||
// [SECTION] Metrics, Debug Tools
|
// [SECTION] Metrics, Debug Tools
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
enum ImGuiDebugLogFlags_
|
||||||
|
{
|
||||||
|
// Event types
|
||||||
|
ImGuiDebugLogFlags_None = 0,
|
||||||
|
ImGuiDebugLogFlags_EventActiveId = 1 << 0,
|
||||||
|
ImGuiDebugLogFlags_EventFocus = 1 << 1,
|
||||||
|
ImGuiDebugLogFlags_EventPopup = 1 << 2,
|
||||||
|
ImGuiDebugLogFlags_EventNav = 1 << 3,
|
||||||
|
ImGuiDebugLogFlags_EventMask_ = ImGuiDebugLogFlags_EventActiveId | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav
|
||||||
|
};
|
||||||
|
|
||||||
struct ImGuiMetricsConfig
|
struct ImGuiMetricsConfig
|
||||||
{
|
{
|
||||||
|
bool ShowDebugLog;
|
||||||
bool ShowStackTool;
|
bool ShowStackTool;
|
||||||
bool ShowWindowsRects;
|
bool ShowWindowsRects;
|
||||||
bool ShowWindowsBeginOrder;
|
bool ShowWindowsBeginOrder;
|
||||||
@ -1499,14 +1511,10 @@ struct ImGuiMetricsConfig
|
|||||||
|
|
||||||
ImGuiMetricsConfig()
|
ImGuiMetricsConfig()
|
||||||
{
|
{
|
||||||
ShowStackTool = false;
|
ShowDebugLog = ShowStackTool = ShowWindowsRects = ShowWindowsBeginOrder = ShowTablesRects = false;
|
||||||
ShowWindowsRects = false;
|
|
||||||
ShowWindowsBeginOrder = false;
|
|
||||||
ShowTablesRects = false;
|
|
||||||
ShowDrawCmdMesh = true;
|
ShowDrawCmdMesh = true;
|
||||||
ShowDrawCmdBoundingBoxes = true;
|
ShowDrawCmdBoundingBoxes = true;
|
||||||
ShowWindowsRectsType = -1;
|
ShowWindowsRectsType = ShowTablesRectsType = -1;
|
||||||
ShowTablesRectsType = -1;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1799,6 +1807,8 @@ struct ImGuiContext
|
|||||||
int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
|
int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
|
||||||
|
|
||||||
// Debug Tools
|
// Debug Tools
|
||||||
|
ImGuiDebugLogFlags DebugLogFlags;
|
||||||
|
ImGuiTextBuffer DebugLogBuf;
|
||||||
bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
|
bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
|
||||||
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
|
||||||
ImGuiMetricsConfig DebugMetricsConfig;
|
ImGuiMetricsConfig DebugMetricsConfig;
|
||||||
@ -1954,6 +1964,7 @@ struct ImGuiContext
|
|||||||
LogDepthRef = 0;
|
LogDepthRef = 0;
|
||||||
LogDepthToExpand = LogDepthToExpandDefault = 2;
|
LogDepthToExpand = LogDepthToExpandDefault = 2;
|
||||||
|
|
||||||
|
DebugLogFlags = ImGuiDebugLogFlags_None;
|
||||||
DebugItemPickerActive = false;
|
DebugItemPickerActive = false;
|
||||||
DebugItemPickerBreakId = 0;
|
DebugItemPickerBreakId = 0;
|
||||||
|
|
||||||
@ -2863,12 +2874,15 @@ namespace ImGui
|
|||||||
IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window);
|
IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window);
|
||||||
IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window);
|
IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window);
|
||||||
|
|
||||||
|
// Debug Log
|
||||||
|
IMGUI_API void DebugLog(const char* fmt, ...) IM_FMTARGS(1);
|
||||||
|
IMGUI_API void DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1);
|
||||||
|
|
||||||
// Debug Tools
|
// Debug Tools
|
||||||
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
||||||
IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
|
||||||
inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(g.LastItemData.Rect.Min, g.LastItemData.Rect.Max, col); }
|
inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(g.LastItemData.Rect.Min, g.LastItemData.Rect.Max, col); }
|
||||||
inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
|
inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
|
||||||
|
|
||||||
IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
|
IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
|
||||||
IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end);
|
IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end);
|
||||||
IMGUI_API void DebugNodeColumns(ImGuiOldColumns* columns);
|
IMGUI_API void DebugNodeColumns(ImGuiOldColumns* columns);
|
||||||
|
@ -539,7 +539,7 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
|
|||||||
if (table->RefScale != 0.0f && table->RefScale != new_ref_scale_unit)
|
if (table->RefScale != 0.0f && table->RefScale != new_ref_scale_unit)
|
||||||
{
|
{
|
||||||
const float scale_factor = new_ref_scale_unit / table->RefScale;
|
const float scale_factor = new_ref_scale_unit / table->RefScale;
|
||||||
//IMGUI_DEBUG_LOG("[table] %08X RefScaleUnit %.3f -> %.3f, scaling width by %.3f\n", table->ID, table->RefScaleUnit, new_ref_scale_unit, scale_factor);
|
//IMGUI_DEBUG_PRINT("[table] %08X RefScaleUnit %.3f -> %.3f, scaling width by %.3f\n", table->ID, table->RefScaleUnit, new_ref_scale_unit, scale_factor);
|
||||||
for (int n = 0; n < columns_count; n++)
|
for (int n = 0; n < columns_count; n++)
|
||||||
table->Columns[n].WidthRequest = table->Columns[n].WidthRequest * scale_factor;
|
table->Columns[n].WidthRequest = table->Columns[n].WidthRequest * scale_factor;
|
||||||
}
|
}
|
||||||
@ -2100,7 +2100,7 @@ void ImGui::TableSetColumnWidth(int column_n, float width)
|
|||||||
if (column_0->WidthGiven == column_0_width || column_0->WidthRequest == column_0_width)
|
if (column_0->WidthGiven == column_0_width || column_0->WidthRequest == column_0_width)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//IMGUI_DEBUG_LOG("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthGiven, column_0_width);
|
//IMGUI_DEBUG_PRINT("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthGiven, column_0_width);
|
||||||
ImGuiTableColumn* column_1 = (column_0->NextEnabledColumn != -1) ? &table->Columns[column_0->NextEnabledColumn] : NULL;
|
ImGuiTableColumn* column_1 = (column_0->NextEnabledColumn != -1) ? &table->Columns[column_0->NextEnabledColumn] : NULL;
|
||||||
|
|
||||||
// In this surprisingly not simple because of how we support mixing Fixed and multiple Stretch columns.
|
// In this surprisingly not simple because of how we support mixing Fixed and multiple Stretch columns.
|
||||||
@ -3464,7 +3464,7 @@ void ImGui::TableSettingsAddSettingsHandler()
|
|||||||
// Remove Table (currently only used by TestEngine)
|
// Remove Table (currently only used by TestEngine)
|
||||||
void ImGui::TableRemove(ImGuiTable* table)
|
void ImGui::TableRemove(ImGuiTable* table)
|
||||||
{
|
{
|
||||||
//IMGUI_DEBUG_LOG("TableRemove() id=0x%08X\n", table->ID);
|
//IMGUI_DEBUG_PRINT("TableRemove() id=0x%08X\n", table->ID);
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
int table_idx = g.Tables.GetIndex(table);
|
int table_idx = g.Tables.GetIndex(table);
|
||||||
//memset(table->RawData.Data, 0, table->RawData.size_in_bytes());
|
//memset(table->RawData.Data, 0, table->RawData.size_in_bytes());
|
||||||
@ -3476,7 +3476,7 @@ void ImGui::TableRemove(ImGuiTable* table)
|
|||||||
// Free up/compact internal Table buffers for when it gets unused
|
// Free up/compact internal Table buffers for when it gets unused
|
||||||
void ImGui::TableGcCompactTransientBuffers(ImGuiTable* table)
|
void ImGui::TableGcCompactTransientBuffers(ImGuiTable* table)
|
||||||
{
|
{
|
||||||
//IMGUI_DEBUG_LOG("TableGcCompactTransientBuffers() id=0x%08X\n", table->ID);
|
//IMGUI_DEBUG_PRINT("TableGcCompactTransientBuffers() id=0x%08X\n", table->ID);
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
IM_ASSERT(table->MemoryCompacted == false);
|
IM_ASSERT(table->MemoryCompacted == false);
|
||||||
table->SortSpecs.Specs = NULL;
|
table->SortSpecs.Specs = NULL;
|
||||||
|
@ -4595,7 +4595,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
|||||||
apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1);
|
apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1);
|
||||||
IM_ASSERT(apply_new_text_length <= buf_size);
|
IM_ASSERT(apply_new_text_length <= buf_size);
|
||||||
}
|
}
|
||||||
//IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length);
|
//IMGUI_DEBUG_PRINT("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length);
|
||||||
|
|
||||||
// If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
|
// If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
|
||||||
ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
|
ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
|
||||||
|
Loading…
Reference in New Issue
Block a user