Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
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, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
I have been exceptionally mostly away in the past two months. A series of things happened. The project lost its largest source of income a few months ago. Shortly after I ran into some personal issues that have been emotionally draining. Coincidentally this aligned with a long-time planed trip so it was a good timing to disappear for a little bit. I have attended GDC (thanks to BeamNG) in an effort to engage in discussion with some potential sponsors, and generally to engage a little bit of gamedev reality again :)
I am now back home. I have moved offices. Managed to get some financial contributions (G3DVu!, Lucid Games! Aras!) and hopeful that ongoing discussions will eventually allow to fill the gap. Heck, I'm looking into buying a Mac now to get toward settling some of the recurrent scaling/dpi issues.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding & Sponsors page. Did you know? If sponsoring is not your cup of tea, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
TL;DR
Breaking Changes:
GetKeyIndex()
when IMGUI_DISABLE_OBSOLETE_FUNCTIONS
is set.
It has been unnecessary and a no-op since 1.87 (it returns the same value as passed when used with a 1.87+ backend using io.AddKeyEvent()
function). (#4921)
IsKeyPressed(GetKeyIndex(ImGuiKey_XXX))
--> IsKeyPressed(ImGuiKey_XXX)
AddEllipse()
, AddEllipseFilled()
and PathEllipticalArcTo()
into a single ImVec2 parameter. Exceptionally, because those functions were added recently in 1.90, we are not adding inline redirection functions. The transition is easy and should affect few users. (#2743, #7417) [@cfillion]Other Changes:
TableAngleHeadersRow()
stops being called. (#7416) [@cfillion]ListBox()
.io.PlatformLocaleDecimalPoint
decimal point localization feature not working regression from 1.90.1. (#7389, #6719, #2278) [@GamingMinds-DanielC]ImGuiStyleVar_TabBorderSize
, ImGuiStyleVar_TableAngledHeadersAngle
for consistency. (#7411) [@cfillion]AddConcavePolyFilled()
, PathFillConcave()
concave filling. (#760) [@thedmd] Note that only simple polygons (no self-intersections, no holes) are supported.AddText()
to accept null ranges. (#3615, 7391)Changes from 1.90.4 to 1.90.5 related to the Docking branch:
@faywong: lemon-note: A simple note taking tool i created with IMGUI. https://github.com/faywong/lemon-note
The Indie Stone just announced they're replacing their old debug UI in Project Zomboid with Dear ImGui. More screenshots, some videos, and their thoughts can be found on their recent devlog.
"Spotted in Hypersomnia, Used as ingame UI" https://store.steampowered.com/app/2660970/Hypersomnia/).
@eliasdaler "Dev tools for the game/engine I'm developing. The source code can be found here: https://github.com/eliasdaler/edbr"
"Universal compression ratio analyzer using the .kkp and .sym formats introduced in rekkrunchy-with-analytics." https://github.com/ConspiracyHu/kkpView-public And a blog post on resource compression: https://conspiracy.hu/articles/12-minimal-engine-file-formats-of-conspiracy-intros/
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Funding/Sponsors page.
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, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
This is a small amend to v1.90.2 and v1.90.3.
TL;DR
ImGuiWindowFlags_NoNavInputs
, which broke imgui_memory_editor in 1.90.2.DebugStartItemPicker()
public API and wired to Tools menu. EVERY TIME I MENTION THE ITEMPICKER TO ANYONE, THEY SAY "WOW I WISH WE LEARNED ABOUT IT EARLIER". (#2673)Other Changes:
SetKeyboardFocusHere()
or programmatic tabbing APIs from not working on windows with the ImGuiWindowFlags_NoNavInputs flag (regression in 1.90.2, which among other things broke imgui_memory_editor #36).ImGuiCol_ModalWindowDimBg
are properly handled by BeginPopupModal()
. (#7340)TableAngledHeadersRow()
incorrect background fill drawn too low, particularly visible with tables that have no scrolling. (#6917)ImGui::DebugStartItemPicker()
to public API. (#2673)io.ConfigDebugIsDebuggerPresent
is set. (#2673)GetColorU32(ImU32)
variant.PathArcTo()
, PathBezierQuadraticCurveTo()
, PathBezierCubicCurveTo()
, PathStroke()
, PathFillConvex()
functions.Changes from 1.90.3 to 1.90.4 related to the Docking branch:
ImGuiBackendFlags_HasMouseHoveredViewport
support with GLFW 3.3.x, as required specs for it was relaxed in 1.87. This enable better viewport hovering detection without GLFW 3.4's GLFW_MOUSE_PASSTHROUGH
, with less reliance on dear imgui's own heuristic of platform windows order. (#7316)Angled Headers:
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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, otherwise it is clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A Also see our Wiki with sections such as Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
This is a small amend to v1.90.2. In particular, the fix to sizing of child menus seemed important enough to warrant a hot-fix. In 1.90.1 and 1.90.2, child menus with lots of contents wouldn't get clamped to parent viewport boundaries and therefore wouldn't show a scrollbar.
Breaking Changes:
ImGui_ImplSDL2_NewFrame(SDL_Window*)
signature which was obsoleted in 1.84. Calling ImGui_ImplSDL2_NewFrame() without parameter is fine.ImGui_ImplVulkan_Init()
function to ImGui_ImplVulkan_InitInfo
structure. Not required when using dynamic rendering. (#7308) [@shawnhatori]PipelineRenderingCreateInfo
structure in ImGui_ImplVulkan_InitInfo
, allowing to configure color/depth/stencil formats. Removed ColorAttachmentFormat
field previously provided for dynamic rendering. (#7166, #6855, #5446, #5037) [@shawnhatori]Other Changes:
ImGui_ImplSDL2_SetGamepadMode()
function to select whether to automatically pick
first available gamepad, all gamepads, or specific gamepads. (#3884, #6559, #6890, #7180) [@ocornut, @lethal-guitar, @wn2000, @bog-dan-ro]SDL_RenderViewportSet()
to not restore a wrong viewport if none was initially set.Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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, otherwise it is clipped by GitHub!
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
In the last year, Dear ImGui has been financially supported by:
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @sakiodre & more for for their help with github answers.
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.
Past releases include v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8, v1.89.9, v1.90, v1.90.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. Remember that our policy is to comment out obsolete names/symbols after 24 months, so at minimum you must update once year to reduce update complexity, but the most frequently you update the easier it will be.
TL;DR
Breaking Changes:
ImGuiIO::ImeWindowHandle
obsoleted in 1.87 in favor of writing to void* ImGuiViewport::PlatformHandleRaw
.ImGui_ImplWGPU_Init()
now takes a ImGui_ImplWGPU_InitInfo
structure instead of variety of parameters, allowing for easier further changes. (#7240)Other Changes:
SetKeyboardFocusHere()
not working when current nav focus is in different scope, regression from 1.90.1 related to code scoping Tab presses to local scope. (#7226) [@bratpilz]ImGuiWindowFlags_NavFlattened
flag. (#7237)BeginMenu()
followed by right-arrow from making the child menu reopen and flicker (using ImGuiPopupFlags_NoReopen
).ImGuiWindowFlags_NoNavInputs
is tested during scoring so NavFlattened windows can use it.ImGuiPopupFlags_NoReopen
flag to specifically not close and reopen a popup when it is already open. (#1497, #1533) (Note that this differs from specific handling we already have in place for the case of calling OpenPopup()
repeatedly every frame: we already didn't reopen in that specific situation, otherwise the effect would be very disastrous in term of confusion, as reopening would steal focus).SetShortcutRouting()
not handling ImGuiMod_Shortcut
redirect.IM_DEBUG_BREAK
macro on GCC to work around GDB bug (#7266) [@Peter0x44]vkAcquireNextImageKHR()
validation errors in VulkanSDK 1.3.275 by allocating one extra semaphore than in-flight frames. (#7236) [@mklefrancois]vkMapMemory()
calls unnecessarily using full buffer size. (#3957)ImGui_ImplVulkan_InitInfo::MinAllocationSize
field. (#7189, #4238)ImGui_ImplWGPU_InitInfo::PipelineMultisampleState
. (#7240)WGPUDepthStencilState
fields explicitly as a recent Dawn update stopped setting default values. (#7232) [@GrigoryGraborenko]GL_PIXEL_UNPACK_BUFFER
. (#7253)Changes from 1.90.1 to 1.90.2 related to the Docking branch:
ImGuiWindowClass::FocusRouteParentWindowId
as a way to connect the focus route between a tool window to a parent document window, so that Shortcuts in the documents are routed when the tool is focused (regardless of whether the tool is docked or in a floating viewport, etc.) (#6798)ImGuiDockNodeFlags_DockedWindowsInFocusRoute
to automatically make a dockspace connect the focus route of its docked window. This is provided a convenience in case you have windows where a connection is not explicit. (#6798)io.ConfigWindowsMoveFromTitleBarOnly
is set. (#7299, #3071)Changes from 1.90.1 to 1.90.2 related to the Range-Select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. Hopefully this is on track to be stable and merged in 1.91.
Thank you for reading this changelog!
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
See Useful extensions wiki page for more.
@vhollander: "v2 platinum theme used in an actual program"
@kasperhbo: "An custom titlebar for mac os, using a "modified" version of glfw" for my tools applications https://github.com/KaspersTools/HummingBird https://github.com/KaspersTools/imgui
@GavinNL: "For one of my projects, I needed the ability to dynamically create UI Form interfaces at run-time. So I developed a library that lets you define the interface using a Json Schema. I based it off React Json Schemas"
https://github.com/GavinNL/ImJSchema WebAssembly Version To Test: https://t.co/IdlVzzm19L
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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, otherwise it is clipped by GitHub!
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
In 2023, Dear ImGui was financially supported by:
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @sakiodre, for their help with github answers.
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.
Past releases include v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8, v1.89.9, v1.90 .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. Remember that our policy is to comment out obsolete names/symbols after 24 months, so at minimum you must update once year to reduce update complexity, but the most frequently you update the easier it will be.
TL;DR
io.ConfigDebugIsDebuggerPresent
is enabled. See Debug Tools.
Breaking Changes:
ImGuiFreeType::BuildFontAtlas()
obsoleted in 1.81. Prefer using #define IMGUI_ENABLE_FREETYPE
or see commented code for manual runtime calls.ImGuiListClipper
which can return non-contiguous ranges.ImGuiColumnsFlags_XXX
symbols redirecting to ImGuiOldColumnsFlags_XXX
, obsoleted from imgui_internal.h in 1.80.ImGuiKey_KeyPadEnter
redirection to ImGuiKey_KeypadEnter
. (#2625, #7143)Other Changes:
BeginChild()
: Fixed auto-resizing erroneously limiting size to host viewport minus padding. There are no limit to a child width/height. (#7063) [@Devyre]BeginChild()
: Resize borders rendered even when ImGuiWindowFlags_NoBackground
is specified. (#1710, #7194)style.WindowMinSize.x
(instead of x/y) for both axises since 1.90. (#7106) [@n0bodysec]SetNextFrameWantCaptureKeyboard(false)
calls are not overridden back to true when navigation is enabled. SetNextFrameWantCaptureKeyboard()` is always higher priority. (#6997)InputTextMultiline()
: Fixed Tab character input not repeating (1.89.4 regression).InputTextMultiline()
: Tabbing through a multi-line text editor which allows Tab character inputs (using the ImGuiInputTextFlags_AllowTabInput
flag) doesn't automatically activate it, in order to allow passing through multiple widgets easily. (#3092, #5759, #787)BeginMenu()
can keep the wrong child menu open. (#6671, #6926)ImGuiTabItemFlags_NoAssumedClosure
to enable app to react on closure attempt, without having to draw an unsaved document marker (ImGuiTabItemFlags_UnsavedDocument
sets _NoAssumedClosure
automatically). (#7084)io.ConfigDebugIsDebuggerPresent
option. When enabled, this adds buttons in various locations of Metrics/Debugger to manually request a debugger break: (see Debug Tools Wiki Page)
Begin()
call.ItemAdd()
call via debug log and hovering 0xXXXXXX identifiers.BeginTable()
call.SetShortcutRouting()
/Shortcut()
call. [Internal]DebugFlashStyleColor()
to identify a style color. Added to Style Editor.IMGUI_USER_H_FILENAME
to change the path included when using IMGUI_INCLUDE_IMGUI_USER_H
.. (#7039) [@bryceberger]IMGUI_DEFINE_MATH_OPERATORS
is defined.io.BackendPlatformUserData
and io.BackendRendererUserData
are NULL in order to catch cases where backend was not shut down. (#7175)ImGui_ImplGlfw_InstallEmscriptenCanvasResizeCallback()
to register canvas selector and auto-resize GLFW window. (#6751) [@Traveller23, @ypujante]vkCreateCommandPool()
vs vkDestroyCommandPool()
. (#7075) [@FoonTheRaccoon]MinAllocationSize
field in ImGui_ImplVulkan_InitInfo
to workaround zealous "best practice" validation layer. (#7189, #4238) [@philae-ael]VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
as we don't reset them.wgpuRenderPassEncoderSetScissorRect()
crash when rendering modal window's dimming layer, which has an unclipped value in ImDrawCmd::ClipRect
. (#7191) [@aparis69]Changes from 1.90 to 1.90.1 related to the docking branch (multi-viewport and docking features):
Changes from 1.90 to 1.90.0 related to the range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect that the latest major API breaking changes are now done. Hopefully this is on track to be stable and merged in 1.91.
BeginMultiSelect()
.ImGuiSelectionBasicStorage
helper.ImGuiMultiSelectFlags_BoxSelect2d
support. Enabled in Asset Browser. Selectable() supports it.Thank you for reading this changelog!
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
Some interesting new third-party projects:
@sakiodre: "Spotted in a LTT's video, Bigscreen Beyond uses dear imgui for their driver utility interface."
@AlpyneDreams: "We recently updated our in-engine realtime lighting editor to use ImGui for the Source Engine branch used by Portal 2: Desolation. This replaces the old VGUI light editor which was somewhat cumbersome to use. We also support placing area lights and projected cubemap light probes."
@kyle-sylvestre: MightyGrep is a simple file searching application
https://github.com/ocornut/imgui/assets/25188464/25804b39-231b-42af-a17e-08d36127d831
@r5r6ty "I use imgui for my Unity game development a video use this repo: Uimgui
@WerWolf: "I've posted some pictures here before but it's been close to 3 years of development now and A LOT has change since. Here's some new pictures of ImHex, the Hex Editor / Reverse Engineering Suite I've been developing using ImGui" https://imhex.werwolv.net / https://web.imhex.werwolv.net
Data Information view displaying various stats about the file
@arabine "A Story Editor to build stories for a home made story teller device (for children). " https://github.com/arabine/open-story-teller / https://www.openstoryteller.org
@foxnne "I posted a much older version of this, but this is my pixel art project, Pixi."
@xhighway999 "Again just another game engine called ITERO for our inhouse project"
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out (omar AT dearimgui DOT com). See Sponsors page.
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, otherwise it is clipped by GitHub!
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases FAQ: https://www.dearimgui.com/faq/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
Ongoing work on Dear ImGui is currently financially supported by:
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @sakiodre, for their help with github answers.
Last release we reached 50000 stars. Our latest arbitrary milestone is that for a brief moment we had 777 open issues and 4444 closed ones.
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.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8, v1.89.9. 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. Remember that our policy is to comment out obsolete names/symbols after 24 months, so at minimum you must update once year to reduce update complexity, but the most frequently you update the easier it will be.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the multi-select feature in it. Guess what? It's not done (now scheduled for 1.91)! And because 1.90 changelog is big enough already I'm tagging it now. There are about 1000 lines of changelog between 1.89 and 1.90.
TL;DR
BeginChild()
signature to enable new features: replaced bool border=false
with ImGuiChildFlags
, backward compatible.Resizable child windows
Angled table headers
Breaking Changes:
bool border = false
parameter to ImGuiChildFlags flags = 0
;. Added ImGuiChildFlags_Border value. As with our prior "bool-to-flags" API updates, the ImGuiChildFlags_Border value is guaranteed to be == true forever to ensure a smoother transition, meaning all existing calls will still work.
If you want to neatly transition your call sites:
BeginChild("Name", size, true)
BeginChild("Name", size, ImGuiChildFlags_Border)
BeginChild("Name", size, false)
BeginChild("Name", size)
or BeginChild("Name", 0)
or BeginChild("Name", size, ImGuiChildFlags_None)
.ImGuiChildFlags_Border == true
, but you are encouraged to update call sites.ImGuiChildFlags_AlwaysUseWindowPadding
as a replacement for the window-flag ImGuiWindowFlags_AlwaysUseWindowPadding
: the feature only ever made sense for use with BeginChild()
anyhow, passing it to Begin() had no effect. Now that we accept child-flags we are moving it there. Kept inline redirection enum (will obsolete later) so existing code will work. (#462)
BeginChild("Name", size, 0, ImGuiWindowFlags_AlwaysUseWindowPadding);
BeginChild("Name", size, ImGuiChildFlags_AlwaysUseWindowPadding, 0);
BeginChildFrame()
/EndChildFrame()
: removed functions in favor of using BeginChild()
with the ImGuiChildFlags_FrameStyle
flag. Kept inline redirection function (will obsolete). Those functions were merely PushStyleXXX/PopStyleXXX
helpers and custom versions are easy to create. (The removal isn't so much motivated by needing to add the feature in BeginChild()
, but by the necessity to avoid BeginChildFrame()
signature mismatching BeginChild()
signature and features.)ShowStackToolWindow()
("Stack Tool") to ShowIDStackToolWindow()
("ID Stack Tool"), as earlier name was misleading. Kept inline redirection function. (#4631)io.MetricsActiveAllocations
introduced in 1.63, was displayed in Metrics and unlikely to be accessed by end-user. Value still visible in the UI and easily to recompute from a delta.IMGUI_DISABLE_OBSOLETE_FUNCTIONS
now automatically defines IMGUI_DISABLE_OBSOLETE_KEYIO. (#4921)IM_OFFSETOF()
macro in favor of using offsetof()
available in C++11. Kept redirection define. (#4537)bool (*getter)(void* user_data, int idx, const char** out_text)
bool Combo(const char* label, int* current_item, bool (*getter)(void* user_data, int idx, const char** out_text), ...);
bool ListBox(const char* label, int* current_item, bool (*getting)(void* user_data, int idx, const char** out_text), ...);
const char* (*getter)(void* user_data, int idx)
bool Combo(const char* label, int* current_item, const char* (*getter)(void* user_data, int idx), ...);
bool ListBox(const char* label, int* current_item, const char* (*getter)(void* user_data, int idx), ...);
GetWindowContentRegionWidth()
-> use GetWindowContentRegionMax().x - GetWindowContentRegionMin().x
. Consider that generally GetContentRegionAvail().x
is often more correct and more useful.ImDrawCornerFlags_XXX
-> use ImDrawFlags_RoundCornersXXX
names. Read 1.82 changelog for details + grep commented names in sources.AddRect()
/AddRectFilled()
/PathRect()
/AddImageRounded()
. -> Use ImDrawFlags_RoundCornersXXX
flags. Read 1.82 changelog for details.ImGui_ImplVulkan_CreateFontsTexture()
: backend now creates its own command-buffer to upload fonts. Removed ImGui_ImplVulkan_DestroyFontUploadObjects()
which is now unnecessary. No need to call ImGui_ImplVulkan_CreateFontsTexture()
as it is done automatically in ImGui_ImplVulkan_NewFrame()
. You can call ImGui_ImplVulkan_CreateFontsTexture()
manually if you need to reload the font atlas texture. (#6943, #6715, #6327, #3743, #4618)Other Changes:
ImGuiChildFlags_ResizeX
and ImGuiChildFlags_ResizeY
to allow resizing child windows from the bottom/right border (toward layout direction). Resized child windows settings are saved and persistent in .ini file. (#1710)ImGuiChildFlags_Border
as a replacement for 'bool border = true' parameter.ImGuiChildFlags_AutoResizeX
and ImGuiChildFlags_AutoResizeY
to auto-resize on one axis, while generally providing a size on the other axis. (#1666, #1395, #1496, #1710) e.g. BeginChild("name", {-FLT_MIN, 0.0f}, ImGuiChildFlags_AutoResizeY);
ImGuiChildFlags_AlwaysAutoResize
disables this optimization, meaning child contents will never be clipped (not recommended).BeginGroup()
. (until we come up with new helpers for framed groups and work-rect adjustments, see #1496).SetNextWindowSizeConstraints()
rectangle, often useful when ImGuiChildFlags_AutoResizeX
or ImGuiChildFlags_AutoResizeY
. (#1666, #1395, #1496) Custom constraint callback are not supported with child window.ImGuiChildFlags_FrameStyle
as a replacement for BeginChildFrame()
, use it to make child window use FrameBg, FrameRounding, FrameBorderSize, FramePadding instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding.p_open != NULL
in BeginPopupModal()
+ set back user value to false when popup is closed in ways other than clicking the close button. (#6900)WindowPadding
instead of clipping edges).CellPadding
instead of clipping edges).SeparatorText()
. (#1643)Columns()
, as we favored that idiom back then, only different is left position follows indentation level, to match calling a Separator()
inside or outside Columns().SetItemTooltip()
/IsItemHovered(ImGuiHoveredFlags_ForTooltip)
defaults to activate tooltips on disabled items. This is done by adding ImGuiHoveredFlags_AllowWhenDisabled
to the default value of style.HoverFlagsForTooltipMouse
/style.HoverFlagsForTooltipNav
. (#1485)ImGuiHoveredFlags_ForTooltip
with a ImGuiHoveredFlags_DelayXXX
override. (#1485)AcceptDragDropPayload()
with ImGuiDragDropFlags_AcceptNoPreviewTooltip
and submitting a tooltip manually.ImGuiTableColumnFlags_AngledHeader
on selected
columns and call TableAngledHeadersRow()
. Added style.TableAngledHeadersAngle
style option.ImGuiTableFlags_HighlightHoveredColumn
flag, currently highlighting column header.TableSetColumnIndex()
to coarse clip. With an active clipper it would have asserted. Without a clipper, the scrollbar range would be wrong.TableBorderLight
and TableBorderStrong
in some situations, causing the earlier to be visible underneath when alpha is not 1.0f.ScrollX
enabled where an extraneous draw command would be created.InputTextMultiline()
: Fixed a crash pressing Down on last empty line of a multi-line buffer. (regression from 1.89.2, only happened in some states). (#6783, #6000)ImGuiConfigFlags_NavEnableKeyboard
is set. Previously was inconsistent and only enabled when stepping through a non-input item. (#6802, #3092, #5759, #787)ImGuiTreeNodeFlags_SpanAllColumns
for use in tables. (#3151, #3565, #2451, #2438)ImGuiTabItemFlags_UnsavedDocument
) which was accidentally offset in 1.89.9. (#6862) [@alektron]ImGuiColorEditFlags_NoTooltip
not being forwarded to individual DragFloat3 sub-widgets which have a visible color preview when ImGuiColorEditFlags_NoSidePreview
is also set. (#6957)SameLine()
followed by manual cursor manipulation.ImGuiComboFlags_WidthFitPreview
flag. (#6881) [@mpv-enjoyer]SetNextWindowXXX()
data when returning false.float size_pixels
passed to AddFontXXX()
functions is now rounded to lowest integer. This is because our layout/font system currently doesn't fully support non-integer sizes. Until it does, this has been a common pitfall leading to more or less subtle issues. (#3164, #3309, #6800)ImFontConfig::RasterizerDensity
field to increase texture size of rendered glyphs without altering other metrics. Among other things, this makes it easier to have zooming code swapping between 2 fonts (e.g. a 100% and a 400% fonts) depending on current scale. (#6925) [@thedmd] Important: if you increase this it is expected that you would render the font with a scale of
similar value or magnitude. Merely increasing this without increasing scale may lower quality.ImFontConfig::RasterizerDensity
. (#6925) [@thedmd]IMGUI_ENABLE_FREETYPE_LUNASVG
support. (#6842, #6591)IsKeyChordPressed()
helper function e.g. IsKeyChordPressed(ImGuiMod_Ctrl | ImGuiKey_S)
. (note that ImGuiMod_Shortcut
may be used as an alias for Cmd on OSX and Ctrl on other systems)."%.*s"
(along with "%s"
) specially to bypass formatting. (#3466, #6846)ImGuiKey_F13
to ImGuiKey_F24
. (#6891, #4921)ImGuiKey_AppBack
, ImGuiKey_AppForward
. (#4921)io.WantSetMousePos
ignores incoming MousePos
events. (#6837, #228) [@bertaye]AddEllipse()
, AddEllipseFilled()
, PathEllipticalArcTo()
. (#2743) [@Doohl]find_index()
helper."Drag and Drop -> Tooltip at target location"
demo."Layout -> Child Windows -> Manual-resize"
demo. (#1710)"Layout -> Child Windows -> Auto-resize with constraints"
demo. (#1666, #1395, #1496, #1710)"Examples -> Constrained-resizing window"
custom constrains demo. (#6210) [@cfillion]ImGui_ImplVulkan_CreateFontsTexture()
: backend now creates its own command-buffer to upload fonts. Removed ImGui_ImplVulkan_DestroyFontUploadObjects()
which is now unnecessary. No need to call ImGui_ImplVulkan_CreateFontsTexture()
as it is done automatically in ImGui_ImplVulkan_NewFrame()
. You can call ImGui_ImplVulkan_CreateFontsTexture() manually if you need to reload font atlas texture. Fixed leaks, and added ImGui_ImplVulkan_DestroyFontsTexture()
(probably no need to call this directly). (#6943, #6715, #6327, #3743, #4618)
[@helynranta, @thomasherzog, @guybrush77, @albin-johansson, @MiroKaku, @benbatya-fb, @ocornut]MouseWheel
callback before shutdown. (#6790, #6096, #4019) [@halx99]VK_SNAPSHOT
/ ImGuiKey_PrintScreen
as Windows doesn't emit it (same behavior as GLFW/SDL). (#6859) [@thedmd, @SuperWangKai]imgui_impl_opengl3_loader.h
to load "libGL.so" instead of "libGL.so.1", accommodating for NetBSD systems having only "libGL.so.3" available. (#6983)ImFloor()
to ImTrunc()
. Renamed ImFloorSigned()
to ImFloor()
. (#6861)Changes from 1.89.9 to 1.90.0 related to the docking branch (multi-viewport and docking features):
ImGuiDockNodeFlags_NoUndocking
. (#2999, #6823, #6780, #3492)ImGuiDockNodeFlags_NoSplit
to ImGuiDockNodeFlags_NoDockingSplit
.ImGuiDockNodeFlags_NoDockingInCentralNode
to ImGuiDockNodeFlags_NoDockingOverCentralNode
.ImGuiDockNodeFlags_NoDockingSplitMe
to ImGuiDockNodeFlags_NoDockingSplit
.SetNextWindowClass
) on success would prevent further filter from running, namely the one that prevent docking over a popup.Changes from 1.89.9 to 1.90.0 related to the prototype range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect that the latest major API breaking changes are now done. Hopefully this is on track to be stable and merged in 1.91.
ImVector<ImGuiSelectionRequest>
list. This api will allow box-selection to work. (see a1e85e0).ImGuiMultiSelectFlags_ClearOnClickWindowVoid
to ImGuiMultiSelectFlags_ClearOnClickVoid
.ImGuiMultiSelectFlags_ScopeWindow
, ImGuiMultiSelectFlags_ScopeRect
to override/specify scope.ImGuiMultiSelectFlags_BoxSelect
(doesn't work well with clipper yet).EndMultiSelect()
recovery in ErrorCheckEndWindowRecover()
.IsItemToggledSelection()
. Added assert. Moved to multi-selection section of imgui.h.ExampleSelection
.Thank you for reading this changelog!
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
Some interesting new third-party projects:
Some debug tools in Alan Wake 2 https://www.remedygames.com/article/how-northlight-makes-alan-wake-2-shine
@allenwp: The AV Latency.com Toolkit is an open source software suite that is used to accurately measure audio latency of consumer electronics for the purpose of audio-video synchronization (AV sync). RTINGS.com will soon be integrating this toolkit into their test methods.
@skaarj1989: SupernovaEngine https://github.com/skaarj1989/SupernovaEngine
@coumcashier: "I would like to find out what ImGui's styling system could do. So I created a clone of the sign in page for a popular gaming platform. It implements changing border color on hover/active state for buttons and checkbox as this is commonly found in web apps but not provided by default in ImGui. Its follows the vibe design system from Monday.com."
https://github.com/ocornut/imgui/assets/122149176/3dc68815-c501-42ad-97ea-9f78be8f7df3
@pavelsevecek: "I'm using ImGui for my space simulation software." https://pavelsevecek.github.io/
@Froyok: "I'm still iterating on my Game Engine UI and now have switched to the docking branch. I'm using a lot of custom tweaks in here, but without modifying Dear ImGui itself."
Machina Labs (https://machinalabs.ai) using Dear ImGui, spotted in SmarterEveryDays Video about incremental sheet forming:
Quake II remastered debug tools https://bethesda.net/en/article/6NIyBxapXOurTKtF4aPiF4/enhancing-quake-ii
@hugeproblem: "Yet another node graph editor [..] It's not a immediate-mode-node-graph addon for ImGui, but more of a (embeddable, customizable, extensible, scriptable) standalone application. It has nice looking default appearance:" https://github.com/hugeproblem/nged (+ many cool gifs at https://github.com/ocornut/imgui/issues/6478#issuecomment-1747288625)
@JorenJoestar: "As needed aid to write our "Mastering Graphics Programming with Vulkan", ImGui was essential. Probably not the most advanced usage of it, but the possibility of debugging any texture in realtime (especially with bindless rendering), or having a simple but effective GPU profiler, needed to check the timings for each technique developed for each chapter, or simply having all the debug options and tweables for each render subsystem was like having a team to help!" https://github.com/PacktPublishing/Mastering-Graphics-Programming-with-Vulkan
@ocjb: "My work in progress game engine."
IOLITE voxel game engine https://iolite-engine.com/
Meta XR Simulator https://developer.oculus.com/downloads/package/meta-xr-simulator/
Generative Fill for Video at Adobe Max #ProjectFastFill https://www.youtube.com/watch?v=kyYk-u2rxYA
@arnaud-jamin: "Cog is a set of debug tools for Unreal Engine" https://github.com/arnaud-jamin/Cog
Adventure game Engine for MSX2 + game Stan the Dreamers
https://jamque.itch.io/stan-the-dreamer-msx2/devlog/396876/a-new-adventure-game-engine-has-come-to-msx2
@guillaC: SQLiteDiskExplorer and "SQLiteDiskExplorer is a tool designed to assist you in the efficient management of your SQLite files. Explore and manage your SQLite files with ease using SQLiteDiskExplorer, Your valuable data is just a scan away !" https://github.com/guillaC/SQLiteDiskExplorer
Wallet "is application that lets you manage your stock and finance. It is meant to be lite and efficient. It is not a trading platform." https://wallet.wiimag.com/
@TheGoodDoktor: "Spectrum Analyser is a program that helps you to reverse engineer ZX Spectrum games. I wrote it for my own amusement but others have found it interesting too." https://github.com/TheGoodDoktor/8BitAnalysers
@quantmage: QuantMage is a SaaS platform for algorithmic & quantitative stock investment. It's using ImGui+WASM for its logic editor and backtesting tool frontend. https://quantmage.app/grimoire/88feda7697abf9d66cf63ae359ac3cb2
@jamesdolezal: "Slideflow Studio is a user interface for deploying deep learning models for digital pathology research applications. Dear Imgui (and the python wrapper, pyimgui) were essential in making this a success. Thank you for developing this wonderful framework!"
@Saul-Alejandro-Gonzalez-Vilchis: "INDEX 2024 is a game engine IDE program that will be released on December 31, 2023 also powered by the private hazel source code. Its user interface is so beautiful that a lot of effort will be put into it. that's why we will add a "Ribbon Bar" system. [...] Thank for ImGui & Hazel Core Team" https://github.com/INDEV-Technologies/INDEX
https://github.com/ocornut/imgui/assets/126918321/d38e191f-2b9b-4e78-8b0b-848fd9948d5d
@Ermelber: Mario Kart Toolbox: "This is a Mario Kart DS modding suite I've been working on with @Gericom. This uses the latest and greatest .NET 7.0 with C# bindings thanks to ImGui.NET (using an OpenGL backend with [OpenTK] https://github.com/opentk/opentk)) and we use a modified version of ImGuizmo for 3D controls."
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes.
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Sponsors page.
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/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can do regular B2B Invoicing. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
Ongoing work on Dear ImGui is currently financially supported by:
Special thanks to @GamingMinds-DanielC, @sakiodre, @PathogenDavid for their help with github answers.
Reaching 50000 GitHub stars: (49993 as I'm typing those words)
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.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7, v1.89.8. 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 about 650 lines of changelog between 1.89 and 1.89.9.
Breaking Changes:
IncludeRangeByIndices()
(also called ForceDisplayRangeByIndices()
before 1.89.6) again to IncludeItemsByIndex(). Kept inline redirection function. (#6424, #3841)Other Changes:
SameLine(0,0)
after TableNextColumn()
/TableSetColumnIndex()
in order to reuse line pos/height from previous cell. (#3740)style.CellPadding.y
between rows. (#3740)ImGuiTreeNodeFlags_NavLeftJumpsBackHere
now goes through proper navigation logic: honor scrolling and selection. (#1079, #1131)SliderInt()
when v_max=INT_MAX
. (#6675, #6679) [@jbarthelmes]style.ItemInnerSpacing.x
between items, stopped incorrectly using FramePadding
in a way where hit-boxes could overlap when setting large values. (#6749).
and ,
into the current decimal point character when using Decimal/Scientific character filter. (#6719, #2278) [@adamsepp]IncludeItemByIndex()
helper to include a single item. (#6424, #3841)TotalVtxCount
/TotalIdxCount
does not match the sum of individual ImDrawList's buffer sizes when a dimming/modal background is rendered. (#6716)ChannelsMerge()
if not done after a split._CalcCircleAutoSegmentCount()
when passing excessively large radius to AddCircle()
. (#6657, #5317) [@EggsyCRO, @jdpatdiscord]io.PlatformLocaleDecimalPoint
to configure decimal point ('.' or ',') for languages needing it. Should ideally be set to the value of *localeconv()->decimal_point
but our backends don't do it yet. (#6719, #2278)io.AddMousePosEvent()
and io.AddMouseButtonEvent()
writing MouseSource to wrong union section. Was semantically incorrect and accidentally had no side-effects with default compiler alignment settings. (#6727) [@RickHuang2001]SameLine()
between cells. (#3740)CellPadding.y
between rows. (#3740)ImDrawListSplitter
.ImGui_ImplSDL2_InitForOther()
/ImGui_ImplSDL3_InitForOther()
for consistency (matching GLFW backend) and as most initialization paths don't actually need to care about rendering backend.Changes from 1.89.8 to 1.89.9 related to the docking branch (multi-viewport and docking features):
io.ConfigDockingWithShift
is enabled, staying stationary while moving a window displays an help tooltip to increase affordance. (#6709, #4643)Changes from 1.89.8 to 1.89.9 related to the prototype range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect to make some more changes before 1.90. Hopefully this is on track to be stable and merged in 1.90.
RangeSelect/MultiSelect: (BREAKING) Renamed SetNextItemSelectionData()
to SetNextItemSelectionUserData()
.
RangeSelect/MultiSelect: (BREAKING) Use ImGuiSelectionUserData
type (= ImS64) instead of void* for selection user data.
RangeSelect/MultiSelect: (BREAKING) RequestSetRange's parameter are RangeFirstItem...RangeLastItem
(which are always ordered, unlike RangeSrcItem...RangeDstItem
). Removed RangeDstItem
. Removed RangeDirection
.
RangeSelect/MultiSelect: (BREAKING) Removed RangeSrcPassedBy in favor of favoring user to call IncludeByIndex(RangeSrcItem) which is easier/simpler to honor.
RangeSelect/MultiSelect: (BREAKING) Renamed ImGuiMultiSelectFlags_NoMultiSelect
to ImGuiMultiSelectFlags_SingleSelect
as it seems easier to grasp + fixed behavior.
RangeSelect/MultiSelect: Added ImGuiMultiSelectFlags_SelectOnClickRelease
to allow dragging an unselected item without altering selection + update drag and drop demo.
RangeSelect/MultiSelect: Assert if SetNextItemSelectionUserData() is called not in the context of a BeginMultiSelect() block.
RangeSelect/MultiSelect: Tweak debug log to print decimal+hex values for item data.
RangeSelect/MultiSelect: Clear selection when leaving a scope with a nav directional request (may make optional).
RangeSelect/MultiSelect: Demo: Assets Browser: Added assets browser demo.
RangeSelect/MultiSelect: Demo: Dual List Box: Added simple dual list box demo. (#6648)
RangeSelect/MultiSelect: Demo: added simpler demo using Clipper. Clarify RangeSrcPassedBy doc.
RangeSelect/MultiSelect: Demo: rework ExampleSelection with an ExampleSelectionAdapter layer, allowing to share more code across examples using different storage design.
RangeSelect/MultiSelect: Demo: rework deletion demo code.
Previously:
ImGui::SetNextItemSelectionData((void*)(intptr_t)idx);
Now:
ImGui::SetNextItemSelectionUserData(idx);
Previously:
if (ms_io->RequestSetRange)
{
int first = (int)ms_io->RangeSrcItem;
int last = (int)ms_io->RangeDstItem
if (first > last)
swap(first, last);
for (int idx = first; idx <= last; idx++)
SetSelection(idx, ms_io->RangeSelected);
}
Now:
if (ms_io->RequestSetRange)
for (int idx = ms_io->RangeFirstItem; idx <= ms_io->RangeLastItem; idx++)
SetSelection(idx, ms_io->RangeSelected);
Previously: (required inside loop and after loop, when using clipper)
if (!ms_io->RangeSrcPassedBy && clipper.DisplayStart > ms_io->RangeSrcItem)
ms_io->RangeSrcPassedBy = true;
Now:
if (ms_io->RangeSrcItem != -1)
clipper.IncludeItemByIndex((int)ms_io->RangeSrcItem); // Ensure RangeSrc item is not clipped.
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...
@simco50: "A simple CPU/GPU profiler with a timeline UI having both CPU and GPU tracks in the same synchronized view. Continuously records and saves N frames and can be paused to analyze." https://github.com/simco50/TimelineProfiler
Intel XeSS Demo https://github.com/intel/xess
PrusaSlicer (Prusa Slic3r) using Dear ImGui within their 3d viewport: https://www.prusa3d.com/page/prusaslicer_424/
@samuel-watson: "This is a non-game related example. Dear ImGui is used as the GUI for a scientific application to support the design of cluster randomised trials (a type of experimental design). [...] It runs in the browser and is compiled using Emscripten to generate the html, JS, and WASM files. " The app is currently hosted at https://www.clustertrial.app/ and the code is available at the GitHub repo.
@lukaasm: "Next addition to our game/engine tooling suite: ParticleEditor ( based on modified version of https://github.com/thedmd/imgui-node-editor )"
@rodan: "Magic Carpet 2 porting effort." https://github.com/rodan/magic_carpet_2
@cfnptr: "Screenshot from my pet game engine editor. With a visual studio code inspired theme :)"
YAZE (Yet Another Zelda3 Editor) by @scawful https://github.com/scawful/yaze
Property Watcher: A runtime variable watch window for Unreal Engine using ImGui, by @guitarfreak https://github.com/guitarfreak/PropertyWatcher
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes
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/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
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. We can do regular B2B Invoicing. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6, v1.89.7. 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 about 600 lines of changelog between 1.89 and 1.89.8.
Breaking Changes:
io.ClearInputCharacters()
(added in 1.47) as it now ambiguous and often incorrect/misleading considering the existence of a higher-level input queue. This is automatically cleared by io.ClearInputsKeys()
. (#4921)CmdLists[]
array is now owned, changed from ImDrawList**
to ImVector<ImDrawList*>
. Majority of users shouldn't be affected, but you cannot compare to NULL nor reassign manually anymore. Instead use AddDrawList()
. Allocation count are identical. (#6406, #4879, #1878)Other Changes:
ImFontConfig::OversampleH
now defaults to 2 instead of 3, since the quality increase is largely minimal.IMGUI_ENABLE_FREETYPE_LUNASVG
along with IMGUI_ENABLE_FREETYPE
, and providing headers/libraries for lunasvg. (#6591, #6607) [@sakiodre]ImDrawData: CmdLists[]
array is now an ImVector<> owned by ImDrawData rather than a pointer to internal state.
ImDrawData::AddDrawList()
helper function to do that. (#6406, #4879, #1878)ImDrawCmd
. (#4857, #5937)ImGuiHoveredFlags_ForTooltip
for Keyboard/Gamepad navigation, got broken prior to 1.89.7 due to an unrelated change making flags conflict. (#6622, #1485)CallbackResize
although unnecessary, in a frame where the return value was false.GetContentRegionAvail().y
report not taking account of lower cell padding or of using ImGuiTableFlags_NoHostExtendY
. Not taking it into account would make the idiom of creating vertically bottom-aligned content (e.g. a child window) inside a table make the parent window erroneously have a scrollbar. (#6619)io.ClearEventsQueue()
to clear incoming inputs events. (#4921)
May be useful in conjunction with io.ClearInputsKeys()
if you need to clear both current inputs state and queued events (e.g. when using blocking native dialogs such as Windows's ::MessageBox() or ::GetOpenFileName()).io.ClearInputsKeys()
specs to also clear current frame character buffer (what now obsoleted io.ClearInputCharacters()
did), as this is effectively the desirable behavior.IMGUI_DISABLE_STB_SPRINTF_IMPLEMENTATION
config macro to disable stb_sprintf implementation when using IMGUI_USE_STB_SPRINTF. (#6626) [@septag]SetNextItemAllowOverlap()
. (#6574, #6512, #3909, #517)InputText()
flags.IMGUI_DISABLE
. (#6601)GLFW_CURSOR_DISABLED
as it can be used differently. User may set ImGuiConfigFlags_NoMouse
if desired. (#5625, #6609) [@scorpion-26]Changes from 1.89.7 to 1.89.8 related to the docking branch (multi-viewport and docking features):
ImGuiCol_Border
) for consistency. With default styles it doesn't make a big difference. (#2522) [@rmitton] In the future if we promote using thick value for inner/outer docking padding we may need to introduce new colors for it.style.DockingSeparatorSize
, ImGuiStyleVar_DockingSeparatorSize
. Now also scaled by style.ScaleAllSizes()
. (#3481, #4721, #2522) [@PossiblyAShrub, @wobbier]Changes from 1.89.7 to 1.89.8 related to the range-select branch:
This is hopefully the last batch of breaking changes before merging this in 1.90:
BeginMultiSelect()
doesn't need two last params maintained by users. Moving some storage from user to core.ImGuiMultiSelectIO
to facilitate implementing deletion while providing correct scrolling/focus.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...
@ThFriedrich: riCOM is a software used in electron microscopy. It interfaces with direct electron cameras for the real-time creation of atomic resolution microscopy images from 4-dimensional data.
@msnh2012: A custom application. (TCP debugger)
Remedy's Northlight Engine
@sakiodre : I'm developing a ghidra decompiler plugin [...] ended up writing my own editor from scratch.
@FuXiii: Online Shader Compiler
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes
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/ Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Getting Started and Useful Extensions Gallery! π
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. We can regular B2B Invoicing. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6. 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 about 540 lines of changelog between 1.89 and 1.89.7.
Breaking Changes:
io.HoverDelayShort
/io.HoverDelayNormal
to style.HoverDelayShort
/style.HoverDelayNormal
. As the fields were added in 1.89 and expected to be left unchanged by most users, or only tweaked once during app initialization, we are exceptionally accepting the breakage. Majority of users are likely to not even notice.SetItemAllowOverlap()
: it didn't and couldn't work reliably since 1.89 (2022-11-15), and relied on ambiguously defined design. Use SetNextItemAllowOverlap()
before item instead.SetNextItemAllowOverlap()
(called before an item) as a replacement for using SetItemAllowOverlap()
(called after an item). This is roughly equivalent to using the legacy SetItemAllowOverlap()
call (public API) + ImGuiButtonFlags_AllowOverlap
(internal).to
ImGuiTreeNodeFlags_AllowOverlap` for consistency.ImGuiSelectableFlags_AllowItemOverlap
to ImGuiSelectableFlags_AllowOverlap
for consistency.Other Changes:
SetItemTooltip()
and BeginItemTooltip()
helper functions.
They are shortcuts for the common idiom of using IsItemHovered()
.
SetItemTooltip("Hello")
== if (IsItemHovered(ImGuiHoveredFlags_Tooltip)) { SetTooltip("Hello"); }
BeginItemTooltip()
== IsItemHovered(ImGuiHoveredFlags_Tooltip) && BeginTooltip()
The newly added ImGuiHoveredFlags_Tooltip
is meant to facilitate standardizing mouse hovering delays and rules for a given application. The previously common idiom of using 'if (IsItemHovered()) { SetTooltip(...); }' won't use delay or stationary test.ImGuiHoveredFlags_Stationary
to require mouse being stationary when hovering a new item. Added style.HoverStationaryDelay
(~0.15 sec). Once the mouse has been stationary once the state is preserved for same item. (#1485)ImGuiHoveredFlags_ForTooltip
as a shortcut for pulling flags from style.HoverFlagsForTooltipMouse
or style.HoverFlagsForTooltipNav
depending on active inputs. (#1485)
style.HoverFlagsForTooltipMouse
defaults to ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort
.style.HoverFlagsForTooltipNav
defaults to ImGuiHoveredFlags_NoSharedDelay | ImGuiHoveredFlags_DelayNormal
.style.HoverDelayNormal
from 0.30 to 0.40, Tweaked default value of style.HoverDelayShort
from 0.10 to 0.15. (#1485)ImGuiHoveredFlags_AllowWhenOverlappedByWindow
to ignore window-overlap only. Option ImGuiHoveredFlags_AllowWhenOverlapped
now expand into a combination of both _AllowWhenOverlappedByWindow
+ _AllowWhenOverlappedByItem
, matching old behavior.SetNextItemAllowOverlap()
. (#6512, #3909, #517)ImGuiHoveredFlags_AllowWhenOverlappedByItem
to opt-out. (#6512, #3909, #517)ImGuiSelectableFlags_AllowOverlap
/ImGuiTreeNodeFlags_AllowOverlap
and holding item held, overlapping widgets won't appear as hovered. (#6512, #3909)ImGuiHoveredFlags_Stationary
.ImGuiInputTextFlags_EscapeClearsAll
flag. (#5688, #2620)ImGuiInputTextCallbackData::InsertChars()
accept (NULL,NULL) range, in order to conform to common idioms (e.g. passing .data(), .data() + .size() from a null string). (#6565, #6566, #3615)BeginCombo()
. (#1182)ImGuiDragDropFlags_SourceNoDisableHover
is set).ImGuiMod_XXX
values when IMGUI_DISABLE_OBSOLETE_KEYIO
is set.io.ConfigDebugIniSettings
option to save .ini data with extra comments. Currently mainly for inspecting Docking .ini data, but makes saving slower.Widgets->Tooltips
section. (#1485)glBindSampler()
backup/restore on ES3. (#6375, #6508) [@jsm174]glGetIntegerv(GL_CONTEXT_PROFILE_MASK)
on contexts lower than 3.2. (#6539, #6333) [@krumelmonster]VK_KHR_dynamic_rendering
(Vulkan 1.3+) in the backend, for applications using it. User needs to set init_info->UseDynamicRendering = true
and init_info->ColorAttachmentFormat
. RenderPass becomes unused. (#5446, #5037) [@spnda, @cmarcelo]glfwGetTime()
not returning a monotonically increasing value. This seems to happens on some Windows setup when peripherals disconnect, and is likely to also happen on browser+Emscripten. Matches similar 1.89.4 fix in SDL backend. (#6491)DefWindowProc()
to DefWindowProcW()
to match other examples
and support the example app being compiled without UNICODE. (#6516, #5725, #5961, #5975) [@yenixing]Changes from 1.89.6 to 1.89.7 related to the docking branch (multi-viewport and docking features):
ButtonBehavior()
directly). (#5181, #2645)DockBuilderDockWindow()
API calls don't clear docking order if the target node is same as existing one.ParentViewportID
after viewport creation.Changes from 1.89.6 to 1.89.7 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):
IsItemToggledSelection()
and toggling per-item selection. This can now be completely handled by the BeginMultiSelect() and EndMultiSelect() requests.ImGuiMultiSelectFlags_NoUnselect
because I currently can't find use for this specific design.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...
@eleriaqueen: "WIP modding tool for a somewhat retro game made with my limited programming knowledge and skills."
@alipbcs: "I used ImGui, ImPlot, and imnodes in my hobby real-time renderer. Full source code available on GitHub."
@lucabart97: TII Unimore Racing, a University of Modena and Reggio Emilia team. "This is our perception stack completing a full lap in Autodromo Nazionale Monza using LiDAR localization only during Indy Autonomous Challenge." Video:
"Spotted in S.T.A.L.K.E.R. 2: Heart of Chornobyl."
@sarchar: "RDS (Retro Disassembler Studio) aims to be a complete disassembler tool for retro systems. Currently, the only supported system is the Nintendo Entertainment System (NES) but others are planned for the future." https://github.com/sarchar/RetroDisassemblerStudio
@qoala101: "PONC is the graphical tool used by telecommunication engineers to design, manage, and optimize Passive Optical Network layouts." https://github.com/qoala101/ponc
@gboisse: "Some shots from the ImGui-based editor we used to produce our Revision 2023 demo: Reality Check" https://www.pouet.net/prod.php?which=94177 "Dear ImGui has been amazing from the start and remains a pleasure to work with π"
@tildearrow: "Furnace - a multi-system chiptune tracker with support for many chips and a customizable interface." https://github.com/tildearrow/furnace
@aiekick "Just for fun. see my WIP ToolBar :)" ImCoolbar: https://github.com/aiekick/ImCoolBar
@RorySoh: "Nin Online is an MMORPG that started development in 2013 and launched in 2017 built with a Visual Basic 6 engine. In recent years, we ported the game to C# with .NET Framework. Now, we're using .NET 6 and all our UI systems have been replaced with just ImGui (We had 6 separate systems, including WinForms for our in-game editor suite). The HUD and every UI piece in the screen is also ImGui. There's actually a lot more cool stuff in the game, like animated UI elements that are done in ImGui. Performance has been amazing too." [..] "Thank you @ocornut and all the contributors for ImGui, it's amazing." https://www.ninonline.org Here are more screenshots! https://imgur.com/a/6urSiYC
@pixtur Tooll v3.6 www.tooll.io
@ta-david-yu "I made an editor for my ECS game engine - DYEngine. I can't live without Dear ImGui anymore, it's so useful. " Here is a feature highlight video: https://youtu.be/ZrwCcynemSA
Also see previous releases details. Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes
(*) 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! π
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.
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:
ImGuiListClipper(int items_count, float items_height)
--> Use ImGuiListClipper() + clipper.Begin()
.ForceDisplayRangeByIndices()
to IncludeRangeByIndices()
, kept inline redirection function (introduced in 1.86 and rarely used). (#6424, #3841)ListBoxHeader()
-> use BeginListBox()
ListBoxFooter()
-> use EndListBox()
ListBoxHeader()
existed. Check commented versions in imgui.h for refeence.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:
io.ConfigWindowsMoveFromTitleBarOnly
is set. (#6390)TableHeader()
leading to an empty tooltip showing when a sorting column has no visible name. (#6342) [@lukaasm]io.WantTextInputNextFrame
during the deactivation frame. (#6341) [@lukaasm]%
, 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)_NavFlattened
flags erroneously initializing default nav layer to menu layer.ImVec2
unary minus operator. (#6368) [@Koostosh]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)io.BackendFlags
on backend Shutdown()
. (#6334, #6335] [@GereonV]
Potentially this would facilitate switching runtime backend mid-session.Added ImGui_ImplWin32_InitForOpenGL()
to facilitate combining raw Win32/Winapi with OpenGL. (#3218)glBindSampler()
backup/restore on ES3. (#6375) [@jsm174]Changes from 1.89.5 to 1.89.6 related to the docking branch (multi-viewport and docking features) include:
void* ImGuiPlatformMonitor::PlatformHandle
field (backend-dependant), for usage by user code.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):
ImGuiMultiSelectData
to ImGuiMultiSelectIO
.SetNextItemSelectionData()
optional to allow disjoint selection (e.g. with a CollapsingHeader between items).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
@kem0x VPN Client
@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)
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
@psyq321: "DigiCortex v2 (artificial brain simulator) is using Dear ImGui"
@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
@Vasili-Sk: "Made configuration app for my CAN-bus devices, never been so easy! Main app on C#"
@Hunternif: "I'm building a 3d editor for procedural generation of blocky buildings, a la Minecraft :)"
@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/
@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."
"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). :)"
Drag Your GAN (technical paper/demo) https://vcai.mpi-inf.mpg.de/projects/DragGAN/ https://github.com/XingangPan/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."
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: