Skip to content

v1.63

Compare
Choose a tag to compare
@ocornut ocornut released this 29 Aug 15:42
· 3912 commits to master since this release

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 the ImGuiInputTextFlags_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!

ctrl_tab

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 to ImGuiCol_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 favor io.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 to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete).
  • InputText: Removed ImGuiTextEditCallbackData::ReadOnly since it is a duplication of (ImGuiTextEditCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
  • Renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API.
    Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
  • Renamed io.OptCursorBlink to io.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 the ImGuiWindow_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() with ImGuiInputTextFlags_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 a BeginDragSource()/EndDragSource() or BeginDropTarget()/EndDropTarget() uses adjusted tooltip settings matching the one created when calling BeginDragSource() without the ImGuiDragDropFlags_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
41929826-5218af72-7947-11e8-99b3-a1a7aead9369

Patterns of Life by @armadillu
Patterns of Life

Graphite 3 by @BrunoLevy
graphite_font_awesome

Untitled JRPG tooling by @oxysoft
image

From 22 Racing Series by GOATi
22 racing series

HackEd (Graphical editor for System Shock 1)
4K glory

Blocks (multi-document editor) by @JSandusky
Blocks