From 0c5b0c8b97d5bc100e85440ee81f1d8294eac3ef Mon Sep 17 00:00:00 2001 From: Rokas Kupstys Date: Thu, 25 Feb 2021 14:04:07 +0200 Subject: [PATCH] Internals: Add a way to request window to not process any interactions for specified number of frames. --- backends/imgui_impl_win32.cpp | 4 ++-- imgui.cpp | 7 +++++++ imgui_internal.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/backends/imgui_impl_win32.cpp b/backends/imgui_impl_win32.cpp index 04e462ce4..356f84696 100644 --- a/backends/imgui_impl_win32.cpp +++ b/backends/imgui_impl_win32.cpp @@ -134,7 +134,7 @@ bool ImGui_ImplWin32_Init(void* hwnd) break; } #endif // IMGUI_IMPL_WIN32_DISABLE_GAMEPAD - + return true; } @@ -148,7 +148,7 @@ void ImGui_ImplWin32_Shutdown() g_XInputGetCapabilities = NULL; g_XInputGetState = NULL; #endif // IMGUI_IMPL_WIN32_DISABLE_GAMEPAD - + g_hWnd = NULL; g_Time = 0; g_TicksPerSecond = 0; diff --git a/imgui.cpp b/imgui.cpp index 031eecf93..75675ee29 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -6294,6 +6294,13 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) // Update the Hidden flag window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0) || (window->HiddenFramesForRenderOnly > 0); + // Disable inputs for requested number of frames + if (window->DisableInputsFrames > 0) + { + window->DisableInputsFrames--; + window->Flags |= ImGuiWindowFlags_NoInputs; + } + // Update the SkipItems flag, used to early out of all items functions (no layout required) bool skip_items = false; if (window->Collapsed || !window->Active || window->Hidden) diff --git a/imgui_internal.h b/imgui_internal.h index d01f4a6a3..75e7e5e83 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -1784,6 +1784,7 @@ struct IMGUI_API ImGuiWindow ImS8 HiddenFramesCanSkipItems; // Hide the window for N frames ImS8 HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size ImS8 HiddenFramesForRenderOnly; // Hide the window until frame N at Render() time only + ImS8 DisableInputsFrames; // Disable window interactions for N frames ImGuiCond SetWindowPosAllowFlags : 8; // store acceptable condition flags for SetNextWindowPos() use. ImGuiCond SetWindowSizeAllowFlags : 8; // store acceptable condition flags for SetNextWindowSize() use. ImGuiCond SetWindowCollapsedAllowFlags : 8; // store acceptable condition flags for SetNextWindowCollapsed() use.