v1.85
Hello!
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!
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
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 @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid, @AidanSun05, @thedmd, for their continued contributions and helping with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
Huge thank you to all past and present supporters!
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;
- New Stack Tool to help debugging the source of ID. Access from Demo>Tools or Metrics>Tools.
SetKeyboardFocusHere()
now works on clipped items (finally).- Nav: Plenty of fixes for gamepad/keyboard navigation.
- Docking, Viewports: various fixes.
- Menus: Fixed layout issue with MenuItem() calls inside a menu bar.
- Added SDL_Renderer backend for upcoming SDL 2.0.18+ (yet unreleased). Note that using native GL/DX backends is generally recommended but this is now available for users of the SDL_Renderer features.
- Dozens of other fixes and improvements.
Breaking Changes
(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
in your imconfig.h
file to make sure you are not using to-be-obsoleted symbols.)
- Removed
GetWindowContentRegionWidth()
function. keep inline redirection helper. Can useGetWindowContentRegionMax().x - GetWindowContentRegionMin().x
instead but it's not very useful in practice, and the only use of it in the demo was ill-fit. UsingGetContentRegionAvail().x
is generally a better choice.
Other Changes
- Debug: Stack Tool: Added
Stack Tool
available inDemo->Tools->Stack Tool
,Metrics->Tools
, or by calling theShowStackToolWindow()
function. The tool run queries on hovered id to display details about individual components that were hashed to create an ID. It helps understanding the ID stack system and debugging potential ID collisions. (#4631) [@ocornut, @rokups] - Windows: Fixed background order of overlapping childs submitted sequentially. (#4493)
- IsWindowFocused: Added
ImGuiFocusedFlags_NoPopupHierarchy
flag allowing to exclude child popups from the tested windows when combined withImGuiFocusedFlags_ChildWindows
. - IsWindowHovered: Added
ImGuiHoveredFlags_NoPopupHierarchy
flag allowing to exclude child popups from the tested windows when combined withImGuiHoveredFlags__ChildWindows
. - InputTextMultiline: Fixed label size not being included into window contents rect unless the whole widget is clipped.
- InputText: Allow activating/cancelling/validating input with gamepad nav events. (#2321, #4552)
- InputText: Fixed selection rectangle appearing one frame late when selecting all.
- TextUnformatted: Accept null ranges including (NULL,NULL) without asserting, in order to conform to common idioms (e.g. passing .data(), .data() + .size() from a null string). (#3615)
- Disabled: Added assert guard for mismatching
BeginDisabled()
/EndDisabled()
blocks. (#211) - Nav: Fixed using
SetKeyboardFocusHere()
on non-visible/clipped items. It now works and will scroll toward the item. When called during a frame where the parent window is appearing, scrolling will aim to center the item in the window. When calling during a frame where the parent window is already visible, scrolling will aim to scroll as little as possible to make the item visible. We will later expose scroll functions and flags in public API to select those behaviors. (#343, #4079, #2352) - Nav: Fixed using
SetKeyboardFocusHere()
from activating a different item on the next frame if submitted items have changed during that frame. (#432) - Nav: Fixed toggling menu layer with Alt or exiting menu layer with Esc not moving mouse when the
ImGuiConfigFlags_NavEnableSetMousePos
config flag is set. - Nav: Fixed a few widgets from not setting reference keyboard/gamepad navigation ID when activated with mouse. More specifically:
BeginTabItem()
, the scrolling arrows ofBeginTabBar()
, the arrow section ofTreeNode()
, the +/- buttons ofInputInt()
/InputFloat()
,Selectable()
withImGuiSelectableFlags_SelectOnRelease
. More generally: any direct use ofButtonBehavior()
with the PressedOnClick/PressedOnDoubleClick/PressedOnRelease button policy. - Nav: Fixed an issue with losing focus on docked windows when pressing Alt while keyboard navigation is disabled. (#4547, #4439) [@PathogenDavid]
- Nav: Fixed vertical scoring offset when wrapping on Y in a decorated window.
- Nav: Improve scrolling behavior when navigating to an item larger than view.
- TreePush(): removed unnecessary/inconsistent legacy behavior where passing a NULL value to the
TreePush(const char*)
andTreePush(const void*)
functions would use an hard-coded replacement. The only situation where that change would make a meaningful difference isTreePush((const char*)NULL)
(explicitly casting a null pointer to const char*), which is unlikely and will now crash. You may replace it with anything else. - ColorEdit4: Fixed not being able to change hue when saturation is 0. (#4014) [@rokups]
- ColorEdit4: Fixed hue resetting to 0 when it is set to 255. [@rokups]
- ColorEdit4: Fixed hue value jitter when source color is stored as RGB in 32-bit integer and perform RGB<>HSV round trips every frames. [@rokups]
- ColorPicker4: Fixed picker being unable to select exact 1.0f color when dragging toward the edges of the SV square (previously picked 0.999989986f). (#3517) [@rokups]
- Menus: Fixed vertical alignments of
MenuItem()
calls within a menu bar (broken in 1.84). (#4538) - Menus: Improve closing logic when moving diagonally in empty between between parent and child menus to accommodate for varying font size and dpi.
- Menus: Fixed crash when navigating left inside a child window inside a sub-menu. (#4510).
- Menus: Fixed an assertion happening in some situations when closing nested menus (broken in 1.83). (#4640)
- Drag and Drop: Fixed using
BeginDragDropSource()
inside aBeginChild()
that returned false. (#4515) - PlotHistogram: Fixed zero-line position when manually specifying min<0 and max>0. (#4349) [@filippocrocchini]
- Misc: Added asserts for missing
PopItemFlag()
calls. - Misc: Fixed printf-style format checks on Clang+MinGW. (#4626, #4183, #3592) [@guusw]
- IO: Added
io.WantCaptureMouseUnlessPopupClose
alternative toio.WantCaptureMouse
. (#4480) This allows apps to receive the click on void when that click is used to close popup (by default, clicking on a void when a popup is open will close the popup but not releaseio.WantCaptureMouse
). - Fonts: imgui_freetype: Fixed crash when
FT_Render_Glyph()
fails to render a glyph and returns NULL (which apparently happens with Freetype 2.11). (#4394, #4145?). - Fonts: Fixed
ImFontAtlas::ClearInputData()
marking atlas as not built. (#4455, #3487) - Backends: Added more implicit asserts to detect invalid/redundant calls to Shutdown functions. (#4562)
- Backends: OpenGL3: Fixed our custom GL loader conflicting with user using GL3W. (#4445) [@rokups]
- Backends: WebGPU: Fixed for latest specs. (#4472, #4512) [@Kangz, @bfierz]
- Backends: SDL_Renderer: Added SDL_Renderer backend compatible with upcoming SDL 2.0.18. (#3926) [@1bsyl]
- Backends: Metal: Fixed a crash when clipping rect larger than framebuffer is submitted via a direct unclipped
PushClipRect()
call. (#4464) - Backends: OSX: Use mach_absolute_time as CFAbsoluteTimeGetCurrent can jump backwards. (#4557, #4563) [@lfnoise]
- Backends: All renderers: Normalize clipping rect handling across backends. (#4464)
- Examples: Added SDL + SDL_Renderer example in examples/example_sdl_sdlrenderer folder. (#3926) [@1bsyl]
Other branches & Beta features!
Also see previous release notes such as 1.80, 1.81, 1.80, 1.83, 1.84.
The docking (#2109) and multi-viewports (#1542) features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.
Some of changes from 1.84 to 1.85 related to the docking branch (multi-viewport and docking features) include:
- IsWindowFocused: Fixed using
ImGuiFocusedFlags_ChildWindows
(without_RootWindow
) from leaking the docking hierarchy. AddedImGuiFocusedFlags_DockHierarchy
flag to consider docking hierarchy in the test. - IsWindowHovered: Fixed using
ImGuiHoveredFlags_ChildWindows
(without_RootWindow
) from leaking the docking hierarchy. AddedImGuiHoveredFlags_DockHierarchy
flag to consider docking hierarchy in the test. - Nav: Fixed an issue with losing focus on docked windows when pressing Alt while keyboard navigation is disabled. (#4547, #4439) [@PathogenDavid]
- Docking: Fixed
IsItemHovered()
and functions depending on it (e.g.BeginPopupContextItem()
) when called after Begin() on a docked window (broken 2021/03/04). (#3851) - Docking: Improved resizing system so that non-central zone are better at keeping their fixed size. The algorithm is still not handling the allocation of size ideally for nested sibling, but it got better.
- Docking: Fixed settings load issue when mouse wheeling. (#4310)
- Docking: Fixed manually created floating node with a central node from not hiding when windows are gone.
- Docking + Drag and Drop: Fixed using
BeginDragDropSource()
orBeginDragDropTarget()
inside aBegin()
that returned false because the window is docked. (#4515) - Viewports: Fixed a crash while a window owning its viewport disappear while being dragged. It would manifest when e.g. reconfiguring dock nodes while dragging.
- Viewports: Fixed unnecessary creation of temporary viewports when multiple docked windows got reassigned to a new node (created mid-frame) which already has a HostWindow.
- Viewports: Fixed window with viewport ini data immediately merged into a host viewport from leaving a temporary viewport alive for a frame (would leak into backend).
There's a CMake pull-request (#1713) if you prefer a traditional CMake integration over registering sources files in your own project. There's a premake5 branch if you prefer Visual Studio projects generated by premake.
Gallery
Below a selection of screenshots from Gallery threads...
@mnesarco "BAWR This is a tool to automate the icons generation from sets of svg files into fonts and atlases."
https://github.com/mnesarco/bawr
@xhighway999 "LuaPad An awesome online Lua sandbox"
https://coffeecupentertainment.com/static/luapad/luapad.html
@vtushevskiy _"GLSL exlorer (standalone shadertoy "on steroids")"
https://vimeo.com/605113516
@AidanSun05 "Network Socket Terminal (NST) is an application for Internet and Bluetooth communication on Windows and Linux computers."
https://github.com/NSTerminal/terminal
@Jaysmito101 "Procedural Terrain Generation And Shading Tool With Node Editor, Shader Editor, Skybox, Lua Scripting, ,..."
@parbo Custom/experimental Spotify client
PS: 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.