Removed leftover KeepAliveID() call in GetIDWithSeed() variant. (#5181) + doc tweaks.
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index 1ae3b08..99b8906 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -43,6 +43,8 @@
automatically handling event capture. Examples that are using the OSX backend have removed
all the now-unnecessary calls to ImGui_ImplOSX_HandleEvent(), applications can do as well.
[@stuartcarnie] (#4821)
+- Internals: calling ButtonBehavior() without calling ItemAdd() now requires a KeepAliveID().
+ This is because the KeepAliveID() call was moved from GetID() to ItemAdd()). (#5181)
Other Changes:
diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md
index 94f78dc..b50595c 100644
--- a/docs/EXAMPLES.md
+++ b/docs/EXAMPLES.md
@@ -17,56 +17,60 @@
Integration in a typical existing application, should take <20 lines when using standard backends.
- At initialization:
- call ImGui::CreateContext()
- call ImGui_ImplXXXX_Init() for each backend.
+```cpp
+At initialization:
+ call ImGui::CreateContext()
+ call ImGui_ImplXXXX_Init() for each backend.
- At the beginning of your frame:
- call ImGui_ImplXXXX_NewFrame() for each backend.
- call ImGui::NewFrame()
+At the beginning of your frame:
+ call ImGui_ImplXXXX_NewFrame() for each backend.
+ call ImGui::NewFrame()
- At the end of your frame:
- call ImGui::Render()
- call ImGui_ImplXXXX_RenderDrawData() for your Renderer backend.
+At the end of your frame:
+ call ImGui::Render()
+ call ImGui_ImplXXXX_RenderDrawData() for your Renderer backend.
- At shutdown:
- call ImGui_ImplXXXX_Shutdown() for each backend.
- call ImGui::DestroyContext()
+At shutdown:
+ call ImGui_ImplXXXX_Shutdown() for each backend.
+ call ImGui::DestroyContext()
+```
Example (using [backends/imgui_impl_win32.cpp](https://github.com/ocornut/imgui/blob/master/backends/imgui_impl_win32.cpp) + [backends/imgui_impl_dx11.cpp](https://github.com/ocornut/imgui/blob/master/backends/imgui_impl_dx11.cpp)):
- // Create a Dear ImGui context, setup some options
- ImGui::CreateContext();
- ImGuiIO& io = ImGui::GetIO();
- io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable some options
+```cpp
+// Create a Dear ImGui context, setup some options
+ImGui::CreateContext();
+ImGuiIO& io = ImGui::GetIO();
+io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable some options
- // Initialize Platform + Renderer backends (here: using imgui_impl_win32.cpp + imgui_impl_dx11.cpp)
- ImGui_ImplWin32_Init(my_hwnd);
- ImGui_ImplDX11_Init(my_d3d_device, my_d3d_device_context);
+// Initialize Platform + Renderer backends (here: using imgui_impl_win32.cpp + imgui_impl_dx11.cpp)
+ImGui_ImplWin32_Init(my_hwnd);
+ImGui_ImplDX11_Init(my_d3d_device, my_d3d_device_context);
- // Application main loop
- while (true)
- {
- // Beginning of frame: update Renderer + Platform backend, start Dear ImGui frame
- ImGui_ImplDX11_NewFrame();
- ImGui_ImplWin32_NewFrame();
- ImGui::NewFrame();
+// Application main loop
+while (true)
+{
+ // Beginning of frame: update Renderer + Platform backend, start Dear ImGui frame
+ ImGui_ImplDX11_NewFrame();
+ ImGui_ImplWin32_NewFrame();
+ ImGui::NewFrame();
- // Any application code here
- ImGui::Text("Hello, world!");
+ // Any application code here
+ ImGui::Text("Hello, world!");
- // End of frame: render Dear ImGui
- ImGui::Render();
- ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
+ // End of frame: render Dear ImGui
+ ImGui::Render();
+ ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
- // Swap
- g_pSwapChain->Present(1, 0);
- }
+ // Swap
+ g_pSwapChain->Present(1, 0);
+}
- // Shutdown
- ImGui_ImplDX11_Shutdown();
- ImGui_ImplWin32_Shutdown();
- ImGui::DestroyContext();
+// Shutdown
+ImGui_ImplDX11_Shutdown();
+ImGui_ImplWin32_Shutdown();
+ImGui::DestroyContext();
+```
Please read 'PROGRAMMER GUIDE' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
Please read the comments and instruction at the top of each file.
diff --git a/imgui.cpp b/imgui.cpp
index f8a2375..f5408fa 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -400,7 +400,7 @@
- 2022/01/10 (1.87) - inputs: reworked keyboard IO. Removed io.KeyMap[], io.KeysDown[] in favor of calling io.AddKeyEvent(). Removed GetKeyIndex(), now unecessary. All IsKeyXXX() functions now take ImGuiKey values. All features are still functional until IMGUI_DISABLE_OBSOLETE_KEYIO is defined. Read Changelog and Release Notes for details.
- IsKeyPressed(MY_NATIVE_KEY_XXX) -> use IsKeyPressed(ImGuiKey_XXX)
- IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -> use IsKeyPressed(ImGuiKey_XXX)
- - Backend writing to io.KeyMap[],io.KeysDown[] -> backend should call io.AddKeyEvent()
+ - Backend writing to io.KeyMap[],io.KeysDown[] -> backend should call io.AddKeyEvent() (+ call io.SetKeyEventNativeData() if you want legacy user code to stil function with legacy key codes).
- Backend writing to io.KeyCtrl, io.KeyShift.. -> backend should call io.AddKeyEvent() with ImGuiKey_ModXXX values. *IF YOU PULLED CODE BETWEEN 2021/01/10 and 2021/01/27: We used to have a io.AddKeyModsEvent() function which was now replaced by io.AddKeyEvent() with ImGuiKey_ModXXX values.*
- one case won't work with backward compatibility: if your custom backend used ImGuiKey as mock native indices (e.g. "io.KeyMap[ImGuiKey_A] = ImGuiKey_A") because those values are now larger than the legacy KeyDown[] array. Will assert.
- inputs: added ImGuiKey_ModCtrl/ImGuiKey_ModShift/ImGuiKey_ModAlt/ImGuiKey_ModSuper values to submit keyboard modifiers using io.AddKeyEvent(), instead of writing directly to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper.
@@ -7439,7 +7439,6 @@
ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGuiID seed)
{
ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
- KeepAliveID(id);
ImGuiContext& g = *GImGui;
if (g.DebugHookIdInfo == id)
DebugHookIdInfo(id, ImGuiDataType_String, str, str_end);