Imgui Versions Save

Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

v1.89.6

11 months ago

1.89.6: May release! (*)

(*) Technically it is still May!

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.com/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! ❤️

Ongoing work on Dear ImGui is currently financially supported by:

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.

Changes

This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5. 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.

I have been stubbornly deferring tagging 1.90 for while because I wanted to include the range-select feature in it, but it's not done... But there are nearly 500 lines of changelog between 1.89 and 1.89.6.

Breaking Changes:

  • Clipper: Commented out obsolete redirection constructor which was marked obsolete in 1.79:
    • ImGuiListClipper(int items_count, float items_height) --> Use ImGuiListClipper() + clipper.Begin().
  • Clipper: Renamed ForceDisplayRangeByIndices() to IncludeRangeByIndices(), kept inline redirection function (introduced in 1.86 and rarely used). (#6424, #3841)
  • Commented out obsolete/redirecting functions that were marked obsolete more than two years ago:
    • ListBoxHeader() -> use BeginListBox()
    • ListBoxFooter() -> use EndListBox()
    • Note how two variants of ListBoxHeader() existed. Check commented versions in imgui.h for refeence.
  • Backends: SDL_Renderer: Renamed 'imgui_impl_sdlrenderer.h/cpp' to 'imgui_impl_sdlrenderer2.h/cpp', in order to accomodate for upcoming SDL3 and change in its SDL_Renderer API. (#6286)
  • Backends: GLUT: Removed call to ImGui::NewFrame() from ImGui_ImplGLUT_NewFrame(). It needs to be called from the main app loop, like with every other backends. (#6337) [@GereonV]

Other Changes:

  • Window: Fixed resizing from upper border when io.ConfigWindowsMoveFromTitleBarOnly is set. (#6390)
  • Tables: Fixed a small miscalculation in TableHeader() leading to an empty tooltip showing when a sorting column has no visible name. (#6342) [@lukaasm]
  • Tables: Fixed command merging when compiling with VS2013 (one array on stack was not initialized on VS2013. Unsure if due to a bug or UB/standard conformance). (#6377)
  • InputText: Avoid setting io.WantTextInputNextFrame during the deactivation frame. (#6341) [@lukaasm]
  • Drag, Sliders: if the format string doesn't contain any %, CTRL+Click to input text will use the default format specifier for the type. Allow display/input of raw value when using "enums" patterns (display label instead of value) + allow using when value is hidden. (#6405)
  • Nav: Record/restore preferred position on each given axis after a movement on that axis, then score movement on the other axis using this as a bias. This allows going up and down between e.g. a large header spanning horizontal space and three-ways-columns, landing on the same column as before.
  • Nav: Fixed navigation within tables/columns where item boundaries goes beyond columns limits, unclipped bounding boxes would interfere with other columns. (#2221) [@zzzyap, @ocornut]
  • Nav: Fixed CTRL+Tab into a root window with only childs with _NavFlattened flags erroneously initializing default nav layer to menu layer.
  • Menus: Fixed an issue when opening a menu hierarchy in a given menu-bar would allow opening another via simple hovering. (#3496, #4797)
  • Fonts: Fixed crash when merging fonts and the first font has no valid glyph. (#6446) [@JaedanC]
  • Fonts: Fixed crash when manually specifying an EllipsisChar that doesn't exist. (#6480)
  • Misc: Added ImVec2 unary minus operator. (#6368) [@Koostosh]
  • Debug Tools: Debug Log: Fixed not parsing 0xXXXXXXXX values for geo-locating on mouse hover hover when the identifier is at the end of the line. (#5855)
  • Debug Tools: Added io.ConfigDebugIgnoreFocusLoss option to disable io.AddFocusEvent(false) handling. May facilitate interactions with a debugger when focus loss leads to clearing inputs data. (#4388, #4921)
  • Backends: Clear bits sets io.BackendFlags on backend Shutdown(). (#6334, #6335] [@GereonV] Potentially this would facilitate switching runtime backend mid-session.
  • Backends: Win32: Added ImGui_ImplWin32_InitForOpenGL() to facilitate combining raw Win32/Winapi with OpenGL. (#3218)
  • Backends: OpenGL3: Restore front and back polygon mode separately when supported by context (Desktop 3.0, 3.1, or 3.2+ with compat bit). (#6333) [@GereonV]
  • Backends: OpenGL3: Support for glBindSampler() backup/restore on ES3. (#6375) [@jsm174]
  • Backends: SDL3: Fixed build on Emscripten/iOS/Android. (#6391) [@jo-codegirl]
  • Backends: SDLRenderer3: Added SDL_Renderer for SDL3 backend. (#6286) [@Carcons, @ocornut]
  • Examples: Added native Win32+OpenGL3 example. We don't recommend using this setup but we provide it for completeness. (#3218, #5170, #6086, #2772, #2600, #2359, #2022, #1553) [@learn-more]
  • Examples: Vulkan: Use integrated GPU if nothing else is available. (#6359) [@kimidaisuki22]
  • Examples: DX9, DX10, DX11: Queue framebuffer resize instead of processing in WM_SIZE, as some drivers tends to only cleanup after existing the native resize modal loop. (#6374)
  • Examples: Added SDL3+SDL_Renderer example. (#6286)
  • Examples: Updated all Visual Studio projects and batches to use /utf-8 argument.

Changes from 1.89.5 to 1.89.6 related to the docking branch (multi-viewport and docking features) include:

  • Viewports: Fixed platform-side focus (e.g. Alt+Tab) from leading to accidental closure of Modal windows. Regression from 1.89.5. (#6357, #6299)
  • Viewports: Fixed erroneous popup closure on closing a previous popup. (#6462, #6299)
  • Viewports: Fixed loss of imgui-side focus when dragging a secondary viewport back in main viewport, due to platform-side handling changes. Regression from 1.89.5 (#6299)
  • Viewports: Added void* ImGuiPlatformMonitor::PlatformHandle field (backend-dependant), for usage by user code.
  • Backends: GLFW: Preserve monitor list when there are no monitor, may briefly happen when recovering from macOS sleeping mode. (#5683) [@Guistac]
  • Backends: SDL2: Update monitor list when receiving a display event. (#6348) Note however that SDL2 currently doesn't have an event for a DPI/Scaling change, so monitor data won't be updated in this situation.
  • Backends: SDL3: Update monitor list when receiving a display event. (#6348)

Changes from 1.89.5 to 1.89.6 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):

  • RangeSelect/MultiSelect: (BREAKING) Renamed ImGuiMultiSelectData to ImGuiMultiSelectIO.
  • RangeSelect/MultiSelect: Made SetNextItemSelectionData() optional to allow disjoint selection (e.g. with a CollapsingHeader between items).
  • RangeSelect/MultiSelect: Enter can alter selection if current item is not selected.
  • RangeSelect/MultiSelect: Removed DragDropActive/preserve_existing_selection logic which seems unused + comments.
  • RangeSelect/MultiSelect: Demo tweak. Removed multi-scope from Advanced (too messy), made it a separate mini-demo

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 (as an alternative to good old cimgui). https://github.com/dearimgui/dear_bindings

Below a selection of screenshots from Gallery threads...

@DickyQi "MediaEditor Community (MEC) is a highly integrated and easy to learn application software that can be used to create, edit, and produce high-quality videos. [...] Support complete timeline editing functions, including move, crop, cut, thumbnail preview, scale and delete. [...] Support more flexible and easily blueprint system. Blueprint💫 is represented in the form of nodes, which can handle complex functions through nodes and flows. [...]Support about 30+ built-in media filters and 60+ built-in media fusions [...] Support about 10 video and audio analysis tools [...] Support audio mixing, including mixer, pan, equalizer, gate, limiter and compressor. " https://github.com/opencodewin/MediaEditor

timeline fusion add-filter

@kem0x VPN Client VCT_essi68YEaz

@aloneguid Browser profile proxy/redirector https://www.aloneguid.uk/projects/bt

@XorJS "git-whale is a Windows tool to synchronize git and github repositories (done in C++ and ImGui)." https://www.jsr-productions.com/git-whale.html) git-whale0 webp

Spotted in this GDC Talk for God of War: Ragnarok some uses of Dear ImGui: https://www.gdcvault.com/play/1028846/Rendering-God-of-War-Ragnark God of War Ragnarock 02-halfsize

@psyq321: "DigiCortex v2 (artificial brain simulator) is using Dear ImGui" DigiCortex v2

@EddieEldridge: _"Some GUI's made using ImGUI (as part of the Engine Overhaul Project for Medieval II: Total War)" https://youneuoy.github.io/M2TWEOP-library image

@Vasili-Sk: "Made configuration app for my CAN-bus devices, never been so easy! Main app on C#" screenshot

@Hunternif: "I'm building a 3d editor for procedural generation of blocky buildings, a la Minecraft :)" Screenshot 2023-05-13 15 10 05

@morgongad: "Bit Animation Editor: A pixelart composition tool for game developers (with export to Unreal 5)" https://store.steampowered.com/app/1370650/Bit__Animation_Editor/ image

@Froyok: "I have been working with Dear ImGui for a few years now, it's always my goto library to build UI nowamdays (I presume I'm not the only one). I love it and wanted to share my many and sincere thanks for it. It's such a pleasure to work with !"

"I have been using Dear ImGui as the window management and behavior for the UI of a little RPG project. It uses custom drawing, but widget placement, sizing and state is driven by Dear ImGui underneath." flairepg_scrollbar_final

"I'm currently working on my own game engine called Ombre, the debug UI is also driven by Dear ImGui. The editor/in-game UI will likely be using it too." [...] "I like to push as far as I can the customization of the look, without editing the original library (since I use wrappers,notably Python and LUA ones). :)" Ombre Engine

Drag Your GAN (technical paper/demo) https://vcai.mpi-inf.mpg.de/projects/DragGAN/ https://github.com/XingangPan/DragGAN DragGAN

@AlonsoCerpa: "First of all, thank you very much ocornut and all the contributors for Dear ImGui. I will share with you my simple 3D Game Engine called "Neon Engine" that I implemented with Dear ImGui, OpenGL, glm and Assimp." neon_engine_image2

Yacht Club Games (Shovel Knight & co) posted about their tech for Mina The Hollower: Tweet: https://twitter.com/YachtClubGames/status/1662139803541082112 Blog: https://www.yachtclubgames.com/blog/engine-sneak-peek

They are full GIF on the Blog page, some stills: cutscene fire


See previous releases details.

v1.89.5

1 year ago

1.89.5: April release!

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.com/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:

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

Changes

This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4. 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.

All Changes:

  • InputText: Reworked prev/next-word behavior to more closely match Visual Studio text editor. Include '.' as a delimiter and alter varying subtle behavior with how blanks and separators are treated when skipping words. (#6067) [@ajweeks]
  • InputText: Fixed a tricky edge case, ensuring value is always written back on the frame where IsItemDeactivated() returns true, in order to allow usage without user retaining underlying data. While we don't really want to encourage user not retaining underlying data, in the absence of a "late commit" behavior/flag we understand it may be desirable to take advantage of this trick. (#4714)
  • Drag, Sliders: Fixed parsing of text input when '+' or '#' format flags are used in the format string. (#6259) [@idbrii]
  • Nav: Made Ctrl+Tab/Ctrl+Shift+Tab windowing register ownership to held modifier so it doesn't interfere with other code when remapping those actions. (#4828, #3255, #5641)
  • Nav: Made PageUp/PageDown/Home/End navigation also scroll parent windows when necessary to make the target location fully visible (same as e.g. arrow keys).
  • ColorEdit: Fixed shading of S/V triangle in Hue Wheel mode. (#5200, #6254) [@jamesthomasgriffin]
  • TabBar: Tab-bars with ImGuiTabBarFlags_FittingPolicyScroll can be scrolled with horizontal mouse-wheel (or Shift + WheelY). (#2702)
  • Rendering: Using adaptive tessellation for RadioButton, ColorEdit preview circles, Windows Close and Collapse Buttons.
  • ButtonBehavior: Fixed an edge case where changing widget type/behavior while active and using same id could lead to an assert. (#6304)
  • Misc: Fixed ImVec2 operator[] violating aliasing rules causing issue with Intel C++ compiler. (#6272) [@BayesBug]
  • IO: Input queue trickling adjustment for touch screens. Fixes single-tapping to move simulated mouse and immediately click on a widget that is using the ImGuiButtonFlags_AllowItemOverlap policy. (#2702, #4921)
    • This only works if the backend can distinguish TouchScreen vs Mouse. See 'Demo->Tools->Metrics->Inputs->Mouse Source' to verify.
    • Fixed tapping on BeginTabItem() on a touch-screen. (#2702)
    • Fixed tapping on CollapsingHeader() with a close button on a touch-screen.
    • Fixed tapping on TreeNode() using ImGuiTreeNodeFlags_AllowItemOverlap on a touch-screen.
    • Fixed tapping on Selectable() using ImGuiSelectableFlags_AllowItemOverlap on a touch-screen.
    • Fixed tapping on TableHeader() on a touch-screen.
  • IO: Added io.AddMouseSourceEvent() and ImGuiMouseSource enum. This is to allow backend to specify actual event source between Mouse/TouchScreen/Pen. (#2702, #2334, #2372, #3453, #5693)
  • IO: Fixed support for calling io.AddXXXX functions from inactive context (wrongly advertised as supported in 1.89.4). (#6199, #6256, #5856) [@cfillion]
  • Backends: OpenGL3: Fixed GL loader crash when GL_VERSION returns NULL. (#6154, #4445, #3530)
  • Backends: OpenGL3: Properly restoring "no shader program bound" if it was the case prior to running the rendering function. (#6267, #6220, #6224) [@BrunoLevy]
  • Backends: Win32: Added support for io.AddMouseSourceEvent() to discriminate Mouse/TouchScreen/Pen. (#2334, #2702)
  • Backends: SDL2/SDL3: Added support for io.AddMouseSourceEvent() to discriminate Mouse/TouchScreen. This is relying on SDL passing SDL_TOUCH_MOUSEID in the event's 'which' field. (#2334, #2702)
  • Backends: SDL2/SDL3: Avoid calling SDL_StartTextInput()/SDL_StopTextInput() as they actually block text input input and don't only pertain to IME. It's unclear exactly what their relation is to other IME function such as SDL_SetTextInputRect(). (#6306, #6071, #1953)
  • Backends: GLFW: Added support on Win32 only for io.AddMouseSourceEvent() to discriminate Mouse/TouchScreen/Pen. (#2334, #2702)
  • Backends: GLFW: Fixed key modifiers handling on secondary viewports. (#6248, #6034) [@aiekick]
  • Backends: Android: Added support for io.AddMouseSourceEvent() to discriminate Mouse/TouchScreen/Pen. (#6315) [@PathogenDavid]
  • Backends: OSX: Added support for io.AddMouseSourceEvent() to discriminate Mouse/Pen. (#6314) [@PathogenDavid]
  • Backends: WebGPU: Align buffers. Use WGSL shaders instead of SPIR-V. Add gamma uniform. (#6188) [@eliemichel]
  • Backends: WebGPU: Reorganized to store data in io.BackendRendererUserData like other backends.
  • Examples: Vulkan: Fixed validation errors with newer VulkanSDK by explicitly querying and enabling "VK_KHR_get_physical_device_properties2", "VK_KHR_portability_enumeration", and VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR. (#6109, #6172, #6101)
  • Examples: Windows: Added misc/debuggers/imgui.natstepfilter file to all Visual Studio projects, now that VS 2022 17.6 Preview 2 support adding Debug Step Filter spec files into projects.
  • Examples: SDL3: Updated for latest WIP SDL3 branch. (#6243)
  • TestSuite: Added variety of new regression tests and improved/amended existing ones in imgui_test_engine/ repository. [@PathogenDavid, @ocornut]

Changes from 1.89.4 to 1.89.5 related to the docking branch (multi-viewport and docking features) include:

  • Viewports: Setting focus from Platform/OS (e.g. via decoration, or Alt-Tab) sets corresponding focus at Dear ImGui level (generally last focused window in the viewport). (#6299)
  • Docking: Fixed using GetItemXXX() or IsItemXXX() functions after a DockSpace() call. (#6217)
  • Backends: GLFW: Fixed key modifiers handling on secondary viewports. (#6248, #6034) [@aiekick]
  • Backends: GLFW: Fixed Emscripten erroneously enabling multi-viewport support, leading to assert. (#5683)
  • Backends: SDL2/SDL3: Fixed IME text input rectangle position with viewports. (#6071, #1953)
  • Backends: SDL3: Fixed for compilation with multi-viewports. (#6255) [@P3RK4N]

Changes from 1.89.4 to 1.89.5 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):

  • RangeSelect/MultiSelect: Fixed 'Enter' to never alter selection (unlike Space).
  • RangeSelect/MultiSelect: Fixed needing to set RangeSrcPassedBy when not using clipper.
  • RangeSelect/MultiSelect: Added ImGuiMultiSelectFlags_ClearOnClickWindowVoid.
  • RangeSelect/MultiSelect: Added ImGuiMultiSelectFlags_ClearOnEscape.

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

Below a selection of screenshots from Gallery threads...

thpp by @Rodan: https://github.com/rodan/thpp "I wanted to try out Dear ImGui, so I wrote a thermal image processing software around it. I really loved every minute, thanks!" "The rendering loop is event-driven (without poking ImGui's code) - based on great work done in #2749"

thpp_realsr_interpolation

Spotted in Counter-Strike 2 dev video. image

Spotted in Halo Infinite dev talk (from https://www.gdcvault.com/play/1027689/Thinking-Like-Players-How-Halo) halo infinite-02

In-house AI System by @abvadabra "In-house AI system, with editor and debugger. Architectured on combination of behaviour trees and hierarhical state machines. Uses node editor by thedmd, written in java using imgui-java by Spair" image

@alexeykarnachev: "A little 2d sandbox to play with genetic AI training with several fancy features (dynamic light, pseudo 3d materials, game engine-like editor)" https://github.com/alexeykarnachev/crossover image

@Chaojimengnan: "A video progress bar" 2ecdd735-4206-424b-b282-b54e8379e6a8

@vdweller84 "Code editor in an ImGui-powered engine. It has a few more features than ImGuiColorTextEdit and uses Google's RE2 for fast regex tokenization/search. Unlimited Undo/Redo, copy/paste, comment/string blocks, obvious basic functions. Also undo/redo groups words instead of adding/removing single characters." [...] image

@inobelar "C++ web app (yep - emscripten, wasm, webgl), ImGui-based interactive Yoga Playground." Web Demo (sources) image


See previous releases details.

v1.89.4

1 year ago

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:

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() to PushTabStop()/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.
  • 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 -> use ImGuiSliderFlags_AlwaysClamp
    • ImGuiInputTextFlags_AlwaysInsertMode -> use ImGuiInputTextFlags_AlwaysOverwrite
    • ImDrawList::AddBezierCurve() -> use ImDrawList::AddBezierCubic()
    • ImDrawList::PathBezierCurveTo() -> use ImDrawList::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 to ItemAdd() for custom widgets.
  • 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() and glfwGetGamepadState() 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 and ImGuiConfigFlags_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

Below a selection of screenshots from Gallery threads...

Rat GUI The most convenient simulation tool for magnet engineers https://rat-gui.ch/index.html image

RTSA (Real-Time Spectrum Analyzer) Suite https://aaronia.com/software/rtsa-suite/ picture21_2_full

Structural Mechanics software ObjectiveFrame https://github.com/jonaslindemann/objectiveframe 2023-02-18 00_44_48-ObjectiveFrame

OpenSim Creator https://github.com/ComputationalBiomechanicsLab/opensim-creator OpenSim Creator

Fun thing, Quake 3 re-release using a Dear ImGui underlying logic for in-game menus: image

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!" Needle


See previous releases details.

v1.89.3

1 year ago

1.89.3: Release cadence intensifies!

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:

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

  • Renamed SDL2 backend files (+ Added experimental SDL3 backend).
  • Fixed wrapping text regression from previous versions.
  • Added SeparatorText().
  • Lifted limit on table columns count.
  • Fixed to horizontal scrolling wheel in many backends.
  • More Emscripten examples + fixes for Emscripten.
  • Many other tweaks/fixes.

image

Changes

This is a followup to v1.89, v1.89.1 and v1.89.2. 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:

  • Backends+Examples: SDL2: renamed all unnumbered references to "sdl" to "sdl2". This is in prevision for the future release of SDL3 and its associated backend. (#6146)
    • imgui_impl_sdl.cpp -> imgui_impl_sdl2.cpp
    • imgui_impl_sdl.h -> imgui_impl_sdl2.h
    • example_sdl_xxxx/ -> example_sdl2_xxxx/ (folders and projects)

Other Changes:

  • SeparatorText(): Added SeparatorText() widget. (#1643) [@phed, @ocornut]
    • Added to style: float SeparatorTextBorderSize.
    • Added to style: ImVec2 SeparatorTextAlign, ImVec2 SeparatorTextPadding.
  • Tables: Raised max Columns count from 64 to 512. The previous limit was due to using 64-bit integers but we moved to bits-array and tweaked the system enough to ensure no performance loss. (#6094, #5305, #4876, #3572)
  • Tables: Solved an ID conflict issue with multiple-instances of a same table, due to how unique table instance id was generated. (#6140) [@ocornut, @rodrigorc]
  • Inputs, Scrolling: Made horizontal scroll wheel and horizontal scroll direction consistent across backends/os. (#4019, #6096, #1463) [@PathogenDavid, @ocornut, @rokups]
    • Clarified that 'wheel_y > 0.0f' scrolls Up, 'wheel_y > 0.0f' scrolls Down.
    • Clarified that 'wheel_x > 0.0f' scrolls Left, 'wheel_x > 0.0f' scrolls Right.
    • Backends: Fixed horizontal scroll direction for Win32 and SDL backends. (#4019)
    • Shift+WheelY support on non-OSX machines was already correct. (#2424, #1463) (whereas on OSX machines Shift+WheelY turns into WheelX at the OS level).
    • If you use a custom backend, you should verify horizontal wheel direction.
      • Axises are flipped by OSX for mouse & touch-pad when 'Natural Scrolling' is on.
      • Axises are flipped by Windows for touch-pad when 'Settings->Touchpad->Down motion scrolls up' is on.
      • You can use Demo->Tools->Debug Log->IO to visualize values submitted to Dear ImGui.
    • Known issues remaining with Emscripten:
      • The magnitude of wheeling values on Emscripten was improved but isn't perfect. (#6096)
      • When running the Emscripten app on a Mac with a mouse, SHIFT+WheelY doesn't turn into WheelX. This is because we don't know that we are running on Mac and apply our own Shift+swapping on top of OSX' own swapping, so wheel axises are swapped twice. Emscripten apps may need to find a way to detect this and set io.ConfigMacOSXBehaviors manually (if you know a way let us know!), or offer the "OSX-style behavior" option to their user.
  • Window: Avoid rendering shapes for hidden resize grips.
  • Text: Fixed layouting of wrapped-text block skipping successive empty lines, regression from the fix in 1.89.2. (#5720, #5919)
  • Text: Fixed clipping of single-character "..." ellipsis (U+2026 or U+0085) when font is scaled. Scaling wasn't taken into account, leading to ellipsis character straying slightly out of its expected boundaries. (#2775)
  • Text: Tweaked rendering of three-dots "..." ellipsis variant. (#2775, #4269)
  • InputText: Added support for Ctrl+Delete to delete up to end-of-word. (Not adding Super+Delete to delete to up to end-of-line on OSX, as OSX doesn't have it) (#6067) [@ajweeks]
  • InputText: On OSX, inhibit usage of Alt key to toggle menu when active (used for work skip).
  • Menus: Fixed layout of MenuItem()/BeginMenu() when label contains a '\n'. (#6116) [@imkcy9]
  • ColorEdit, ColorPicker: Fixed hue/saturation preservation logic from interfering with the displayed value (but not stored value) of others widgets instances. (#6155)
  • PlotHistogram, PlotLines: Passing negative sizes honor alignment like other widgets.
  • Combo: Allow SetNextWindowSize() to alter combo popup size. (#6130)
  • Fonts: Assert that in each GlyphRanges[] pairs first is <= second.
  • ImDrawList: Added missing early-out in AddPolyline() and AddConvexPolyFilled() when color alpha is zero.
  • Misc: Most text functions treat "%s" as a shortcut to no-formatting. (#3466)
  • Misc: Tolerate zero delta-time under Emscripten as backends are imprecise in their values for io.DeltaTime, and browser features such as privacy.resistFingerprinting=true can exacerbate that. (#6114, #3644)
  • Backends: OSX: Fixed scroll/wheel scaling for devices emitting events with hasPreciseScrollingDeltas==false (e.g. non-Apple mices).
  • Backends: Win32: flipping WM_MOUSEHWHEEL horizontal value to match other backends and offer consistent horizontal scrolling direction. (#4019)
  • Backends: SDL2: flipping SDL_MOUSEWHEEL horizontal value to match other backends and offer consistent horizontal scrolling direction. (#4019)
  • Backends: SDL2: Removed SDL_MOUSEWHEEL value clamping. (#4019, #6096, #6081)
  • Backends: SDL2: Added support for SDL 2.0.18+ preciseX/preciseY mouse wheel data for smooth scrolling as reported by SDL. (#4019, #6096)
  • Backends: SDL2: Avoid calling SDL_SetCursor() when cursor has not changed, as the function is surprisingly costly on Mac with latest SDL (already fixed in SDL latest trunk). (#6113)
  • Backends: SDL2: Implement IME handler to call SDL_SetTextInputRect()/SDL_StartTextInput(). It will only works with SDL 2.0.18+ if your code calls 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1")' prior to calling SDL_CreateWindow(). Updated all examples accordingly. (#6071, #1953)
  • Backends: SDL3: Added experimental imgui_impl_sdl3.cpp backend. SDL 3.0.0 has not yet been released, so it is possible that its specs/api will change before release. This backend is provided as a convenience for early adopters etc. We don't recommend switching to SDL3 before it is released. (#6146) [@dovker, @ocornut]
  • Backends: GLFW: Registering custom low-level mouse wheel handler to get more accurate scrolling impulses on Emscripten. (#4019, #6096) [@ocornut, @wolfpld, @tolopolarity]
  • Backends: GLFW: Added ImGui_ImplGlfw_SetCallbacksChainForAllWindows() to instruct backend to chain callbacks even for secondary viewports/windows. User callbacks may need to test the 'window' parameter. (#6142)
  • Backends: OpenGL3: Fixed GL loader compatibility with 2.x profiles. (#6154, #4445, #3530) [@grauw]
  • Backends: WebGPU: Fixed building for latest WebGPU specs (remove implicit layout generation). (#6117, #4116, #3632) [@tonygrue, @bfierz]
  • Examples: refactored SDL2+GL and GLFW+GL examples to compile with Emscripten. (#2492, #2494, #3699, #3705) [@ocornut, @nicolasnoble] The dedicated example_emscripten_opengl3/ has been removed.
  • Examples: Added SDL3+GL experimental example. (#6146)
  • Examples: Win32: Fixed examples using RegisterClassW() since 1.89 to also call DefWindowProcW() instead of DefWindowProc() so that title text are correctly converted when application is compiled without /DUNICODE. (#5725, #5961, #5975) [@markreidvfx]
  • Examples: SDL2+SDL_Renderer: Added call to SDL_RenderSetScale() to fix display on a Retina display (albeit lower-res as our other unmodified examples). (#6121, #6065, #5931).

Changes from 1.89.2 to 1.89.3 related to the docking branch (multi-viewport and docking features) include:

  • Backends: GLFW: Handle unsupported glfwGetVideoMode() for Emscripten. (#6096)

New exciting projects!

Note the release of Dear ImGui Bundle by @pthom https://github.com/pthom/imgui_bundle "Dear ImGui Bundle is a bundle for Dear ImGui, including various powerful libraries from its ecosystem. It enables to easily create ImGui applications in C++ and Python, under Windows, macOS, and Linux. It is aimed at application developers, researchers, and beginner developers who want to quickly get started."

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

https://user-images.githubusercontent.com/8225057/182409619-cd3bf990-b383-4a6c-a6ba-c5afe7557d6c.mp4

Below a selection of screenshots from Gallery threads...

Application for controlling a custom GoTo-AltAz-Mount for my telescope by @PlanEl180223 "Here is a preview of what the user interface of my application looks like. It uses an OpenGL backend, and C++. Don't get distracted by the weird descriptions on the individual targets, I am still parsing them wrong."

graph

dark-mode

SpriteMancer by @CodeManu https://spritemancer.com

SpriteMancer

LogToGraph by @aiekick "At job, I needed a tool for display Numerical Signal based logs to graph curve, for easy analyze. The tool is called LogToGraph So generic, since the parsing of a log file is done by a lua script. so easy modifable by a user. In more than Dear ImGui, Thanks to ImPlot for his incredible graph possibilites."

LogToGraph_Msvc_x64_ynHVEfnFss

@Jacckii : "My practical part of my thesis called "Demonstration of Signal digitization". It uses dear ImGui and ImPlot. It has a Web assembly version that is hosted on GitHub Pages" https://github.com/Jacckii/SignalDigitization

preview

Dear ImGui Bundle by @pthom https://github.com/pthom/imgui_bundle

image image

Senos by @RuiVarela https://github.com/RuiVarela/Senos "Senos is sound exploration tool from a developer point of view. It is very lightweight, can be used as a toy or a minimal song composer."_

Play

Flower (engine) by @qiutang98 https://github.com/qiutang98/flower "I love imgui, just need to write some simple code then i can get a beautiful professional ui layout. With imgui‘s help, i can start to write my custom engine what i want to do a long time ago."

Snipaste_2023-02-06_10-39-57

LDtk viewer @Madour: "A toy project I created a while ago to learn ImGui. Very convenient lib, and the customization is also very easy."

image

erhe by @tksuoran https://github.com/tksuoran/erhe erhe


See previous releases details.

v1.89.2

1 year ago

1.89.2: Happy New Year!

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 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 regression tests (now available as part of Dear ImGui Test Engine & Test Suite). Special thanks to @PathogenDavid and @GamingMinds-DanielC for their help with github answers.

Ongoing work on Dear ImGui is currently financially supported by:

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.

Changes

This is a followup to v1.89 and v1.89.1. 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.

All Changes:

  • Tables, Nav, Scrolling: fixed scrolling functions and focus tracking with frozen rows and frozen columns. Windows now have a better understanding of outer/inner decoration sizes, which should later lead us toward more flexible uses of menu/status bars. (#5143, #3692)
  • Tables, Nav: frozen columns are not part of menu layer and can be crossed over. (#5143, #3692)
  • Tables, Columns: fixed cases where empty columns may lead to empty ImDrawCmd. (#4857, #5937)
  • Tables: fixed matching width of synchronized tables (multiple tables with same id) when only some instances have a vertical scrollbar and not all. (#5920)
  • Fixed cases where CTRL+Tab or Modal can occasionally lead to the creation of ImDrawCmd with zero triangles, which would makes the render loop of some backends assert (e.g. Metal with debugging, Allegro). (#4857, #5937)
  • Inputs, IO: reworked ImGuiMod_Shortcut to redirect to Ctrl/Super at runtime instead of compile-time, being consistent with our support for io.ConfigMacOSXBehaviors and making it easier for bindings generators to process that value. (#5923, #456)
  • Inputs, Scrolling: better selection of scrolling window when hovering nested windows and when backend/OS is emitting dual-axis wheeling inputs (typically touch pads on macOS). We now select a primary axis based on recent events, and select a target window based on it. We expect this behavior to be further improved/tweaked. (#3795, #4559) [@ocornut, @folays]
  • InputText: fixed cursor navigation when pressing Up Arrow on the last character of a multi-line buffer which doesn't end with a carriage return. (#6000)
  • Text: fixed layouting of wrapped-text block when the last source line is above the clipping region. Regression added in 1.89. (#5720, #5919)
  • Misc: added GetItemID() in public API. It is not often expected that you would use this, but it is useful for Shortcut() and upcoming owner-aware input functions which wants to be implemented with public API.
  • Fonts: imgui_freetype: fixed a packing issue which in some occurrences would prevent large amount of glyphs from being packed correctly. (#5788, #5829)
  • Fonts: added a void* UserData field in ImFontAtlas, as a convenience for use by applications using multiple font atlases.
  • Demo: simplified "Inputs" section, moved contents to Metrics->Inputs.
  • Debug Tools: Metrics: added "Inputs" section, moved from Demo for consistency.
  • Misc: fixed parameters to IMGUI_DEBUG_LOG() not being dead-stripped when building with IMGUI_DISABLE_DEBUG_TOOLS is used. (#5901) [@Teselka]
  • Misc: fixed compile-time detection of SSE features on MSVC 32-bits builds. (#5943) [@TheMostDiligent]
  • Examples: DirectX10, DirectX11: try WARP software driver if hardware driver is not available. (#5924, #5562)
  • Backends: GLFW: Fixed mods state on Linux when using Alt-GR text input (e.g. German keyboard layout), which could lead to broken text input. Revert a 2022/01/17 change were we resumed using mods provided by GLFW, turns out they are faulty in this specific situation. (#6034)
  • Backends: Allegro5: restoring using al_draw_indexed_prim() when Allegro version is >= 5.2.5. (#5937) [@Espyo]
  • Backends: Vulkan: Fixed sampler passed to ImGui_ImplVulkan_AddTexture() not being honored as we were using an immutable sampler. (#5502, #6001, #914) [@martin-ejdestig, @rytisss]

Changes from 1.89.1 to 1.89.2 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Internals: fixed DockBuilderCopyDockSpace() crashing when windows not in the remapping list are docked on the left or top side of a split. (#6035)
  • Docking: fixed DockSpace() with ImGuiDockNodeFlags_KeepAliveOnly marking current window as written to, even if it doesn't technically submit an item. This allow using KeepAliveOnly from any window location. (#6037)
  • Backends: OSX: fixed typo in ImGui_ImplOSX_GetWindowSize that would cause issues when resizing from OS decorations, if they are enabled on secondary viewports. (#6009) [@sivu]
  • Backends: Metal: fixed secondary viewport rendering. (#6015) [@dmirty-kuzmenko]

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

https://user-images.githubusercontent.com/8225057/182409619-cd3bf990-b383-4a6c-a6ba-c5afe7557d6c.mp4

Below a selection of screenshots from Gallery threads...

Projectreal by @thefoxcam "WIP Open source layer-based compositor](https://foxcam.net/projectreal with a focus on bitmap editing for 2D motion design work, basically a combination of After Effects and Photoshop. ImGui's paradigm has been invaluable to my learning journey--" projectreal

NAP Framework by https://nap-labs.tech/ https://www.napframework.com 01-01-NAP-screen

Dear ImGui File Dialogs CLI and Client Library by Samuel Venable. https://github.com/time-killer-games/libfiledialogs "Based on ImFileDialog by dfranx, with many bugs/crashes fixed and overall improvements. The 'Quick Access' sidebar actually remembers what favorites were previously saved to it from previous runs of your application now, by saving the settings to a text file in a hidden configuration subfolder of your home folder. Allows for full localization among many other good things you'll find useful. Most of the dialog is customizable via environment variables. Uses system icon theme." filedialogs

RetroDebugger by @slajerek https://github.com/slajerek/RetroDebugger

320567252_1356347071841664_4581552724441969234_n

RE Edit, a free and open source WYSIWYG editor for the UI of a Rack Extension https://github.com/pongasoft/re-edit RE Edit - Light


See older releases details.

v1.89.1

1 year ago

1.89.1: Friendly tweaks and fixes

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 for their continued contributions and helping with github answers. Special thanks to @thedmd for their code reviews and continued exchanges of ideas.

Ongoing work on Dear ImGui is currently financially supported by:

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.

Changes

This is mostly a couple of changes to amend the release of v1.89:

  • Scrolling, Focus: fixed SetKeyboardFocusHere()/SetItemDefaultFocus() during a window-appearing frame (and associated lower-level functions e.g. ScrollToRectEx()) from not centering item. (#5902)
  • Inputs: fixed moving a window or drag and dropping from preventing input-owner-unaware code from accessing keys. (#5888, #4921, #456)
  • Inputs: fixed moving a window or drag and dropping from capturing mods. (#5888, #4921, #456)
  • Layout: fixed End()/EndChild() incorrectly asserting if users manipulates cursor position inside a collapsed/culled window and IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. (#5548, #5911)
  • Combo: fixed selected item (marked with SetItemDefaultFocus()) from not being centered when the combo window initially appears. (#5902).
  • ColorEdit: fixed label overlapping when using style.ColorButtonPosition == ImGuiDir_Left to move the color button on the left side (regression introduced in 1.88 WIP 2022/02/28). (#5912)
  • Drag and Drop: fixed GetDragDropPayload() returning a non-NULL value if a drag source is active but a payload hasn't been submitted yet. This is convenient to detect new payload from within a drag source handler. (#5910, #143)
  • Backends: GLFW: cancel out errors emitted by glfwGetKeyName() when a name is missing. (#5908)
  • Backends: WebGPU: fixed validation error with default depth buffer settings. (#5869, #5914) [@kdchambers]

Changes from 1.89 to 1.89,1 related to the docking branch (multi-viewport and docking features) include:

  • Viewport: Fixed collapsed windows setting ImGuiViewportFlags_NoRendererClear without making title bar color opaque, leading to potential texture/fb garbage being visible. Right now as we don't fully support transparent viewports (#2766), so we turn that TitleBgCollapsed color opaque just like we do for WindowBG on uncollapsed windows.

New secret exciting stuff!

Since 1.89 we semi-sneakily soft launched two new entire projects!

Dear Bindings: alternative binding generator for C and other languages https://github.com/dearimgui/dear_bindings

Dear ImGui Automation/Test Engine & Test Suite https://github.com/ocornut/imgui_test_engine

https://user-images.githubusercontent.com/8225057/182409619-cd3bf990-b383-4a6c-a6ba-c5afe7557d6c.mp4


See v1.89 for full release details.

v1.89

1 year ago

1.89: Autumn release!

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! 👌

📢 Updating from <1.86 and got visual glitches with custom/old backend when using CTRL+Tab or Modal Windows? See 1.86 release note.

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 for their continued contributions and helping with github answers. Special thanks to @thedmd for their code reviews and continued exchanges of ideas.

Ongoing work on Dear ImGui is currently financially supported by:

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;

Some arbitrary highlights among the 90+ changes:

  • Debug Tools: Hovering 0xXXXXXXX ids in Debug Log and Metrics can now visually locate the item. (#5855)
  • Popups & Modals: fixed nested Begin() inside a popup being erroneously input-inhibited.
  • IO: Mitigate scrolling issues on system sending dual-axis wheel data simultaneously (more fixes coming later).
  • IsItemHovered: added ImGuiHoveredFlags_DelayNormal and ImGuiHoveredFlags_DelayShort for delayed hover test (work on items that have no persistent identifier e.g. Text items).
  • InputText: added ImGuiInputTextFlags_EscapeClearsAll and io.ConfigInputTextEnterKeepActive. Added Shift+Click style selection. Improvements for numerical inputs for IME mode sending full-width characters. Other fixes.
  • Menus: various fixes for menu item inside non-popup root windows. Fixes for keyboard/gamepad navigations.
  • TabBar: fixes occasional freezes when feeding non-rounded tab widths.
  • Backends: Many fixes: freezing IME on Win32, fix for SDL 2.0.22 auto-capture and drag and drop issues with multi-viewports, fixes corruptions issues with OpenGL and multi-viewports on buggy Intel GPU drivers, OSX support for C++ apps etc.
  • Obsoleted variety of old symbols, with backward-compatible redirection for newly obsoleted stuff.
  • Internals: added wip internal APIs to allow handling input/shorting routing and key ownership. Things will be moved into public APIs over time, including a Shortcut() function that magically handle input routing.
  • And many more things...

See Wiki Page: Debug Tools

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

  • Layout: Obsoleted using SetCursorPos() / SetCursorScreenPos() to extend parent window/cell boundaries. (#5548) This relates to when moving the cursor position beyond current boundaries WITHOUT submitting an item.
    • Previously this would make the window content size ~200x200: Begin(...) + SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200)) + End()
    • Instead, please submit an item: Begin(...) + SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200)) + Dummy(ImVec2(0,0)) + End()
    • Or simpler alternative: Begin(...) + Dummy(ImVec2(200,200)) + End();
    • Content size is now only extended when submitting an item.
      • With #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS this will now be detected and assert.
      • Without #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS this will silently be fixed until we obsolete it.
      • This incorrect pattern has been mentioned or suggested in: #4510, #3355, #1760, #1490, #4152, #150, threads have been amended to refer to this issue.
  • Renamed and merged keyboard modifiers key enums and flags into a same set: (#4921, #456)
    • ImGuiKey_ModCtrl and ImGuiModFlags_Ctrl -> ImGuiMod_Ctrl
    • ImGuiKey_ModShift and ImGuiModFlags_Shift -> ImGuiMod_Shift
    • ImGuiKey_ModAlt and ImGuiModFlags_Alt -> ImGuiMod_Alt
    • ImGuiKey_ModSuper and ImGuiModFlags_Super -> ImGuiMod_Super Kept inline redirection enums (will obsolete). This change simplifies a few things, reduces confusion, and will facilitate upcoming shortcut/input ownership apis.
    • (The ImGuiKey_ModXXX were introduced in 1.87 and mostly used by backends. The ImGuiModFlags_XXX have been exposed in imgui.h but not really used by any public api, only by third-party extensions. They were however subject to a recent rename ImGuiKeyModFlags_XXX -> ImGuiModFlags_XXX and we are exceptionally commenting out the older ImGuiKeyModFlags_XXX names ahead of obsolescence schedule to reduce confusion and because they were not meant to be used anyway.)
  • Removed io.NavInputs[] and ImGuiNavInput enum that were used to feed gamepad inputs. Basically 1.87 already obsoleted them from the backend's point of view, but internally our navigation code still used this array and enum, so they were still present. Not anymore! (#4921, #4858, #787, #1599, #323) Transition guide:
    • Official backends from 1.87:
      • no issue.
    • Official backends from 1.60 to 1.86:
      • will compile and convert legacy gamepad inputs, unless IMGUI_DISABLE_OBSOLETE_KEYIO is defined. Need updating!
    • Custom backends not writing to io.NavInputs[] (no gamepad support)
      • no issue.
    • Custom backends writing to io.NavInputs[]:
      • will compile and convert legacy gamepad inputs, unless IMGUI_DISABLE_OBSOLETE_KEYIO is defined. Need fixing!
    • TL;DR: Backends should call io.AddKeyEvent() / io.AddKeyAnalogEvent() with ImGuiKey_GamepadXXX values instead of filling io.NavInput[]. The ImGuiNavInput enum was essentially 1.60's attempt to combine keyboard and gamepad inputs with named semantic, but the additional indirection and copy added complexity and got in the way of other incoming work. User's code (other than backends) should not be affected, unless you have custom widgets intercepting navigation events via the named enums (in which case you can upgrade your code).
  • DragInt(), SliderInt(): Removed runtime patching of invalid "%f"/"%.0f" types of format strings. This was obsoleted in 1.61 (May 2018). See 1.61 changelog for details.
  • Changed signature of ImageButton() function: (#5533, #4471, #2464, #1390)
    • Added const char* str_id parameter + removed int frame_padding = -1 parameter.
    • Old signature: bool ImageButton(ImTextureID tex_id, ImVec2 size, ImVec2 uv0 = ImVec2(0,0), ImVec2 uv1 = ImVec2(1,1), int frame_padding = -1, ImVec4 bg_col = ImVec4(0,0,0,0), ImVec4 tint_col = ImVec4(1,1,1,1));
      • used the ImTextureID value to create an ID. This was inconsistent with other functions, led to ID conflicts, and caused problems with engines using transient ImTextureID values.
      • had a FramePadding override which was inconsistent with other functions and made the already-long signature even longer.
    • New signature: bool ImageButton(const char* str_id, ImTextureID tex_id, ImVec2 size, ImVec2 uv0 = ImVec2(0,0), ImVec2 uv1 = ImVec2(1,1), ImVec4 bg_col = ImVec4(0,0,0,0), ImVec4 tint_col = ImVec4(1,1,1,1));
      • requires an explicit identifier. You may still use e.g. PushID() calls and then pass an empty identifier.
      • always uses style.FramePadding for padding, to be consistent with other buttons. You may use PushStyleVar() to alter this.
    • As always we are keeping a redirection function available (will obsolete later).
  • Removed the bizarre legacy default argument for TreePush(const void* ptr = NULL). Must always pass a pointer value explicitly, NULL/nullptr is ok but require cast, e.g. TreePush((void*)nullptr); If you used TreePush() replace with TreePush((void*)NULL); (#1057)
  • Commented out redirecting functions/enums names that were marked obsolete in 1.77 and 1.79 (August 2020): (#3361)
    • DragScalar(), DragScalarN(), DragFloat(), DragFloat2(), DragFloat3(), DragFloat4()
    • SliderScalar(), SliderScalarN(), SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4()
      • For old signatures ending with (..., const char* format, float power = 1.0f) -> use (..., format ImGuiSliderFlags_Logarithmic) if power != 1.0f.
    • BeginPopupContextWindow(const char*, ImGuiMouseButton, bool) -> use BeginPopupContextWindow(const char*, ImGuiPopupFlags)
    • OpenPopupContextItem() (briefly existed from 1.77 to 1.79) -> use OpenPopupOnItemClick()
  • Removed support for 1.42-era IMGUI_DISABLE_INCLUDE_IMCONFIG_H / IMGUI_INCLUDE_IMCONFIG_H. They only made sense before we could use IMGUI_USER_CONFIG. (#255)

Other Changes

  • Popups & Modals: fixed nested Begin() inside a popup being erroneously input-inhibited. While it is unusual, you can nest a Begin() inside a popup or modal, it is occasionally useful to achieve certain things (e.g. some ways to implement suggestion popups #718, #4461).
  • Inputs: Standard widgets now claim for key/button ownership and test for them.
    • Fixes scenario where e.g. a Popup with a Selectable() reacting on mouse down (e.g. double click) closes, and behind it is another window with an item reacting on mouse up. Previously this would lead to both items reacting, now the item in the window behind won't react on the mouse up since the mouse button ownership has already been claimed earlier.
    • Internals: There are MANY more aspects to this changes. Added experimental/internal APIs to allow handling input/shorting routing and key ownership. Things will be moved into public APIs over time. For now this release is a way to test the solidity of underlying systems while letting early adopters adopters toy with internals. (#456, #2637, #2620, #2891, #3370, #3724, #4828, #5108, #5242, #5641)
  • Scrolling: Tweak mouse-wheel locked window timer so it is shorter but also gets reset whenever scrolling again. Modulate for small (sub-pixel) amounts. (#2604)
  • Scrolling: Mitigated issue where multi-axis mouse-wheel inputs (usually from touch pad events) are incorrectly locking scrolling in a parent window. (#4559, #3795, #2604)
  • Scrolling: Exposed SetNextWindowScroll() in public API. Useful to remove a scrolling delay in some situations where e.g. windows need to be synched. (#1526)
  • InputText: added experimental io.ConfigInputTextEnterKeepActive feature to make pressing Enter keep the input active and select all text.
  • InputText: numerical fields automatically accept full-width characters (U+FF01..U+FF5E) by converting them to half-width (U+0021..U+007E).
  • InputText: added ImGuiInputTextFlags_EscapeClearsAll flag: first press on Escape clears text if any, second press deactivate the InputText(). (#5688, #2620)
  • InputText: added support for shift+click style selection. (#5619) [@procedural]
  • InputText: clarified that callbacks cannot modify buffer when using the ImGuiInputTextFlags_ReadOnly flag.
  • InputText: fixed minor one-frame selection glitch when reverting with Escape.
  • ColorEdit3: fixed id collision leading to an assertion. (#5707)
  • IsItemHovered: Added ImGuiHoveredFlags_DelayNormal and ImGuiHoveredFlags_DelayShort flags, allowing to introduce a shared delay for tooltip idioms. The delays are respectively io.HoverDelayNormal (default to 0.30f) and io.HoverDelayFast (default to 0.10f). (#1485)
  • IsItemHovered: Added ImGuiHoveredFlags_NoSharedDelay to disable sharing delays between items, so moving from one item to a nearby one will requires delay to elapse again. (#1485)
  • Tables: activating an ID (e.g. clicking button inside) column doesn't prevent columns output flags from having ImGuiTableColumnFlags_IsHovered set. (#2957)
  • Tables,Columns: fixed a layout issue where SameLine() prior to a row change would set the next row in such state where subsequent SameLine() would move back to previous row.
  • Tabs: Fixed a crash when closing multiple windows (possible with docking only) with an appended TabItemButton(). (#5515, #3291) [@rokups]
  • Tabs: Fixed shrinking policy leading to infinite loops when fed unrounded tab widths. (#5652)
  • Tabs: Fixed shrinking policy sometimes erroneously making right-most tabs stray a little out bar boundaries (bug in 1.88). (#5652).
  • Tabs: Enforcing minimum size of 1.0f, fixed asserting on zero-tab widths. (#5572)
  • Window: Fixed a potential crash when appending to a child window. (#5515, #3496, #4797) [@rokups]
  • Window: Fixed an issue where uncollapsed a window would show a scrollbar for a frame.
  • Window: Auto-fit size takes account of work rectangle (menu bars eating from viewport). (#5843)
  • Window: Fixed position not being clamped while auto-resizing (fixes appearing windows without .ini data from moving for a frame when using io.ConfigWindowsMoveFromTitleBarOnly). (#5843)
  • IO: Added ImGuiMod_Shortcut which is ImGuiMod_Super on Mac and ImGuiMod_Ctrl otherwise. (#456)
  • IO: Added ImGuiKey_MouseXXX aliases for mouse buttons/wheel so all operations done on ImGuiKey can apply to mouse data as well. (#4921)
  • IO: Filter duplicate input events during the AddXXX() calls. (#5599, #4921)
  • IO: Fixed AddFocusEvent(false) to also clear MouseDown[] state. (#4921)
  • Menus: Fixed incorrect sub-menu parent association when opening a menu by closing another. Among other things, it would accidentally break part of the closing heuristic logic when moving towards a sub-menu. (#2517, #5614). [@rokups]
  • Menus: Fixed gaps in closing logic which would make child-menu erroneously close when crossing the gap between a menu item inside a window and a child-menu in a secondary viewport. (#5614)
  • Menus: Fixed using IsItemHovered() / IsItemClicked() on BeginMenu(). (#5775)
  • Menus, Popups: Experimental fix for issue where clicking on an open BeginMenu() item called from a window which is neither a popup neither a menu used to incorrectly close and reopen the menu (the fix may have side-effect and is labelled as experimental as we may need to revert). (#5775)
  • Menus, Nav: Fixed keyboard/gamepad navigation occasionally erroneously landing on menu-item in parent window when the parent is not a popup. (#5730)
  • Menus, Nav: Fixed not being able to close a menu with Left arrow when parent is not a popup. (#5730)
  • Menus, Nav: Fixed using left/right navigation when appending to an existing menu (multiple BeginMenu() call with same names). (#1207)
  • Menus: Fixed a one-frame issue where SetNextWindowXXX data are not consumed by a BeginMenu() returning false.
  • Nav: Fixed moving/resizing window with gamepad or keyboard when running at very high framerate.
  • Nav: Pressing Space/GamepadFaceDown on a repeating button uses the same repeating rate as a mouse hold.
  • Nav: Fixed an issue opening a menu with Right key from a non-menu window.
  • Text: Fixed wrapped-text not doing a fast-forward on lines above the clipping region, which would result in an abnormal number of vertices created (was slower and more likely to asserts with 16-bits ImDrawVtx). (#5720)
  • Fonts: Added GetGlyphRangesGreek() helper for Greek & Coptic glyph range. (#5676, #5727) [@azonenberg]
  • ImDrawList: Not using alloca(), anymore, lift single polygon size limits. (#5704, #1811)
  • Platform IME: [Windows] Removed call to ImmAssociateContextEx() leading to freeze on some setups. (#2589, #5535, #5264, #4972)
  • Misc: ImGuiKey is now a typed enum, allowing ImGuiKey_XXX symbols to be named in debuggers. (#4921)
  • Misc: better error reporting for PopStyleColor() / PopStyleVar() + easier to recover. (#1651)
  • Misc: io.Framerate moving average now converge in 60 frames instead of 120. (#5236, #4138)
  • Debug Tools: Debug Log: Visually locate items when hovering a 0xXXXXXXXX value. (#5855)
  • Debug Tools: Debug Log: Added IO and Clipper events logging. (#5855)
  • Debug Tools: Metrics: Visually locate items when hovering a 0xXXXXXXXX value (in most places).
  • Debug Tools: Item Picker: Mouse button can be changed by holding Ctrl+Shift, making it easier to use the Item Picker in e.g. menus. (#2673)
  • Docs: Fixed various typos in comments and documentations. (#5649, #5675, #5679) [@tocic, @lessigsx]
  • Demo: Improved "Constrained-resizing window" example, more clearly showcase aspect-ratio. (#5627)
  • Demo: Added more explicit "Center window" mode to "Overlay example". (#5618)
  • Demo: Fixed Log & Console from losing scrolling position with Auto-Scroll when child is clipped. (#5721)
  • Examples: Added all SDL examples to default VS solution.
  • Examples: Win32: Always use RegisterClassW() to ensure windows are Unicode. (#5725)
  • Examples: Android: Enable .ini file loading/saving into application internal data folder. (#5836) [@rewtio]
  • Backends: GLFW: Honor GLFW_CURSOR_DISABLED by not setting mouse position. (#5625) [@scorpion-26]
  • Backends: GLFW: Add glfwGetError() call on GLFW 3.3 to inhibit missing mouse cursor errors. (#5785) [@mitchellh]
  • Backends: SDL: Disable SDL 2.0.22 new "auto capture" which prevents drag and drop across windows (e.g. for multi-viewport support) and don't capture mouse when drag and dropping. (#5710)
  • Backends: Win32: Convert WM_CHAR values with MultiByteToWideChar() when window class was registered as MBCS (not Unicode). (#5725, #1807, #471, #2815, #1060) [@or75, @ocornut]
  • Backends: OSX: Fixed mouse inputs on flipped views. (#5756) [@Nemirtingas]
  • Backends: OSX: Fixed mouse coordinate before clicking on the host window. (#5842) [@maezawa-akira]
  • Backends: OSX: Fixes to support full app creation in C++. (#5403) [@stack]
  • Backends: OpenGL3: Reverted use of glBufferSubData(), too many corruptions issues were reported, and old leaks issues seemingly can't be reproed with Intel drivers nowadays (revert earlier changes). (#4468, #4504, #3381, #2981, #4825, #4832, #5127).
  • Backends: Metal: Use __bridge for ARC based systems. (#5403) [@stack]
  • Backends: Metal: Add dispatch synchronization. (#5447) [@luigifcruz]
  • Backends: Metal: Update deprecated property sampleCount -> rasterSampleCount. (#5603) [@dcvz]
  • Backends: Vulkan: Added experimental ImGui_ImplVulkan_RemoveTexture() for api symetry. (#914, #5738).
  • Backends: WebGPU: fixed rendering when a depth buffer is enabled. (#5869) [@brainlag]

Other branches & Beta features!

The Docking and Multi-viewports 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.88 to 1.89 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Fixed incorrect focus highlight on docking node when focusing a menu. (#5702)
  • Docking, Nav: Fixed using gamepad/keyboard navigation not being able enter menu layer when it only contained the standard Collapse/Close buttons and no actual menu. (#5463, #4792)
  • Docking: Fixed regression introduced in v1.87 when docked window content not rendered while switching between with CTRL+Tab. [@rokups]
  • Docking: Fixed amending into an existing tab bar from rendering invisible items. (#5515)
  • Docking: Made spacing between dock nodes not a dropping gap. When hovering it only outer-docking drop markers are visible.
  • Docking+Viewports: Fixed undocking window node causing parent viewports to become unresponsive in certain situation (e.g. hidden tab bar). (#5503) [@rokups]
  • Backends: SDL: Fixed building backend under non-OSX Apple targets (e.g. iPhone). (#5665)
  • Backends: SDL: Fixed drag and drop crossing a viewport border losing mouse coordinates. (#5710, #5012)
  • Backends: GLFW: Fixed leftover static variable preventing from changing or re-initializing backend while application is running. (#4616, #5434) [@rtoumazet]

There's a CMake branch/PR (#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.

Below a selection of screenshots from Gallery threads...

Tooll 3 - A realtime animation toolkit https://github.com/still-scene/t3/ tooll-screenshot

Here's a fancy animated UI that's built with an animation library I've been working on. Although it looks complex and hard to implement, the library handles most of the work. @thedemons image

an IDE, Assembler and Emulator for the CPU Intel 8085 https://github.com/FanisDeligiannis/8085_emulator 8085_emulator

Erhe by @tksuoran https://github.com/tksuoran/erhe Erhe

Castle-Engine by @benanil Castle Engine terrain with grass

imspinner: Set of nice spinners by @dalerank (#5421) https://github.com/dalerank/imspinner imspinner

ImExplorer by @immortalx74: "WIP Windows tabbed file explorer replacement. Uses the voidtools Everything SDK for searching and navigating." imexplorer

Unknown software by @keycccc 008

Fragmenter - animated loop machine by @keszegh A real-time animation app, using ImGui via the Gideros ImGui plugin: https://longtitle-productions.itch.io/fragmenter Fragmenter

Hazel Engine by @TheCherno https://github.com/TheCherno/Hazel Hazelnut

Earthblade game editor (upcoming game by the makers of Celeste and Towerfall) Earthblade Editor

Harfang 3D Engine https://github.com/harfang3d/harfang3d harfang-studio-cyber-city

Xpano by @krupkat "I made a tool for stitching photos:" https://github.com/krupkat/xpano Main Xpano gui

B.A.M. by @berkayylmao "a mod/live editor for older Need for Speed games. It uses Dear ImGui with a simple beautifier layer." https://github.com/berkayylmao/BerkaysAssortedMods BAM

INO3D by @everaldojunior98 "a 3D environment for circuits simulation." https://github.com/everaldojunior98/INO3D INO3D

"Hello friends. Our team who is making a game engine in Com2us uses and loves ImGui. It's really helpful to use ImGui to implement various tools as shown in gallery threads of the other engines. we are really appreciated ImGui. thanks!" unnamed

Syntacts by @epezent https://www.syntacts.org/ syntacts_gui

Raytracing off vs. on. All in software, no RTX:p And ImGui for everything UI of course!

Engine by @gboisse 5DB3447D-E7FE-4D27-BCDB-561B0C37E834

Torch R&D Prototype at Ubisoft La Forge https://twitter.com/Ubisoft/status/1582017652557377537 Ubisoft La Forge - Torch mp4_snapshot_00 03_ 2022 10 19_14 01 09

Raven by @jminor "a user interface for viewing OpenTimelineIO video/audio timelines." https://github.com/jminor/raven Raven

And many more in Gallery Threads


PS: Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out today to say hi! See Sponsors page for details.

PS.2: Scroll back up and read that changelog, it is useful!

v1.88

1 year ago

1.88: Summer maintainance release!

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! 👌

📢 Updating from <1.86 and got visual glitches with custom/old backend when using CTRL+Tab or Modal Windows? See 1.86 release note.

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 for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by companies such as:

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;

This is a general "many things" release. Initially I was expecting 1.88 to include new features for input ownership and input routing but it's not ready and we haven't had a release for a while. Among the 80+ changes, some that may interest more people:

  • Various fixes related to the 1.87 input io/queue changes.
  • Debug: Added of a "Dear ImGui Debug Log" window facilitating looking into common issues (e.g. focus change, popup closure, active id being stolen, etc.).
  • Debug: Added a "UTF-8 Encoding Viewer" in Metrics and DebugTextEncoding() function to help validating UTF-8 code since many users have issues with UTF-8 encoding and C++ makes things difficult.
  • Sliders: Clicking within the grab/knob of a non-Drag Slider width doesn't alter current value.
  • InputText: Fixed undo-state corruptions when altering in-buffers in user callback and in other cases.
  • Tables: Fixed a rather frequent draw-call merging issues (some tables created an unnecessary extra draw-call).
  • Fixed subtle or rare nav and focus issues.
  • Many backends fixes (including tentative fixes for frequent OpenGL issues on Windows in multi-viewport mode).
  • Various Docking and Multi-viewport fixes.

debug tools Some of the debug tools

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

  • Renamed IMGUI_DISABLE_METRICS_WINDOW to IMGUI_DISABLE_DEBUG_TOOLS` for correctness. Kept support for old define (will obsolete).
  • Renamed CaptureMouseFromApp() and CaptureKeyboardFromApp() to SetNextFrameWantCaptureMouse() and SetNextFrameWantCaptureKeyboard() to clarify purpose, old name was too misleading. Kept inline redirection functions (will obsolete).
  • Renamed ImGuiKeyModFlags to ImGuiModFlags. Kept inline redirection enums (will obsolete). (This was never used in public API functions but technically present in imgui.h and ImGuiIO).
  • Backends: OSX: Removed ImGui_ImplOSX_HandleEvent() from backend API in favor of backend automatically handling event capture. Examples that are using the OSX backend have removed all the now-unnecessary calls to ImGui_ImplOSX_HandleEvent(), applications can do as well. [@stuartcarnie] (#4821)
  • Internals: calling ButtonBehavior() without calling ItemAdd() now requires a KeepAliveID() call. This is because the KeepAliveID() call was moved from GetID() to ItemAdd(). (#5181)

Other Changes

  • IO: Fixed backward-compatibility regression introduced in 1.87: (#4921, #4858)
    • Direct accesses to io.KeysDown[] with legacy indices didn't work (with new backends).
    • Direct accesses to io.KeysDown[GetKeyIndex(XXX)] would access invalid data (with old/new backends).
    • Calling IsKeyDown() didn't have those problems, and is recommended as io.KeysDown[] is obsolete.
  • IO: Fixed input queue trickling of interleaved keys/chars events (which are frequent especially when holding down a key as OS submits chars repeat events) delaying key presses and mouse movements. In particular, using the input system for fast game-like actions (e.g. WASD camera move) would typically have been impacted, as well as holding a key while dragging mouse. Constraints have been lifted and are now only happening when e.g. an InputText() widget is active. (#4921, #4858)
    • Note that even thought you shouldn't need to disable io.ConfigInputTrickleEventQueue, you can technically dynamically change its setting based on the context (e.g. disable only when hovering or interacting with a game/3D view).
  • IO: Fixed input queue trickling of mouse wheel events: multiple wheel events are merged, while a mouse pos followed by a mouse wheel are now trickled. (#4921, #4821)
  • IO: Added io.SetAppAcceptingEvents() to set a master flag for accepting key/mouse/characters events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen.
  • Windows: Fixed first-time windows appearing in negative coordinates from being initialized with a wrong size. This would most often be noticeable in multi-viewport mode (docking branch) when spawning a window in a monitor with negative coordinates. (#5215, #3414) [@DimaKoltun]
  • Clipper: Fixed a regression in 1.86 when not calling clipper.End() and late destructing the clipper instance. High-level languages (Lua,Rust etc.) would typically be affected. (#4822)
  • Layout: Fixed mixing up SameLine() and SetCursorPos() together from creating situations where line height would be emitted from the wrong location (e.g. ItemA+SameLine()+SetCursorPos()+ItemB' would emit ItemA worth of height from the position of ItemB, which is not necessarily aligned with ItemA).
  • Sliders: An initial click within the knob/grab doesn't shift its position. (#1946, #5328)
  • Sliders, Drags: Fixed dragging when using hexadecimal display format string. (#5165, #3133)
  • Sliders, Drags: Fixed manual input when using hexadecimal display format string. (#5165, #3133)
  • InputScalar: Fixed manual input when using %03d style width in display format string. (#5165, #3133)
  • InputScalar: Automatically allow hexadecimal input when format is %X (without extra flag).
  • InputScalar: Automatically allow scientific input when format is float/double (without extra flag).
  • Nav: Fixed nav movement in a scope with only one disabled item from focusing the disabled item. (#5189)
  • Nav: Fixed issues with nav request being transferred to another window when calling SetKeyboardFocusHere() and simultaneous changing window focus. (#4449)
  • Nav: Changed SetKeyboardFocusHere() to not behave if a drag or window moving is in progress.
  • Nav: Fixed inability to cancel nav in modal popups. (#5400) [@rokups]
  • IsItemHovered(): added ImGuiHoveredFlags_NoNavOverride to disable the behavior where the return value is overridden by focus when gamepad/keyboard navigation is active.
  • InputText: Fixed pressing Tab emitting two tabs characters because of dual Keys/Chars events being trickled with the new input queue (happened on some backends only). (#2467, #1336)
  • InputText: Fixed a one-frame display glitch where pressing Escape to revert after a deletion would lead to small garbage being displayed for one frame. Curiously a rather old bug! (#3008)
  • InputText: Fixed an undo-state corruption issue when editing main buffer before reactivating item. (#4947)
  • InputText: Fixed an undo-state corruption issue when editing in-flight buffer in user callback. (#4947, #4949] [@JoshuaWebb]
  • Tables: Fixed incorrect border height used for logic when resizing one of several synchronized instance of a same table ID, when instances have a different height. (#3955).
  • Tables: Fixed incorrect auto-fit of parent windows when using non-resizable weighted columns. (#5276)
  • Tables: Fixed draw-call merging of last column. Depending on some unrelated settings (e.g. BorderH) merging drawcall of the last column didn't always work (regression since 1.87). (#4843, #4844) [@rokups]
  • Inputs: Fixed IsMouseClicked() repeat mode rate being half of keyboard repeat rate.
  • ColorEdit: Fixed text baseline alignment after a SameLine() after a ColorEdit() with visible label.
  • TabBar: BeginTabItem() now reacts to SetNextItemWidth(). (#5262)
  • TabBar: Tweak shrinking policy so that while resizing tabs that don't need shrinking keep their initial width more precisely (without the occasional +1 worth of width).
  • Menus: Adjusted BeginMenu() closing logic so hovering void or non-MenuItem() in parent window always lead to menu closure. Fixes using items that are not MenuItem() or BeginItem() at the root level of a popup with a child menu opened.
  • Menus: Menus emitted from the main/scrolling layer are not part of the same menu-set as menus emitted from the menu-bar, avoiding accidental hovering from one to the other. (#3496, #4797) [@rokups]
  • Style: Adjust default value of GrabMinSize from 10.0f to 12.0f.
  • Stack Tool: Added option to copy item path to clipboard. (#4631)
  • Settings: Fixed out-of-bounds read when .ini file on disk is empty. (#5351) [@quantum5]
  • Settings: Fixed some SetNextWindowPos/SetNextWindowSize API calls not marking settings as dirty.
  • DrawList: Fixed PathArcTo() emitting terminating vertices too close to arc vertices. (#4993) [@thedmd]
  • DrawList: Fixed texture-based anti-aliasing path with RGBA textures (#5132, #3245) [@cfillion]
  • DrawList: Fixed divide-by-zero or glitches with Radius/Rounding values close to zero. (#5249, #5293, #3491)
  • DrawList: Circle with a radius smaller than 0.5f won't appear, to be consistent with other primitives. [@thedmd]
  • Debug: Added ShowDebugLogWindow() showing an opt-in synthetic log of principal events (focus, popup, active id changes) helping to diagnose issues.
  • Debug: Added DebugTextEncoding() function to facilitate diagnosing issues when not sure about whether you have a UTF-8 text encoding issue or a font loading issue. [@LaMarche05, @ocornut]
  • Demo: Add better demo of how to use SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard().
  • Metrics: Added a "UTF-8 Encoding Viewer" section using the aforementioned DebugTextEncoding() function.
  • Metrics: Added "InputText" section to visualize internal state (#4947, #4949).
  • Misc: Fixed calling GetID("label") before a widget emitting this item inside a group (such as InputInt()) from causing an assertion when closing the group. (#5181).
  • Misc: Fixed IsAnyItemHovered() returning false when using navigation.
  • Misc: Allow redefining IM_COL32_XXX layout macros to facilitate use on big-endian systems. (#5190, #767, #844)
  • Misc: Added IMGUI_STB_SPRINTF_FILENAME to support custom path to stb_sprintf. (#5068, #2954) [@jakubtomsu]
  • Misc: Added constexpr to ImVec2/ImVec4 inline constructors. (#4995) [@Myriachan]
  • Misc: Updated stb_truetype.h from 1.20 to 1.26 (many fixes). (#5075)
  • Misc: Updated stb_textedit.h from 1.13 to 1.14 (our changes so this effectively is a no-op). (#5075)
  • Misc: Updated stb_rect_pack.h from 1.00 to 1.01 (minor). (#5075)
  • Misc: binary_to_compressed_c tool: Added -nostatic option. (#5021) [@podsvirov]
  • ImVector: Fixed erase() with empty range. (#5009) [@thedmd]
  • Backends: Vulkan: Don't use VK_PRESENT_MODE_MAX_ENUM_KHR as specs state it isn't part of the API. (#5254)
  • Backends: GLFW: Fixed a regression in 1.87 which resulted in keyboard modifiers events being reported incorrectly on Linux/X11, due to a bug in GLFW. [@rokups]
  • Backends: GLFW: Fixed untranslated keys when pressing lower case letters on OSX (#5260, #5261) [@cpichard]
  • Backends: SDL: Fixed dragging out viewport broken on some SDL setups. (#5012) [@rokups]
  • Backends: SDL: Added support for extra mouse buttons (SDL_BUTTON_X1/SDL_BUTTON_X2). (#5125) [@sgiurgiu]
  • Backends: SDL, OpenGL3: Fixes to facilitate building on AmigaOS4. (#5190) [@afxgroup]
  • Backends: OSX: Monitor NSKeyUp events to catch missing keyUp for key when user press Cmd + key (#5128) [@thedmd]
  • Backends: OSX, Metal: Store backend data in a per-context struct, allowing to use these backends with multiple contexts. (#5203, #5221, #4141) [@noisewuwei]
  • Backends: Metal: Fixed null dereference on exit inside command buffer completion handler. (#5363, #5365) [@warrenm]
  • Backends: OpenGL3: Partially revert 1.86 change of using glBufferSubData(): now only done on Windows and Intel GPU, based on querying glGetString(GL_VENDOR). Essentially we got report of accumulating leaks on Intel with multi-viewports when using simple glBufferData() without orphaning, and report of corruptions on other GPUs with multi-viewports when using orphaning and glBufferSubData(), so currently switching technique based on GPU vendor, which unfortunately reinforce the cargo-cult nature of dealing with OpenGL drivers. Navigating the space of mysterious OpenGL drivers is particularly difficult as they are known to rely on application specific whitelisting. (#4468, #3381, #2981, #4825, #4832, #5127).
  • Backends: OpenGL3: Fix state corruption on OpenGL ES 2.0 due to not preserving GL_ELEMENT_ARRAY_BUFFER_BINDING and vertex attribute states. [@rokups]
  • Examples: Emscripten+WebGPU: Fix building for latest WebGPU specs. (#3632)
  • Examples: OSX+Metal, OSX+OpenGL: Removed now-unnecessary calls to ImGui_ImplOSX_HandleEvent(). (#4821)

Other branches & Beta features!

The Docking and Multi-viewports 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.87 to 1.88 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Fixed floating docked nodes not being clamped into viewport workrect to stay reachable when io.ConfigWindowsMoveFromTitleBarOnly is true and multi-viewports are disabled. (#5044)
  • Docking: Fixed a regression where moving window would be interrupted after undocking a tab when io.ConfigDockingAlwaysTabBar is true. (#5324) [@rokups]
  • Docking: Fixed incorrect focus highlight on docking node when focusing empty central node or a child window which was manually injected into a dockspace window.
  • Docking, Modal: Fixed a crash when opening popup from a parent which is being docked on the same frame. (#5401)
  • Viewports: Fixed translating a host viewport from briefly altering the size of AlwaysAutoResize windows. (#5057)
  • Viewports: Fixed main viewport size not matching ImDrawData::DisplaySize for one frame during resize when multi-viewports are disabled. (#4900)
  • Backends: SDL: Fixed dragging out main viewport broken on some SDL setups. (#5012) [@rokups]
  • Backends: OSX: Added support for multi-viewports. [@stuartcarnie, @metarutaiga] (#4821, #2778)
  • Backends: Metal: Added support for multi-viewports. [@stuartcarnie, @metarutaiga] (#4821, #2778)
  • Examples: OSX+Metal, SDL+Metal, GLFW+Metal: Added support for multi-viewports. [@rokups]

Some of changes from 1.87 to 1.88 related to the range-select branch:

  • Fixed a bug using CTRL+Click on multi-select tree nodes.

There's a CMake branch/PR (#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.

Below a selection of screenshots from Gallery threads...

Pixel FX Designer 2 https://codemanu.itch.io/particle-fx-designer / https://store.steampowered.com/app/939360/Pixel_FX_Designer/ e51b4ff1235198b0175db75de8409bb1fa4b9628

"FightNJokes is a semi-humorous retro style 2D fighting game made for players with humor" https://twitter.com/fightnjokes Fightnjokes-02

@gboisse: Procedural geometry with ImGui-based nodes: 764CB4C8-5502-4477-9416-5A0AFEEE5A2A

@sgiurgiu: A Reddit client https://github.com/sgiurgiu/reddit_desktop image

@Jaysmito101: TerraForge3D https://github.com/Jaysmito101/TerraForge3D image

@Unit520: Hexmap an interactive WebGL/WASM based binary data exploration tool https://unit520.net/hexmap hexmap

@plkno1-Tse Date picker

@tksuoran: Early work on resurrecting a small turn by turn strategy game I wrote in the early 90s on Amiga. New in this rewrite is procedural map generation. 2022_04_23

@lukaasm EXOR Tools/Model Editor, Benchmark viewer EXOR

@mborgerson: Dear ImGui is used for the UI in xemu, an original Xbox emulator

@gan74: The UE5 inspired UI in my engine editor thing, Yave. Nothing too fancy, but I like it clean and simple. Yave

@travishaynes: I'm using ImGui to create a PDF viewer designed for doing quantity takeoff from scaled construction drawings [...] Screenshot from 2022-05-21 16-55-19

@DickyQi: MIDI Play and keyboard test base on Timidity and ImGui https://github.com/tanluteam/libmidi.git

@immortalx74: I'm using the ReaImGui bindings to create a guitar/bass MIDI editor for Reaper. https://github.com/immortalx74/Reaffer rec_reaffer9

@pixtur: Tooll 3 - A realtime animation toolkit https://github.com/still-scene/t3/ tooll-screenshot

@thedemons: Here's a fancy animated UI that's built with an animation library I've been working on. https://user-images.githubusercontent.com/17585270/173690093-5c10dae5-279c-439a-81ab-09f7cf4fe576.mp4

@FunIsDangerous: Hello! I'm developping an IDE, Assembler and Emulator for the CPU Intel 8085. https://github.com/FunIsDangerous/8085_emulator image


PS: Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out today to say hi! See Sponsors page for details.

PS.2: Scroll back up and read that changelog, it is useful!

v1.87

2 years ago

1.87: The event-based IO release!

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! 👌

📢 Got visual glitches with custom/old backend when using CTRL+Tab or Modal Windows? See 1.86 release note.

📢 EDIT 2022/02/21: A regression in 1.87 prevents direct access to legacy io.KeysDown[] array in certains situations (see #4921, now fixed in latest). IsKeyDown() function was not affected.

Thank you!

Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests. Special thanks to @thedmd for their contribution to this verison. Special thanks to @PathogenDavid for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by companies such as:

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;

This is a rather "boring" release in the sense that the refactor are not super exciting per se, but they are going to enable quite a few good things. Backends for all platforms have been updated. Most of the IO API hadn't changed this 1.0!

  • Revamped the way for backend submit data to ImGuiIO. Now using functions e.g. io.AddKeyEvent(). The vast majority of changes are backward compatible but you are encouraged to update your backends now. See full recap > #4921.
  • Added full range of ImGuiKey values, making it possible to access keys in a backend-agnostic way and make it easier to share code (e.g. for third-party libraries using Dear ImGui).
  • Most platfom backends have been reworked to submit events.
  • Backward compatible: 99% of old backends (custom or standard) and app code will still work (but consider updating!)
  • Fixed SDL and GLFW backends to submit translated keys (not same as characters) to facilitate using shortcuts with ImGuiKey values.
  • Trickling input queue improve usability on very low framerate (e.g. <15 FPS).
  • Variety of other fixes (popups, ctrl+tab).

image

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 support for pre-C++11 compilers. We'll stop supporting VS2010. (#4537)
  • Reworked IO mouse input API: (#4921, #4858) [@thedmd, @ocornut]
    • Added io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions, obsoleting writing directly to io.MousePos, io.MouseDown[], io.MouseWheel, etc.
    • This enable input queue trickling to support low framerates. (#2787, #1992, #3383, #2525, #1320)
    • For all new calls to IO functions, the Dear ImGui context should be bound/current.
  • Reworked IO keyboard input API: (#4921, #2625, #3724) [@thedmd, @ocornut]
    • Added io.AddKeyEvent() function, obsoleting writing directly to io.KeyMap[], io.KeysDown[] arrays.
    • For keyboard modifiers, you must call io.AddKeyEvent() with ImGuiKey_ModXXX values, obsoleting writing directly to io.KeyCtrl, io.KeyShift etc.
    • Added io.SetKeyEventNativeData() function (optional) to pass native and old legacy indices.
    • Added full range of key enums in ImGuiKey (e.g. ImGuiKey_F1).
    • Added GetKeyName() helper function.
    • Obsoleted GetKeyIndex(): it is now unnecessary and will now return the same value.
    • All keyboard related functions taking 'nt user_key_index now take ImGuiKey key: IsKeyDown(), IsKeyPressed(), IsKeyReleased(), GetKeyPressedAmount().
    • Added io.ConfigInputTrickleEventQueue (defaulting to true) to disable input queue trickling.
    • Backward compatibility:
      • All backends updated to use new functions.
      • Old backends populating those arrays should still work!
      • Calling e.g. IsKeyPressed(MY_NATIVE_KEY_XXX) will still work! (for a while)
      • Those legacy arrays will only be disabled if #define IMGUI_DISABLE_OBSOLETE_KEYIO'is set in your imconfig. In a few versions, IMGUI_DISABLE_OBSOLETE_FUNCTIONS will automatically enable IMGUI_DISABLE_OBSOLETE_KEYIO, so this will be moved into the regular obsolescence path.
      • BREAKING: (unlikely) If your custom backend used ImGuiKey as mock native indices (e.g. io.KeyMap[ImGuiKey_A] = ImGuiKey_A`` this is a use case that will now assert and be breaking for your old backend. **- Transition guide:** **- IsKeyPressed(MY_NATIVE_KEY_XXX) -> useIsKeyPressed(ImGuiKey_XXX)`
      • IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -> use `IsKeyPressed(ImGuiKey_XXX)
      • Backend writing to io.KeyMap[],KeysDown[] -> backend should call io.AddKeyEvent(), if legacy indexing is desired, call io.SetKeyEventNativeData()**
      • Basically the trick we took advantage of is that we previously only supported native keycode from 0 to 511, so ImGuiKey values can still express a legacy native keycode, and new named keys are all >= 512.
    • This will enable a few things in the future:
      • Access to portable keys allows for backend-agnostic keyboard input code. Until now it was difficult to share code using keyboard across project because of this gap. (#2625, #3724)
      • Access to full key ranges will allow us to develop a proper keyboard shortcut system. (#456)
      • `io.SetKeyEventNativeData() include native keycode/scancode which may later be exposed. (#3141, #2959)
  • Reworked IO nav/gamepad input API and unifying inputs sources: (#4921, #4858, #787)
    • Added full range of ImGuiKey_GamepadXXXX enums (e.g. ImGuiKey_GamepadDpadUp, ImGuiKey_GamepadR2) to use with io.AddKeyEvent(), io.AddKeyAnalogEvent().
    • Added io.AddKeyAnalogEvent() function, obsoleting writing directly to io.NavInputs[] arrays.
  • Renamed ImGuiKey_KeyPadEnter to ImGuiKey_KeypadEnter to align with new symbols. Kept redirection enum. (#2625)
  • Removed support for legacy arithmetic operators (+,+-,*,/) when inputing text into a slider/drag. (#4917, #3184) This doesn't break any API/code but a feature that was accessible by end-users (which seemingly no one used). (Instead you may implement custom expression evaluators to provide a better version of this).
  • Backends: GLFW: backend now uses glfwSetCursorPosCallback().
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=true: nothing to do. is already done for you.
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=false: you WILL NEED to register the GLFW callback using glfwSetCursorPosCallback() and forward it to the backend function ImGui_ImplGlfw_CursorPosCallback().
  • Backends: SDL: Added SDL_Renderer* parameter to ImGui_ImplSDL2_InitForSDLRenderer(), so backend can call SDL_GetRendererOutputSize() to obtain framebuffer size valid for hi-dpi. (#4927) [@Clownacy]
  • Commented out redirecting functions/enums names that were marked obsolete in 1.69, 1.70, 1.71, 1.72 (March-July 2019)
    • ImGui::SetNextTreeNodeOpen() -> use ImGui::SetNextItemOpen()
    • ImGui::GetContentRegionAvailWidth() -> use ImGui::GetContentRegionAvail().x
    • ImGui::TreeAdvanceToLabelPos() -> use ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetTreeNodeToLabelSpacing());`
    • ImFontAtlas::CustomRect -> use ImFontAtlasCustomRect
    • ImGuiColorEditFlags_RGB/HSV/HEX -> use ImGuiColorEditFlags_DisplayRGB/HSV/Hex
  • Platform IME: Removed io.ImeSetInputScreenPosFn() in favor of more flexible io.SetPlatformImeDataFn() for IME support. Because this field was mostly only ever used by Dear ImGui internally, not by backends nor the vast majority of user code, this should only affect a very small fraction for users who are already very IME-aware.
  • Platform IME: Obsoleted void* io.ImeWindowHandle in favor of writing to void* ImGuiViewport::PlatformHandleRaw. This removes an incompatibility between 'master' and 'multi-viewports' backends and toward enabling better support for IME. Updated backends accordingly. Because the old field is set by existing backends, we are keeping it (marked as obsolete).

Other Changes

  • IO: Added event based input queue API, which now trickles events to support low framerates. Previously the most common issue case (button presses in low framerates) was handled by backend. This is now handled by core automatically for all kind of inputs. (#4858, #2787, #1992, #3383, #2525, #1320) [@thedmd, @ocornut]
    • New IO functions for keyboard/gamepad: io.AddKeyEvent(), io.AddKeyAnalogEvent().
    • New IO functions for mouse: io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent().
  • IO: Unified key enums allow using key functions on key mods and gamepad values.
  • Fixed CTRL+Tab into an empty window causing artifacts on the highlight rectangle due to bad reordering on ImDrawCmd.
  • Fixed a situation where CTRL+Tab or Modal can occasionally lead to the creation of ImDrawCmd with zero triangles, which would makes the draw operation of some backends assert (e.g. Metal with debugging). (#4857)
  • Popups: Fixed a regression crash when a new window is created after a modal on the same frame. (#4920) [@rokups]
  • Popups: Fixed an issue when reopening a same popup multiple times would offset them by 1 pixel on the right. (#4936)
  • Tables, ImDrawListSplitter: Fixed erroneously stripping trailing ImDrawList::AddCallback() when submitted in last column or last channel and when there are no other drawing operation. (#4843, #4844) [@hoffstadt]
  • Tables: Fixed positioning of Sort icon on right-most column with some settings (not resizable + no borders). (#4918).
  • Nav: Fixed gamepad navigation in wrapping popups not wrapping all the way. (#4365)
  • Sliders, Drags: Fixed text input of values with a leading sign, common when using a format enforcing sign. (#4917)
  • Demo: draw a section of keyboard in "Inputs > Keyboard, Gamepad & Navigation state" to visualize keys. [@thedmd]
  • Platform IME: changed io.ImeSetInputScreenPosFn() to io.SetPlatformImeDataFn() API, now taking a ImGuiPlatformImeData structure which we can more easily extend in the future.
  • Platform IME: moved io.ImeWindowHandle to GetMainViewport()->PlatformHandleRaw.
  • Platform IME: add ImGuiPlatformImeData::WantVisible, hide IME composition window when not used. (#2589) [@actboy168]
  • Platform IME: add ImGuiPlatformImeData::InputLineHeight. (#3113) [@liuliu]
  • Platform IME: [windows] call ImmSetCandidateWindow() to position candidate window.
  • Backends: GLFW: Pass localized keys (matching keyboard layout). Fix e.g. CTRL+A, CTRL+Z, CTRL+Y shortcuts. We are now converting GLFW untranslated keycodes back to translated keycodes in order to match the behavior of other backend, and facilitate the use of GLFW with lettered-shortcuts API. (#456, #2625)
  • Backends: GLFW: Submit keys and key mods using io.AddKeyEvent(). (#2625, #4921)
  • Backends: GLFW: Submit mouse data using io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions. (#4921)
  • Backends: GLFW: Retrieve mouse position using glfwSetCursorPosCallback() + fallback when focused but not hovered/captured.
  • Backends: GLFW: Submit gamepad data using io.AddKeyEvent()/AddKeyAnalogEvent() functions, stopped writing to io.NavInputs[]. (#4921)
  • Backends: GLFW: Added ImGui_ImplGlfw_InstallCallbacks()/ImGui_ImplGlfw_RestoreCallbacks() helpers to facilitate user installing callbacks after iniitializing backend. (#4981)
  • Backends: Win32: Submit keys and key mods using io.AddKeyEvent(). (#2625, #4921)
  • Backends: Win32: Retrieve mouse position using WM_MOUSEMOVE/WM_MOUSELEAVE + fallback when focused but not hovered/captured.
  • Backends: Win32: Submit mouse data using io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions. (#4921)
  • Backends: Win32: Maintain a MouseButtonsDown mask instead of using ImGui::IsAnyMouseDown() which will be obsoleted.
  • Backends: Win32: Submit gamepad data using io.AddKeyEvent()/AddKeyAnalogEvent() functions, stopped writing to io.NavInputs[]. (#4921)
  • Backends: SDL: Pass localized keys (matching keyboard layout). Fix e.g. CTRL+A, CTRL+Z, CTRL+Y shortcuts. (#456, #2625)
  • Backends: SDL: Submit keys and key mods using io.AddKeyEvent(). (#2625, #4921)
  • Backends: SDL: Retrieve mouse position using SDL_MOUSEMOTION/SDL_WINDOWEVENT_LEAVE + fallback when focused but not hovered/captured.
  • Backends: SDL: Submit mouse data using io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions. (#4921)
  • Backends: SDL: Maintain a MouseButtonsDown mask instead of using ImGui::IsAnyMouseDown() which will be obsoleted.
  • Backends: SDL: Submit gamepad data using io.AddKeyEvent()/AddKeyAnalogEvent() functions, stopped writing to io.NavInputs[]. (#4921)
  • Backends: Allegro5: Submit keys and key mods using `io.AddKeyEvent(). (#2625, #4921)
  • Backends: Allegro5: Submit mouse data using io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions. (#4921)
  • Backends: OSX: Submit keys and key mods using io.AddKeyEvent(). (#2625, #4921)
  • Backends: OSX: Submit mouse data using io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions. (#4921)
  • Backends: OSX: Submit gamepad data using io.AddKeyEvent()/AddKeyAnalogEvent() functions, stopped writing to io.NavInputs[]. (#4921)
  • Backends: OSX: Added basic Platform IME support. (#3108, #2598) [@liuliu]
  • Backends: OSX: Fix Game Controller nav mapping to use shoulder for both focusing and tweak speed. (#4759)
  • Backends: OSX: Fix building with old Xcode versions that are missing gamepad features. [@rokups]
  • Backends: OSX: Forward keyDown/keyUp events to OS when unused by Dear ImGui.
  • Backends: Android, GLUT: Submit keys and key mods using io.AddKeyEvent(). (#2625, #4921)
  • Backends: Android, GLUT: Submit mouse data using io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions. (#4921)
  • Backends: OpenGL3: Fixed a buffer overflow in imgui_impl_opengl3_loader.h init (added in 1.86). (#4468, #4830) [@dymk] It would generally not have noticeable side-effect at runtime but would be detected by runtime checkers.
  • Backends: OpenGL3: Fix OpenGL ES2 includes on Apple systems. [@rokups]
  • Backends: Metal: Added Apple Metal C++ API support. Enable with #define IMGUI_IMPL_METAL_CPP in your imconfig.h file. (#4824, #4746) [@luigifcruz]
  • Backends: Metal: Ignore ImDrawCmd where ElemCount == 0, which are normally not emitted by the library but can theoretically be created by user code manipulating a ImDrawList. (#4857)
  • Backends: Vulkan: Added support for ImTextureID as VkDescriptorSet, add ImGui_ImplVulkan_AddTexture(). (#914) [@martty]
  • Backends: SDL_Renderer: Fix texture atlas format on big-endian hardware (#4927) [@Clownacy]
  • Backends: WebGPU: Fixed incorrect size parameters in wgpuRenderPassEncoderSetIndexBuffer() and wgpuRenderPassEncoderSetVertexBuffer() calls. (#4891) [@FeepsDev]

Other branches & Beta features!

The Docking and Multi-viewports 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.86 to 1.87 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Fixed a CTRL+TAB crash when aiming at an empty docked window. (#4792)
  • Docking: Tabs use their own identifier instead of the Window identifier (this will invalidate some stored .ini data such as last selected tab, sorry!)
  • Docking: Fixed size constraints not working on single window holding on a dock id (still doesn't work on docked windows).
  • Docking: Fixed CTRL+TAB back into a docked window not selecting menu layer when no item are on main layer.
  • Viewports, IO: Added io.AddMouseViewportEvent() function to queue hovered viewport change (when known by backend).
  • Viewports: Relaxed specs for backend supporting ImGuiBackendFlags_HasMouseHoveredViewport: it is now optional for the backend to have to ignore viewports with the _NoInputs flag when calling io.AddMouseViewportEvent(). It is much better if they can (Win32 and GLFW 3.3+ backends can, SDL and GLFW 3.2 backends cannot, they are lacking data). A concrete example is: when dragging a viewport for docking, the viewport is marked with _NoInputs to allow us to pick the target viewports for docking. If the backend reports a viewport with _NoInputs when calling the io.AddMouseViewportEvent() function, then Dear ImGui will revert to its flawed heuristic to find the viewport under. By lowering those specs, we allow the SDL and more backend to support this, only relying on the heuristic in a few drag and drop situations rather that relying on it everywhere.
  • Viewports: Fixed a CTRL+TAB crash with viewports enabled when the window list needs to appears in its own viewport (regression from 1.86). (#4023, #787)
  • Viewports: Fixed active InputText() from preventing viewports to merge. (#4212)
  • Backends: SDL: Added support for ImGuiBackendFlags_HasMouseHoveredViewport now that its specs have been lowered.
  • (Breaking) Removed ImGuiPlatformIO::Platform_SetImeInputPos() in favor of newly standardized io.SetPlatformImeDataFn() function. Should not affect more than default backends.

There's a CMake branch/PR (#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.

Below a selection of screenshots from Gallery threads...

@mamoniem: Mirage Engine (Vulkan/C++) with ImGuizmo extension and a modified version of the super pretty Cherry theme_ (https://www.youtube.com/watch?v=HOARyIFw-5c&list=PLTfMG1EpxB2fV11Qq9-GTl9wZ3BP82YUZ&index=14

2021-11-21_MirageONE_Screenshot_2021_11_22_04_43_33 5346537_@2x

slajerek: Retro Debugger has been released today! This is retro computers APIs host for debugging (but not only!), currently supporting Commodore 64 (Vice), Atari XL/XE (Atari800), and NES (NestopiaUE) https://github.com/slajerek/RetroDebugger/

3F197BE4-D0F7-4E10-BB29-EA1CF25DDA4F

@durswd: ImGradientHDR A gradient editor which supports color, alpha and intensity. https://github.com/effekseer/ImGradientHDR ss

@tksuoran I heard you liked ImGui so I put ImGui inside ImGui 2022_01_16

@hnOsmium0001: imgui-command-palette is a Sublime Text/VSCode style command palette library implemented using C++17 standard library and ImGui._ https://github.com/hnOsmium0001/imgui-command-palette

A few debug tools used by Call of Duty: Shadows of Cold War (from this talk)

Cold War RT 01

@foxnne: _Pixi I built a small pixel art editor for my own use, using Dear ImGui and written in Zig: https://github.com/foxnne/pixi animation.png

@arabine: Because the world needs another Wordle (in french, sorry), here is an ImGui version : Yes, you can make games in ImGui ! https://github.com/arabine/galaxie-de-mots


PS: Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out today to say hi! See Sponsors page for details.

PS.2: Scroll back up and read that changelog, it is useful!

v1.86

2 years ago

Happy holidays! 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! 👌


Got visual glitches?

If you get visual glitches and incorrect dimming when using CTRL+Tab or Modal Windows: image It means your Rendering backend is not honoring the ImDrawCmd::IdxOffset field correctly. Update your standard backend or fix your custom one. See this link about how the e.g. OpenGL2 backend was fixed recently. The issue was not noticeable until now so it is possible your Rendering backend never used the IdxOffset field correctly.

image

Wrong code: during the rendering loop: draw call with idx_buffer, then idx_buffer += cmd->ElemCount after every command. Correct code: during the rendering loop: draw call with idx_buffer + cmd->IdxOffset

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, @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;

  • CTRL+Tab is now available enabled regardless of the ImGuiConfigFlags_NavEnableKeyboard config flag.
  • Fixed issues with window reappearing while a modal is open.
  • Fixes issues with menus and menubars in popups and modals.
  • Various fixes/improvements to gamepad/keyboard navigation.
  • Many improvements to ImGuiListClipper. Can now return non-contiguous ranges over multiple steps. Improvement for very large amount of contents. Fix drag and drop source being clipped when off scrolling.
  • Docking: Honor WindowBG color and borders better when docked + various fixes.
  • Backends: OpenGL3 now has a workaround for multi-viewport leaks when using (buggy?) Intel HD drivers on Windows. - Backends: OpenGL2, Allegro5: fixed mishandling of ImDrawCmd::IdxOffset field. If you get visual glitches when using CTRL+Tabs or Modal, update your backend to get the fix.
  • Backends: OSX: Add game controller and better keyboard support.
  • Many other fixes, features and improvements.

PS: previous release 1.85 added the incredibly useful STACK TOOL which we suggest you check out! (Demo>Tools>Stack Tool or via calling ShowStackToolWindow()).

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 CalcListClipping() function. Prefer using ImGuiListClipper which can return non-contiguous ranges. Please open an issue if you think you really need this function. (#3841)
  • Backends: OSX: Added NSView* parameter to ImGui_ImplOSX_Init(). (#4759) [@stuartcarnie]
  • Backends: Marmalade: Removed obsolete Marmalade backend (imgui_impl_marmalade.cpp) + example app. (#368, #375) Find last supported version at https://github.com/ocornut/imgui/wiki/Bindings

Other Changes

  • Added an assertion for the common user mistake of using "" as an identifier at the root level of a window instead of using "##something". Empty identifiers are valid and useful in a very small amount of cases, but 99.9% of the time if you need an empty label you should use "##something". (#1414, #2562, #2807, #4008, #4158, #4375, #4548, #4657, #4796). READ THE FAQ ABOUT HOW THE ID STACK WORKS > https://dearimgui.org/faq
  • Added GetMouseClickedCount() function, returning the number of successive clicks (so IsMouseDoubleClicked(ImGuiMouseButton_Left) is same as GetMouseClickedCount(ImGuiMouseButton_Left) == 2, but it allows testing for triple clicks and more). (#3229) [@kudaba]
  • Modals: fixed issue hovering popups inside a child inside a modal. (#4676, #4527)
  • Modals, Popups, Windows: changes how appearing windows are interrupting popups and modals. (#4317) [@rokups]
    • appearing windows created from within the begin stack of a popup/modal will no longer close it.
    • appearing windows created not within the begin stack of a modal will no longer close the modal, and automatically appear behind it.
  • Fixed IsWindowFocused()/IsWindowHovered() issues with child windows inside popups. (#4676)
  • Nav: Ctrl+tabbing to cycle through windows is now enabled regardless of using the ImGuiConfigFlags_NavEnableKeyboard configuration flag. This is part of an effort to generalize the use of keyboard inputs. (#4023, #787). Note that while this is active you can also moving windows (with arrow) and resize (shift+arrows).
  • Nav: tabbing now cycles through clipped items and scroll accordingly. (#4449)
  • Nav: pressing PageUp/PageDown/Home/End when in Menu layer automatically moves back to Main layer.
  • Nav: fixed resizing window from borders setting navigation to Menu layer.
  • Nav: prevent child from clipping items when using _NavFlattened and parent has a pending request.
  • Nav: pressing Esc to exit a child window reactivates the Nav highlight if it was disabled by mouse.
  • Nav: with ImGuiConfigFlags_NavEnableSetMousePos enabled: Fixed absolute mouse position when using Home/End leads to scrolling. Fixed not setting mouse position when a failed move request (e.g. when already at edge) reactivates the navigation highlight.
  • Menus: fixed closing a menu inside a popup/modal by clicking on the popup/modal. (#3496, #4797)
  • Menus: fixed closing a menu by clicking on its menu-bar item when inside a popup. (#3496, #4797) [@xndcn]
  • Menus: fixed menu inside a popup/modal not inhibiting hovering of items in the popup/modal. (#3496, #4797)
  • Menus: fixed sub-menu items inside a popups from closing the popup.
  • Menus: fixed top-level menu from not consistently using style.PopupRounding. (#4788)
  • InputText, Nav: fixed repeated calls to SetKeyboardFocusHere() preventing to use InputText(). (#4682)
  • Inputtext, Nav: fixed using SetKeyboardFocusHere() on InputTextMultiline(). (#4761)
  • InputText: made double-click select word, triple-line select line. Word delimitation logic differs slightly from the one used by CTRL+arrows. (#2244)
  • InputText: fixed ImGuiInputTextFlags_ReadOnly flag preventing callbacks from receiving the text buffer. (#4762) [@actondev]
  • InputText: fixed Shift+Delete from not cutting into clipboard. (#4818, #1541) [@corporateshark]
  • InputTextMultiline: fixed incorrect padding when FrameBorder > 0. (#3781, #4794)
  • InputTextMultiline: fixed vertical tracking with large values of FramePadding.y. (#3781, #4794)
  • Separator: fixed cover all columns while called inside a table. (#4787)
  • Clipper: currently focused item is automatically included in clipper range. Fixes issue where e.g. drag and dropping an item and scrolling ensure the item source location is still submitted. (#3841, #1725) [@GamingMinds-DanielC, @ocornut]
  • Clipper: added ForceDisplayRangeByIndices() to force a given item (or several) to be stepped out during a clipping operation. (#3841) [@@GamingMinds-DanielC]
  • Clipper: rework so gamepad/keyboard navigation doesn't create spikes in number of items requested by the clipper to display. (#3841)
  • Clipper: fixed content height declaration slightly mismatching the value of when not using a clipper (an additional ItemSpacing.y was declared, affecting scrollbar range).
  • Clipper: various and incomplete changes to tame down scrolling and precision issues on very large ranges. Passing an explicit height to the clipper now allows larger ranges. (#3609, #3962).
  • Clipper: fixed invalid state when number of frozen table row is smaller than ItemCount.
  • Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceAllowNullID doesn't lose tooltip when scrolling. (#143)
  • Fonts: fixed infinite loop in ImFontGlyphRangesBuilder::AddRanges() when passing UINT16_MAX or UINT32_MAX without the IMGUI_USE_WCHAR32 compile-time option. (#4802) [@SlavicPotato]
  • Metrics: Added a node showing windows in submission order and showing the Begin() stack.
  • Misc: Added missing ImGuiMouseCursor_NotAllowed cursor for software rendering (when the io.MouseDrawCursor configuration flag is enabled). (#4713) [@nobody-special666]
  • Misc: Fixed software mouse cursor being rendered multiple times if Render() is called more than once.
  • Misc: Fix MinGW DLL build issue (when IMGUI_API is defined). [@rokups]
  • CI: Add MinGW DLL build to test suite. [@rokups]
  • Backends: Vulkan: Call vkCmdSetScissor() at the end of render with a full viewport to reduce likehood of issues with people using VK_DYNAMIC_STATE_SCISSOR in their app without calling vkCmdSetScissor() explicitly every frame. (#4644)
  • Backends: OpenGL3: Using buffer orphaning + glBufferSubData(), seems to fix leaks with multi-viewports with some Intel HD drivers, and perhaps improve performances. (#4468, #4504, #2981, #3381) [@parbo]
  • Backends: OpenGL2, Allegro5, Marmalade: Fixed mishandling of the ImDrawCmd::IdxOffset field. This is an old bug, but due to the way we created drawlists, it never had any visible side-effect before. The new code for handling Modal and CTRL+Tab dimming/whitening recently made the bug surface. (#4790)
  • Backends: Win32: Store left/right variants of Ctrl/Shift/Alt mods in KeysDown[] array. (#2625) [@thedmd]
  • Backends: DX12: Fixed DRAW_EMPTY_SCISSOR_RECTANGLE warnings. (#4775)
  • Backends: SDL_Renderer: Added support for large meshes (64k+ vertices) with 16-bit indices, enabling ImGuiBackendFlags_RendererHasVtxOffset in the backend. (#3926) [@rokups]
  • Backends: SDL_Renderer: Fix for SDL 2.0.19+ RenderGeometryRaw() API signature change. (#4819) [@sridenour]
  • Backends: OSX: Generally fix keyboard support. Keyboard arrays indexed using kVK_* codes, e.g. ImGui::IsKeyPressed(kVK_Space). Don't set mouse cursor shape unconditionally. Handle two fingers scroll cancel event. (#4759, #4253, #1873) [@stuartcarnie]
  • Backends: OSX: Add Game Controller support (need linking GameController framework) (#4759) [@stuartcarnie]
  • Backends: WebGPU: Passing explicit buffer sizes to wgpuRenderPassEncoderSetVertexBuffer() and wgpuRenderPassEncoderSetIndexBuffer() functions as validation layers appears to not do what the in-flux specs says. (#4766) [@meshula]

Other branches & Beta features!

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

The Docking and Multi-viewports 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.85 to 1.86 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Revert removal of io.ConfigDockingWithShift config option (removed in 1.83). (#4643)
  • Docking: Fixed a bug undocking windows docked into a non-visible or _KeepAliveOnly dockspace when unrelated windows submitted before the dockspace have dynamic visibility. (#4757)
  • Docking, Style: Docked windows honor ImGuiCol_WindowBg. (#2700, #2539)
  • Docking, Style: Docked windows honor display their border properly. (#2522)
  • Docking: Fixed incorrectly rounded tab bars for dock node that are not at the top of their dock tree.
  • Docking: Fixed single-frame node pos/size inconsistencies when window stop or start being submitted.
  • Docking: Prevent docking any window created above a popup/modal. (#4317)
  • Viewports: Made it possible to explicitly assign ImGuiWindowClass::ParentViewportId to 0 in order to ensure a window is not parented. Previously this would use the global default (which might be 0, but not always as it would depend on io.ConfigViewportsNoDefaultParent). (#3152, #2871)
  • Viewports: Fixed tooltip in own viewport over modal from being incorrectly dimmed. (#4729)
  • Viewports: Fixed CTRL+TAB highlight outline on docked windows not always fitting in host viewport.
  • Backends: Made it possible to shutdown default Platform Backends before the Renderer backends. (#4656)
  • Disabled: Fixed nested BeginDisabled()/EndDisabled() bug in Docking branch due to bad merge. (#4655, #4452, #4453, #4462)

There's a CMake branch/PR (#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.

Below a selection of screenshots from Gallery threads...

@gargakshit "I made a Chip-8 interpreter that has a built in machine state inspector and debugger." https://github.com/gargakshit/chip-8 Screenshot of the chip-8 interpreter

@martinpetkovski "NST is a nonlinear narrative editor completely done with the stock ImGui docking branch / community widgets". Here's the official website and the Steam page. image

Also see thread Using gradients in widgets

@ggerganov "Recently, I needed to make a web-page that allows to interactively explore a tree with a few thousand nodes. I tried various Javascript libraries for rendering hierarchy trees, but nothing was able render the entire tree smoothly enough. Finally, I decided to make the page using Dear ImGui (OpenGL3 + SDL) and port it to WASM with Emscripten. This is the result: explorer With this stack, the same app runs both as an executable and also as a web-page. All browsers and devices that I have access to are able to render the page smoothly, without any issues. The source code is mostly in this file - very quick and dirty implementation."

"Hearts of Iron IV" dev blog https://devtrackers.gg/heartsofiron/p/67fbd64f-dev-diary-a-tech-lead-s-life c67d7d70979b6153484d9033ba62c3d843f62130

From a course on complex network (University of Valencia) https://sites.google.com/site/introcomplexnetworks/ FDVEcxRWQAAg5XF

Voxel Editor by @mgerhardy https://github.com/mgerhardy/engine/releases FC5AkAlXMAIBCtJ

@aiekick: "NoodlesPlate (offline Shader Editor)" https://github.com/aiekick/NoodlesPlate NoodlesPlate_Msvc_x64_N69aImL27C

@ncatlin "rgat is a software reverse engineering tool for generating and visualizing instruction traces" https://ncatlin.github.io/rgatPages/ imgui_example_gif It uses ImGui via ImGui.NET and I've really enjoyed how easy it makes it to create custom widgets

@jkunstwald "Custom UI bits and pieces for a renderer/editor" screen1

Teamfight Tactics (from https://www.upcomer.com/the-three-innovators-how-the-tft-live-balance-team-built-patch-11-24/) image-14

@phkehl "This is u-blox generation 9 positioning (GNSS) receiver control and analysis tool." https://github.com/phkehl/ubloxcfg/tree/master/cfggui screenshot3


PS: Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out today to say hi! See Sponsors page for details.