v1.63
v1.63: Summer heat
See https://github.com/ocornut/imgui for the project homepage.
See https://github.com/ocornut/imgui/releases for earlier release notes.
See https://github.com/ocornut/imgui/wiki for language/framework bindings, links, 3rd parties helpers/extensions.
See https://discourse.dearimgui.org new users technical support.
Scroll below for a gallery of screenshots.
TL;DR;
InputText()
can easily be bound to std::string-like types using theImGuiInputTextFlags_CallbackResize
flag. Added an optional (not part of core imgui) misc/stl/imgui_stl.h and .cpp wrapper to demonstrate using this flag with std:;string.- Nav: Added a new CTRL+TAB window list and changed the highlight system accordingly. [Reminder: Enable Beta keyboard navigation with
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
]. - Various fixes and improvements to the Drag and Drop system.
- Examples: Added a Metal renderer (imgui_impl_metal.mm) by @warrenm.
- Examples: Added an early/experimental raw OSX platform backend (imgui_impl_osx.mm) by @Pagghiu @itamago @ocornut. This is a bit incomplete and not super useful as GLFW/SDL-based multi-platform back-ends are often preferable, but one aim is to build toward nicer native OSX+iOS examples (
example_apple_metal/
currently compiles for iOS as well). - Examples: Made the OpenGL example support more versions of OpenGL out of the box, as well as ES 3.0 and WebGL for empscripten (and probably ES 2.0 will minor tweaks).
- Created https://discourse.dearimgui.org, a discourse forum to transition technical support for new users of the library (question pertaining to compiling/linking/binding/inputs/rendering/fonts will progressively be redirected there). If you have time to check this forum from time to time, please do! Thanks to Discourse for providing free hosting for the project!
- Dozens of other fixes and additions!
- This is the 50th tagged release of dear imgui!
Thank you
Ongoing work on dear imgui is currently being sponsored by Blizzard Entertainment as well as dozens of individual users, hobbyists and studios on Patreon. See the Readme for details and a more complete list. Huge thank you to all of you, past and present supporters! You help is very meaningful and useful.
How to update
NB: prefer checking out the latest version from master. The library is fairly stable and issues/regressions are being fixed fast when reported.
Overwrite every file except imconfig.h (if you modified it). Read the Breaking Changes
section below, and the corresponding log in imgui.cpp. If you have a problem with a missing function/symbols, search for its name in the code, there will likely be a comment about it. Please report any issue to the GitHub page (or on Twitter).
The previous release (1.62) had the examples binding reorganized. If you are updating from version older than 1.62, you may take the chance to update update your bindings and consider using unmodified bindings for some aspects of your engine integration (e.g. use unmodified versions of imgui_impl_win32.cpp, or imgui_impl_glfw.cpp). The advantage of doing so is that you will benefit from multi-viewport support added to standard bindings as we move toward imgui 1.70. Note that your existing bindings and integration should still work either.
You can also enable IMGUI_DISABLE_OBSOLETE_FUNCTIONS
in imconfig.h to forcefully disable legacy names and symbols. Doing it every once in a while is a good way to make sure you are not using obsolete stuff. Dear ImGui is actively being developed and API changes have a little more frequent lately. They are carefully documented and should not affect everyone. Keeping your copy of dear imgui updated is recommended!
Breaking Changes
- Style: Renamed
ImGuiCol_ModalWindowDarkening
toImGuiCol_ModalWindowDimBg
for consistency with other features. Kept redirection enum (will obsolete). - Changed
ImGui::GetTime()
return value from float to double to avoid accumulating floating point imprecision over time. - Removed per-window
ImGuiWindowFlags_ResizeFromAnySide
Beta flag in favorio.ConfigResizeWindowsFromEdges=true
to enable the feature globally. (#1495)
The feature is not currently enabled by default because it is not satisfying enough, but will eventually be. - InputText: Renamed
ImGuiTextEditCallback
toImGuiInputTextCallback
,ImGuiTextEditCallbackData
toImGuiInputTextCallbackData
for consistency. Kept redirection types (will obsolete). - InputText: Removed
ImGuiTextEditCallbackData::ReadOnly
since it is a duplication of (ImGuiTextEditCallbackData::Flags & ImGuiInputTextFlags_ReadOnly
). - Renamed
IsItemDeactivatedAfterChange()
toIsItemDeactivatedAfterEdit()
for consistency with newIsItemEdited()
API.
Kept redirection function (will obsolete soonish asIsItemDeactivatedAfterChange()
is very recent). - Renamed
io.OptCursorBlink
toio.ConfigCursorBlink
,io.OptMacOSXBehaviors to
io.ConfigMacOSXBehaviors` for consistency. (#1427, #473) - Removed obsolete redirection functions:
CollapsingHeader()
variation with 2 bools - marked obsolete in v1.49, May 2016.
Other Changes
Reading a Changelog is definitively not fun! However, by reading this you will likely learn about both old and new functionalities that may be useful to you.
- ArrowButton: Fixed to honor
PushButtonRepeat()
setting (and internals' ImGuiItemFlags_ButtonRepeat). - ArrowButton: Setup current line text baseline so that
ArrowButton() + SameLine() + Text()
are aligned vertically properly. - Nav: Added a CTRL+TAB window list and changed the highlight system accordingly. The change is motivated by upcoming Docking features. (#787)
- Nav: Made CTRL+TAB skip menus + skip the current navigation window if is has the
ImGuiWindow_NoNavFocus
set. (#787) While it was previously possible, you won't be able to CTRL-TAB out and immediately back in a window with theImGuiWindow_NoNavFocus
flag. - Window: Allow menu and popups windows from ignoring the
style.WindowMinSize
values so short menus/popups are not padded. (#1909) - Window: Added global
io.ConfigResizeWindowsFromEdges
option to enable resizing windows from their edges and from the lower-left corner. (#1495) - Window: Collapse button shows hovering highlight + clicking and dragging on it allows to drag the window as well.
- Added
IsItemEdited()
to query if the last item modified its value (or was pressed). This is equivalent to the bool returned by most widgets. It is useful in some situation e.g. using InputText() withImGuiInputTextFlags_EnterReturnsTrue
. (#2034) - InputText: Added support for buffer size/capacity changes via the
ImGuiInputTextFlags_CallbackResize
flag. (#2006, #1443, #1008). - InputText: Fixed not tracking the cursor horizontally when modifying the text buffer through a callback.
- InputText: Fixed minor off-by-one issue when submitting a buffer size smaller than the initial zero-terminated buffer contents.
- InputText: Fixed a few pathological crash cases on single-line InputText widget with multiple millions characters worth of contents. Because the current text drawing function reserve for a worst-case amount of vertices and how we handle horizontal clipping, we currently just avoid displaying those single-line widgets when they are over a threshold of 2 millions characters, until a better solution is found.
- Drag and Drop: Fixed an incorrect assert when dropping a source that is submitted after the target (bug introduced with 1.62 changes related to the addition of
IsItemDeactivated()
). (#1875, #143) - Drag and Drop: Fixed
ImGuiDragDropFlags_SourceNoDisableHover
to affect hovering state prior to calling IsItemHovered() + fixed description. (#143) - Drag and Drop: Calling
BeginTooltip()
between aBeginDragSource()
/EndDragSource()
orBeginDropTarget()
/EndDropTarget()
uses adjusted tooltip settings matching the one created when callingBeginDragSource()
without theImGuiDragDropFlags_SourceNoPreviewTooltip
flag. (#143) - Drag and Drop: Payload stays available and under the mouse if the source stops being submitted, however the tooltip is replaced by "...". (#1725)
- Drag and Drop: Added
ImGuiDragDropFlags_SourceAutoExpirePayload
flag to force payload to expire if the source stops being submitted. (#1725, #143). - IsItemHovered(): Added
ImGuiHoveredFlags_AllowWhenDisabled
flag to query hovered status on disabled items. (#1940, #211) - Selectable: Added
ImGuiSelectableFlags_Disabled
flag in the public API. (#211) - ColorEdit4: Fixed a bug when text input or drag and drop leading to unsaturated HSV values would erroneously alter the resulting color. (#2050)
- Misc: Added optional misc/stl/imgui_stl.h wrapper to use with STL types (e.g. InputText with std::string). (#2006, #1443, #1008)
- Misc: Added IMGUI_VERSION_NUM for easy compile-time testing. (#2025)
- Misc: Added
ImGuiMouseCursor_Hand
cursor enum + corresponding software cursor. (#1913, 1914) [@aiekick, @ocornut] - Misc: Tweaked software mouse cursor offset to match the offset of the corresponding Windows 10 cursors.
- Made assertion more clear when trying to call Begin() outside of the NewFrame()..EndFrame() scope. (#1987)
- Fixed assertion when transitioning from an active ID to another within a group, affecting ColorPicker (broken in 1.62). (#2023, #820, #956, #1875).
- Fixed PushID() from keeping alive the new ID Stack top value (if a previously active widget shared the ID it would be erroneously kept alive).
- Fixed horizontal mouse wheel not forwarding the request to the parent window if
ImGuiWindowFlags_NoScrollWithMouse
is set. (#1463, #1380, #1502) - Fixed a include build issue for Cygwin in non-POSIX (Win32) mode. (#1917, #1319, #276)
- ImDrawList: Improved handling for worst-case vertices reservation policy when large amount of text (e.g. 1+ million character strings) are being submitted in a single call. It would typically have crashed InputTextMultiline(). (#200)
- OS/Windows: Fixed missing
ImmReleaseContext()
call in the default Win32 IME handler. (#1932) [@vby] - Metrics: Changed
io.MetricsActiveWindows
to reflect the number of active windows (!= from visible windows), which is useful for lazy/idle render mechanisms as new windows are typically not visible for one frame. - Metrics: Added
io.MetricsRenderWindow
to reflect the number of visible windows. - Metrics: Added
io.MetricsActiveAllocations
, moving away from the cross-context global counters than we previously used. (#1565, #1599, #586) - Demo: Added basic Drag and Drop demo. (#143)
- Demo: Modified the Console example to use InsertChars() in the input text callback instead of poking directly into the buffer. Although this won't make a difference in the example itself, using InsertChars() will honor the resizing callback properly. (#2006, #1443, #1008).
- Demo: Clarified the use of IsItemHovered()/IsItemActive() right after being in the "Active, Focused, Hovered & Focused Tests" section.
- Examples: Tweaked the main.cpp of each example.
- Examples: Metal: Added Metal rendering backend. (#1929, #1873) [@warrenm]
- Examples: OSX: Added early raw OSX platform backend. (#1873) [@Pagghiu, @itamago, @ocornut]
- Examples: Added mac OSX & iOS + Metal example in example_apple_metal/. (#1929, #1873) [@warrenm]
- Examples: Added mac OSX + OpenGL2 example in example_apple_opengl2/. (#1873)
- Examples: OpenGL3: Added shaders more versions of GLSL. (#1938, #1941, #1900, #1513, #1466, etc.)
- Examples: OpenGL3: Tweaked the imgui_impl_opengl3.cpp to work as-is with Emscripten + WebGL 2.0. (#1941). [@o-micron]
- Examples: OpenGL3: Made the example app default to GL 3.0 + GLSL 130 (instead of GL 3.2 + GLSL 150) unless on Mac.
- Examples: OpenGL3: Added error output when shaders fail to compile/link.
- Examples: OpenGL3: Added support for glew and glad OpenGL loaders out of the box. (#2001, #2002) [@jdumas]
- Examples: OpenGL2: Disabling/restoring GL_LIGHTING and GL_COLOR_MATERIAL to increase compatibility with legacy OpenGL applications. (#1996)
- Examples: DirectX10, DirectX11: Fixed unreleased resources in Init and Shutdown functions. (#1944)
- Examples: DirectX11: Querying for IDXGIFactory instead of IDXGIFactory1 to increase compatibility. (#1989) [@matt77hias]
- Examples: Vulkan: Fixed handling of VkSurfaceCapabilitiesKHR::maxImageCount = 0 case. Tweaked present mode selections.
- Examples: Win32, Glfw, SDL: Added support for the ImGuiMouseCursor_Hand cursor.
What's next?
I will release 1.64 very soon, where the only difference between 1.63 and 1.64 will be that lots of functions are being moved around. If you do NOT have any local changes to your copy of imgui, both versions will be identical to you. If you DO have local changes, it is strongly advised that you update to 1.63 and isolate your modifications into nice patches. Your modifications will probably conflict in the 1.63->1.64 transitions. However since 1.63->1.64 will only constitute in moved code if you have those neat patches you should be able to reapply them manually.
Modifying imgui.cpp is not discouraged. Remember that you do not need to modify imgui.cpp in order to add new functions into the ImGui:: namespace, you can freely add them from your own file and use <imgui_internal.h>
to access internal structures and API.
Still working on multi-viewports and docking. Docking has made great progress since my last update here, to the point where various users have started using the private docking branch to provide feedback. I expect to make the Docking branch public shortly. Also see early attempts at improving the style with gradients, shadows, text color variations.
Gallery
Some of the software spotted since the last release..
You can submit pictures or video of your games/applications using dear imgui!
See more pictures here: #1902 and on the wiki: Software using dear imgui.
Timelapse View for HG (Mercurial) by @jschmidt42
Patterns of Life by @armadillu
Untitled JRPG tooling by @oxysoft
From 22 Racing Series by GOATi
HackEd (Graphical editor for System Shock 1)
Blocks (multi-document editor) by @JSandusky