1.89.4: Release cadence continues!
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Special thanks to @PathogenDavid and @GamingMinds-DanielC for their help with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- G3DVu
- Asobo Studio
- Tuxedo Labs
- And individual contributions.
Huge thank you to all past and present supporters!
Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR
- Nav: Tab key goes through every items (when keyboard navigation is active).
- Nav: Enter key works to activate most items (when keyboard navigation is active).
- Added return value to BeginTooltip().
- Examples: Activated keyboard and gamepad navigation by default in all examples.
- Various other fixes related to: Nav, Tables, Drag and Drop, InputText.
- Various improvements to Win32, SDL2, SDL3, GLFW backends.
- Added a Debug Tools to facilitate testing user-code testing Begin/BeginChild return value.
Changes
This is a followup to v1.89, v1.89.1, v1.89.2 and v1.89.3. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
Breaking Changes:
- Renamed
PushAllowKeyboardFocus()
/PopAllowKeyboardFocus()
toPushTabStop()
/PopTabStop()
. Kept inline redirection functions (will obsolete). - Moved the optional "courtesy maths operators" implementation from imgui_internal.h in imgui.h. Even though we encourage using your own maths types and operators by setting up
IM_VEC2_CLASS_EXTRA
, it has been frequently requested by people to use our own. We had an opt-in define which was previously fulfilled by imgui_internal.h. It is now fulfilled by imgui.h. (#6164, #6137, #5966, #2832)- OK:
#define IMGUI_DEFINE_MATH_OPERATORS
/#include "imgui.h"
/#include "imgui_internal.h"
- Error:
#include "imgui.h"
/#define IMGUI_DEFINE_MATH_OPERATORS
/#include "imgui_internal.h"
- Added a dedicated compile-time check message to help diagnose this.
- OK:
- Tooltips: Added 'bool' return value to
BeginTooltip()
for API consistency. Please only submit contents and call EndTooltip() if BeginTooltip() returns true. In reality the function will currently always return true, but further changes down the line may change this, best to clarify API sooner. Updated demo code accordingly. - Commented out redirecting enums/functions names that were marked obsolete two years ago:
ImGuiSliderFlags_ClampOnInput
-> useImGuiSliderFlags_AlwaysClamp
ImGuiInputTextFlags_AlwaysInsertMode
-> useImGuiInputTextFlags_AlwaysOverwrite
ImDrawList::AddBezierCurve()
-> useImDrawList::AddBezierCubic()
ImDrawList::PathBezierCurveTo()
-> useImDrawList::PathBezierCubicCurveTo()
Other Changes:
- Nav: Tabbing now cycles through all items when
ImGuiConfigFlags_NavEnableKeyboard
is set. (#3092, #5759, #787)
While this was generally desired and requested by many, note that its addition means that some types of UI may become more fastidious to use TAB key with, if the navigation cursor cycles through too many items. You can mark items items as not tab-spottable:- Public API:
PushTabStop(false)
/PopTabStop()
. - Internal:
PushItemFlag(ImGuiItemFlags_NoTabStop, true);
. - Internal: Directly pass
ImGuiItemFlags_NoTabStop
toItemAdd()
for custom widgets.
- Public API:
- Nav: Tabbing/Shift-Tabbing can more reliably be used to step out of an item that is not tab-stoppable. (#3092, #5759, #787)
- Nav: Made Enter key submit the same type of Activation event as Space key, allowing to press buttons with Enter. (#5606)
(Enter emulates a "prefer text input" activation vs. Space emulates a "prefer tweak" activation which is to closer to gamepad controls). - Nav: Fixed an issue with Gamepad navigation when the movement lead to a scroll and frame time > repeat rate. Triggering a new move request on the same frame as a move result lead to an incorrect calculation and loss of navigation id. (#6171)
- Nav: Fixed SetItemDefaultFocus() from not scrolling when item is partially visible. (#2814, #2812) [@DomGries]
- Tables: Fixed an issue where user's Y cursor movement within a hidden column would have side-effects.
- IO: Lifted constraint to call
io.AddEventXXX
functions from current context. (#4921, #5856, #6199) - InputText: Fixed not being able to use CTRL+Tab while an InputText() using Tab for completion or text data is active (regression from 1.89).
- Drag and Drop: Fixed handling of overlapping targets when smaller one is submitted 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 avoid interferences. (#5817, #6183) [@DimaKoltun]
- Debug Tools: Added
io.ConfigDebugBeginReturnValueOnce
/io.ConfigDebugBeginReturnValueLoop
options to simulate Begin/BeginChild returning false to facilitate debugging user behavior. - Demo: Updated to test return value of
BeginTooltip()
. - 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]
- Backends: Win32: Use
WM_NCMOUSEMOVE
/WM_NCMOUSELEAVE
to track mouse positions over non-client area (e.g. OS decorations) when app is not focused. (#6045, #6162) - Backends: SDL2, SDL3: Accept
SDL_GetPerformanceCounter()
not returning a monotonically increasing value. (#6189, #6114, #3644) [@adamkewley] - Backends: GLFW: Avoid using
glfwGetError()
andglfwGetGamepadState()
on Emscripten, which recently updated its GLFW emulation layer to GLFW 3.3 without supporting those. (#6240) - Examples: Android: Fixed example build for Gradle 8. (#6229, #6227) [@duddel]
- Examples: Updated all examples application to enable
ImGuiConfigFlags_NavEnableKeyboard
andImGuiConfigFlags_NavEnableGamepad
by default. (#787) - Internals: Misc tweaks to facilitate applying an explicit-context patch. (#5856) [@Dragnalith]
New exciting projects!
Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear ImGui Automation/Test Engine & Test Suite
https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen
https://github.com/dearimgui/dear_bindings
Also note the release of Dear ImGui Bundle by @pthom
https://github.com/pthom/imgui_bundle
Gallery
Below a selection of screenshots from Gallery threads...
Rat GUI
The most convenient simulation tool for magnet engineers
https://rat-gui.ch/index.html
RTSA (Real-Time Spectrum Analyzer) Suite
https://aaronia.com/software/rtsa-suite/
Structural Mechanics software ObjectiveFrame
https://github.com/jonaslindemann/objectiveframe
OpenSim Creator
https://github.com/ComputationalBiomechanicsLab/opensim-creator
Fun thing, Quake 3 re-release using a Dear ImGui underlying logic for in-game menus:
Astro Duel 2
https://store.steampowered.com/app/655350/Astro_Duel_2/)
rustym: "Dear ImGui has been just instrumental to creating Astro Duel 2. We’ve built debug menus, inspectors, editors and production tools all atop this incredible open source framework. What an industry gem!"