Skip to content

v1.84

Compare
Choose a tag to compare
@ocornut ocornut released this 20 Aug 16:23
· 1820 commits to master since this release

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!


*EDIT* Grab 1.84.1 instead for the hotfix for BeginDisabled(false)


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;

  • BeginDisabled()/EndDisabled() groups *EDIT* Grab 1.84.1 instead for the hotfix for BeginDisabled(false)
  • Tables fixes and improvements
  • Backends refactored to store their state in current context
  • Backends are reporting mouse position even when host platform window is not focused (as long as mouse not captured by another app)
  • OpenGL backends now embeds its own GL loader (#4445)
  • Countless other fixes, improvements.... details below...

1 84

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.)

  • Commented out redirecting functions/enums names that were marked obsolete in 1.67 and 1.69 (March 2019):
    • ImGui::GetOverlayDrawList() -> use ImGui::GetForegroundDrawList()
    • ImFont::GlyphRangesBuilder -> use ImFontGlyphRangesBuilder
  • Backends: OpenGL3: added a third source file imgui_impl_opengl3_loader.h. [@rokups]
  • Backends: GLFW: backend uses glfwSetCursorEnterCallback() + glfwSetWindowFocusCallback() (#3751, #4377, #2445, #4388)
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=true: this is already done for you.
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=false: you WILL NEED to register the GLFW callbacks
      and forward them to the backend:
    • Register glfwSetCursorEnterCallback, forward events to ImGui_ImplGlfw_CursorEnterCallback().
    • Register glfwSetWindowFocusCallback, forward events to ImGui_ImplGlfw_WindowFocusCallback().
  • Backends: SDL2: removed unnecessary/duplicate SDL_Window* parameter from ImGui_ImplSDL2_NewFrame(). (#3244) [@funchal] Kept inline redirection function (will obsolete).
  • Backends: SDL2: backend needs to set SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1") in order to receive mouse clicks events on window focus, otherwise SDL doesn't emit the event. (#3751, #4377, #2445) This is unfortunately a global SDL setting, so enabling it might have a side-effect on your application. It is unlikely to make a difference, but if your app absolutely needs to ignore the initial on-focus click: you can ignore SDL_MOUSEBUTTONDOWN events coming right after a SDL_WINDOWEVENT_FOCUS_GAINED event).
  • Internals: (for custom widgets): because disabled items now sets HoveredID, if you want custom widgets to not react as hovered when disabled, in the majority of use cases it is preferable to check the "hovered" return value of ButtonBehavior() rather than HoveredId == id.

All Changes

  • IO: Added io.AddFocusEvent() api for backend to tell when host window has gained/lost focus. (#4388) [@thedmd]
    If you use a custom backend, consider adding support for this!
  • Disabled: added BeginDisabled()/EndDisabled() api to create a scope where interactions are disabled. (#211)
    • Added style.DisabledAlpha (default to 0.60f) and corresponding ImGuiStyleVar_DisabledAlpha enum. (#211)
    • Unlike the internal-and-undocumented-but-somehow-known PushItemFlag(ImGuiItemFlags_Disabled), this also alters
      visuals. Currently this is done by lowering alpha of all widgets. Future styling system may do that differently.
    • Disabled items set HoveredId, allowing e.g. HoveredIdTimer to run. (#211, #3419) [@rokups]
    • Disabled items more consistently release ActiveId if the active item got disabled. (#211)
    • Nav: Fixed disabled items from being candidate for default focus. (#211, #787)
    • Fixed Selectable() selection not showing when disabled. (#211)
    • Fixed IsItemHovered() returning true on disabled item when navigated to. (#211)
    • Fixed IsItemHovered() when popping disabled state after item, or when using Selectable_Disabled. (#211)
  • Windows: ImGuiWindowFlags_UnsavedDocument/ImGuiTabItemFlags_UnsavedDocument displays a dot instead of a '*' so it
    is independent from font style. When in a tab, the dot is displayed at the same position as the close button.
    Added extra comments to clarify the purpose of this flag in the context of docked windows.
  • Tables: Added ImGuiTableColumnFlags_Disabled acting a master disable over (hidden from user/context menu). (#3935)
  • Tables: Clarified that TableSetColumnEnabled() requires the table to use the ImGuiTableFlags_Hideable flag, because it manipulates the user-accessible show/hide state. (#3935)
  • Tables: Added ImGuiTableColumnFlags_NoHeaderLabel to request TableHeadersRow() to not submit label for a column.
    Convenient for some small columns. Name will still appear in context menu. (#4206).
  • Tables: Fixed columns order on TableSetupScrollFreeze() if previous data got frozen columns out of their section.
  • Tables: Fixed invalid data in TableGetSortSpecs() when SpecsDirty flag is unset. (#4233)
  • TabBar: Fixed using more than 32 KB-worth of tab names. (#4176)
  • InputInt/InputFloat: When used with Steps values and _ReadOnly flag, the step button look disabled. (#211)
  • InputText: Fixed named filtering flags disabling newline or tabs in multiline inputs (#4409, #4410) [@kfsone]
  • Drag and Drop: drop target highlight doesn't try to bypass host clipping rectangle. (#4281, #3272)
  • Drag and Drop: Fixed using AcceptDragDropPayload() with ImGuiDragDropFlags_AcceptNoPreviewTooltip. [@JeffM2501]
  • Menus: MenuItem() and BeginMenu() are not affected/overlapping when style.SelectableTextAlign is altered.
  • Menus: Fixed hovering a disabled menu or menu item not closing other menus. (#211)
  • Popups: Fixed BeginPopup()/OpenPopup() sequence failing when there are no focused windows. (#4308) [@rokups]
  • Nav: Alt doesn't toggle menu layer if other modifiers are held. (#4439)
  • Fixed printf-style format checks on non-MinGW flavors. (#4183, #3592)
  • Fonts: Functions with a float size_pixels parameter can accept zero if it is set in ImFontSize::SizePixels.
  • Fonts: Prefer using U+FFFD character for fallback instead of '?', if available. (#4269)
  • Fonts: Use U+FF0E dot character to construct an ellipsis if U+002E '.' is not available. (#4269)
  • Fonts: Added U+FFFD ("replacement character") to default Asian glyphs ranges. (#4269)
  • Fonts: Fixed calling ClearTexData() (clearing CPU side font data) triggering an assert in NewFrame(). (#3487)
  • DrawList: Fixed AddCircle()/AddCircleFilled() with auto-tesselation not using accelerated paths for small circles. Fixed AddCircle()/AddCircleFilled()` with 12 segments which had a broken edge. (#4419, #4421) [@thedmd]
  • Demo: Fixed requirement in 1.83 to link with imgui_demo.cpp if IMGUI_DISABLE_METRICS_WINDOW is not set. (#4171)
    Normally the right way to disable compiling the demo is to set IMGUI_DISABLE_DEMO_WINDOWS, but we want to avoid
    implying that the file is required.
  • Metrics: Fixed a crash when inspecting the individual draw command of a foreground drawlist. [@rokups]
  • Backends: Reorganized most backends (Win32, SDL, GLFW, OpenGL2/3, DX9/10/11/12, Vulkan, Allegro) to pull their
    data from a single structure stored inside the main Dear ImGui context. This facilitate/allow usage of standard
    backends with multiple-contexts BUT is only partially tested and not well supported. It is generally advised to
    instead use the multi-viewports feature of docking branch where a single Dear ImGui context can be used across
    multiple windows. (#586, #1851, #2004, #3012, #3934, #4141)
  • Backends: Win32: Rework to handle certain Windows 8.1/10 features without a manifest. (#4200, #4191)
    • ImGui_ImplWin32_GetDpiScaleForMonitor() will handle per-monitor DPI on Windows 10 without a manifest.
    • ImGui_ImplWin32_EnableDpiAwareness() will call SetProcessDpiAwareness() fallback on Windows 8.1 without a manifest.
  • Backends: Win32: IME functions are disabled by default for non-Visual Studio compilers (MinGW etc.). Enable with
    #define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS for those compilers. Undo change from 1.82. (#2590, #738, #4185, #4301)
  • Backends: Win32: Mouse position is correctly reported when the host window is hovered but not focused. (#2445, #2696, #3751, #4377)
  • Backends: Win32, SDL2, GLFW, OSX, Allegro: now calling io.AddFocusEvent() on focus gain/loss. (#4388) [@thedmd]
    This allow us to ignore certain inputs on focus loss (previously relied on mouse loss but backends are now
    reporting mouse even when host window is unfocused, as per #2445, #2696, #3751, #4377)
  • Backends: Fixed keyboard modifiers being reported when host window doesn't have focus. (#2622)
  • Backends: GLFW: Mouse position is correctly reported when the host window is hovered but not focused. (#3751, #4377, #2445)
    (backend now uses glfwSetCursorEnterCallback(). If you called ImGui_ImplGlfw_InitXXX with install_callbacks=false, you will
    need to install this callback and forward the data to the backend via ImGui_ImplGlfw_CursorEnterCallback).
  • Backends: SDL2: Mouse position is correctly reported when the host window is hovered but not focused. (#3751, #4377, #2445)
    (enabled with SDL 2.0.5+ as SDL_GetMouseFocus() is only usable with SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH).
  • Backends: DX9: Explicitly disable texture state stages after >= 1. (#4268) [@NZJenkins]
  • Backends: DX12: Fix texture casting crash on 32-bit systems (introduced on 2021/05/19 and v1.83) + added comments
    about building on 32-bit systems. (#4225) [@kingofthebongo2008]
  • Backends: OpenGL3: Embed our own minimal GL headers/loader (imgui_impl_opengl3_loader.h) based on gl3w.
    Reduces the frequent issues and confusion coming from having to support multiple loaders and requiring users to use and
    initialize the same loader as the backend. [@rokups]
    Removed support for gl3w, glew, glad, glad2, glbinding2, glbinding3 (all now unnecessary).
  • Backends: OpenGL3: Handle GL_CLIP_ORIGIN on <4.5 contexts if GL_ARB_clip_control extension is detected. (#4170, #3998)
  • Backends: OpenGL3: Destroy vertex/fragment shader objects right after they are linked into main shader. (#4244) [@Crowbarous]
  • Backends: OpenGL3: Use OES_vertex_array extension on Emscripten + backup/restore current state. (#4266, #4267) [@harry75369]
  • Backends: GLFW: Installing and exposed ImGui_ImplGlfw_MonitorCallback() for forward compatibility with docking branch.
  • Backends: OSX: Added a fix for shortcuts using CTRL key instead of CMD key. (#4253) [@rokups]
  • Examples: DX12: Fixed handling of Alt+Enter in example app (using swapchain's ResizeBuffers). (#4346) [@PathogenDavid]
  • Examples: DX12: Removed unnecessary recreation of backend-owned device objects when window is resized. (#4347) [@PathogenDavid]
  • Examples: OpenGL3+GLFW,SDL: Remove include cruft to support variety of GL loaders (no longer necessary). [@rokups]
  • Examples: OSX+OpenGL2: Fix event forwarding (fix key remaining stuck when using shortcuts with Cmd/Super key).
    Other OSX examples were not affected. (#4253, #1873) [@rokups]
  • Examples: Updated all .vcxproj to VS2015 (toolset v140) to facilitate usage with vcpkg.
  • Examples: SDL2: Accommodate for vcpkg install having headers in SDL2/SDL.h vs SDL.h.

Other branches & Beta features!

Also see previous release notes such as 1.80, 1.81, 1.80, 1.83.

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.83 to 1.84 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Clicking on the right-most close button of a docking node closes all windows. (#4186)
  • Nav, Drag and Drop, Docking: fixed two issues leading nav result to conflict with moving a window. (#4211, #3025)
  • Docking: Fix IsWindowAppearing() unnecessarily returning true twice in a row. (#4177, #3982, #1497, #1061). (apparently there's still an issue tho)
  • Docking: Fix IsWindowAppearing() and ImGuiCond_Appearing on docked windows. (#4177, #3982, #1497, #1061)
  • Docking: Reworked node flags saving/inheritance. (#4292, #3834, #3633, #3521, #3492, #3335, #2999, #2648)
  • Docking: Fixed crash when a dock node gets re-qualified as dockspace>floating>dockspace.. (#3203, #4295)
  • Docking: Fixed crash issues using DockBuilderRemoveNode() in some situations. (#3111, #3179, #3203, #4295)
  • Docking: Removed DockNodeFlagsOverrideClear flags from ImGuiWindowClass. (#2999, #3521, #3633)
  • Docking: Added ImGuiDockNodeFlags_NoDockingOverEmpty. Breaking definition of ImGuiDockNodeFlags_NoDockingOverOther which now means "non empty node". (#3492, #2648, #4292)
  • Viewports: Fix popup/tooltip created without a parent window from being given a ParentViewportId value of the implicit/fallback window. (#4236, #2409)
  • Viewports, Backends: Vulkan: Fix the use of the incorrect fence in wait for fence. (#4208)

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...

@flamendless: CodeNect is a visual programming software for beginners!
https://github.com/flamendless/CodeNect-VPS, https://brbl.itch.io/codenect
Thanks to @rokups' ImNodes for the nodes ui lib
sc_debug

Codeperfect 95: A Blazing Fast IDE for Go
https://codeperfect95.com
"A toolkit that understands Go as a first language."
image

Overwatch 2
https://playoverwatch.com/en-us/news/23674944/
overwatch2

@LunaTheFoxgirl "I'm working on inochi2d & rigging tool for 2D puppets, mainly aimed at VTubing but also for games (like visual novels)" "Rigging tool uses ImGui and our binding bindbc-imgui, which in turn uses cimgui"
billede

@dfeneyrou Palanteer, a new visual profiler for C++ and Python (for the moment), lean and with high performance.
https://github.com/dfeneyrou/palanteer
views
lock_contention

@jeffreyspaan : a dataflow simulator. using DearPyGui (built with Dear ImGui)
https://github.com/jeffreyspaan/coolname
image

@stephenfewer "I developed a commercial Windows allocation profiler called WonderLeak using the ImGui docking branch for the interface."
shot

@0lru _"C++& Python layer for ImGui & ImPlot. The library itself is written in C++ and already usable in Python via Pybind11.
For the layout, I'm trying to implement a subset of the CSS-Flexbox-idea. It aims at fast prototyping small applications where performance does also matter.
https://github.com/0lru/p3ui
plots

@MartinBspheroid _"Prototype of music thingy. And yes, it's running on phone."
IMG_20210719_074714

@drhelius "These are my Game Boy and Master System / Game Gear emulators. I migrated from Qt to ImGui and it was the best decision ever!"
https://github.com/drhelius/Gearboy
https://github.com/drhelius/Gearsystem
FA1879A9-2490-468D-B572-A97B9A7374A1

@noizebox "I've seen a few audio processing plugins (VST) posted here, so here is another one :) I wrote it for KVRs semi-annual Developers Challenge. It's loosely based on an old guitar pedal that was given to me by my dad. It's both a fuzzbox and a compressor that can pump like crazy with the right settings. Try it on drums and other dynamic material with the amount up all the way and tweak the speed and gain knobs for some grainy pumping ;) You can find some audio examples and download the binary (windows and linux) here https://www.kvraudio.com/product/nb01---distortion-sustainer-by-noizebox-industries "
"The UI is all Dear ImGui with custom widgets for the knobs and level meters, and a modified GLFW as platform backend. It uses thread-local ImGui contexts and one drawing thread per instance to provide multiple, separate editor instances."
Peek 2021-07-31 19-29

@blueskythlikesclouds HedgeGI is a tool that bakes global illumination and light field data for Sonic games that utilize Hedgehog Engine.
https://github.com/blueskythlikesclouds/HedgeGI
image


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.