Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
(*) 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:
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! 👌
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.
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:
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)ImGuiTabBarFlags_FittingPolicyScroll
can be scrolled with horizontal mouse-wheel (or Shift + WheelY). (#2702)ImGuiButtonFlags_AllowItemOverlap
policy. (#2702, #4921)
BeginTabItem()
on a touch-screen. (#2702)CollapsingHeader()
with a close button on a touch-screen.TreeNode()
using ImGuiTreeNodeFlags_AllowItemOverlap
on a touch-screen.Selectable()
using ImGuiSelectableFlags_AllowItemOverlap
on a touch-screen.TableHeader()
on a touch-screen.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.AddXXXX
functions from inactive context (wrongly advertised as supported in 1.89.4). (#6199, #6256, #5856) [@cfillion]io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (#2334, #2702)io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen. This is relying on SDL passing SDL_TOUCH_MOUSEID
in the event's 'which' field. (#2334, #2702)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)io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (#2334, #2702)io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (#6315) [@PathogenDavid]io.AddMouseSourceEvent()
to discriminate Mouse/Pen. (#6314) [@PathogenDavid]io.BackendRendererUserData
like other backends.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.Changes from 1.89.4 to 1.89.5 related to the docking branch (multi-viewport and docking features) include:
GetItemXXX()
or IsItemXXX()
functions after a DockSpace()
call. (#6217)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):
ImGuiMultiSelectFlags_ClearOnClickWindowVoid
.ImGuiMultiSelectFlags_ClearOnEscape
.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"
Spotted in Counter-Strike 2 dev video.
Spotted in Halo Infinite dev talk (from https://www.gdcvault.com/play/1027689/Thinking-Like-Players-How-Halo)
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"
@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
@Chaojimengnan: "A video progress bar"
@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." [...]
@inobelar "C++ web app (yep - emscripten, wasm, webgl), ImGui-based interactive Yoga Playground." Web Demo (sources)
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! 👌
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.
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:
PushAllowKeyboardFocus()
/PopAllowKeyboardFocus()
to PushTabStop()
/PopTabStop()
. Kept inline redirection functions (will obsolete).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)
#define IMGUI_DEFINE_MATH_OPERATORS
/ #include "imgui.h"
/ #include "imgui_internal.h"
#include "imgui.h"
/ #define IMGUI_DEFINE_MATH_OPERATORS
/ #include "imgui_internal.h"
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.ImGuiSliderFlags_ClampOnInput
-> use ImGuiSliderFlags_AlwaysClamp
ImGuiInputTextFlags_AlwaysInsertMode
-> use ImGuiInputTextFlags_AlwaysOverwrite
ImDrawList::AddBezierCurve()
-> use ImDrawList::AddBezierCubic()
ImDrawList::PathBezierCurveTo()
-> use ImDrawList::PathBezierCubicCurveTo()
Other Changes:
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:
PushTabStop(false)
/ PopTabStop()
.PushItemFlag(ImGuiItemFlags_NoTabStop, true);
.ImGuiItemFlags_NoTabStop
to ItemAdd()
for custom widgets.io.AddEventXXX
functions from current context. (#4921, #5856, #6199)io.ConfigDebugBeginReturnValueOnce
/ io.ConfigDebugBeginReturnValueLoop
options to simulate Begin/BeginChild returning false to facilitate debugging user behavior.BeginTooltip()
.WM_NCMOUSEMOVE
/ WM_NCMOUSELEAVE
to track mouse positions over non-client area (e.g. OS decorations) when app is not focused. (#6045, #6162)SDL_GetPerformanceCounter()
not returning a monotonically increasing value. (#6189, #6114, #3644) [@adamkewley]glfwGetError()
and glfwGetGamepadState()
on Emscripten, which recently updated its GLFW emulation layer to GLFW 3.3 without supporting those. (#6240)ImGuiConfigFlags_NavEnableKeyboard
and ImGuiConfigFlags_NavEnableGamepad
by default. (#787)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
RTSA (Real-Time Spectrum Analyzer) Suite https://aaronia.com/software/rtsa-suite/
Structural Mechanics software ObjectiveFrame https://github.com/jonaslindemann/objectiveframe
OpenSim Creator https://github.com/ComputationalBiomechanicsLab/opensim-creator
Fun thing, Quake 3 re-release using a Dear ImGui underlying logic for in-game menus:
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!"
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! 👌
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.
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:
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()
widget. (#1643) [@phed, @ocornut]
float SeparatorTextBorderSize
.ImVec2 SeparatorTextAlign
, ImVec2 SeparatorTextPadding
.Demo->Tools->Debug Log->IO
to visualize values submitted to Dear ImGui.io.ConfigMacOSXBehaviors
manually (if you know a way let us know!), or offer the "OSX-style behavior" option to their user.MenuItem()
/BeginMenu()
when label contains a '\n'. (#6116) [@imkcy9]SetNextWindowSize()
to alter combo popup size. (#6130)GlyphRanges[]
pairs first is <= second.AddPolyline()
and AddConvexPolyFilled()
when color alpha is zero."%s"
as a shortcut to no-formatting. (#3466)io.DeltaTime
, and browser features such as privacy.resistFingerprinting=true
can exacerbate that. (#6114, #3644)hasPreciseScrollingDeltas==false
(e.g. non-Apple mices).WM_MOUSEHWHEEL
horizontal value to match other backends and offer consistent horizontal scrolling direction. (#4019)SDL_MOUSEWHEEL
horizontal value to match other backends and offer consistent horizontal scrolling direction. (#4019)SDL_MOUSEWHEEL
value clamping. (#4019, #6096, #6081)preciseX
/preciseY
mouse wheel data for smooth scrolling as reported by SDL. (#4019, #6096)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)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)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]ImGui_ImplGlfw_SetCallbacksChainForAllWindows()
to instruct backend to chain callbacks even for secondary viewports/windows. User callbacks may need to test the 'window' parameter. (#6142)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]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:
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."
SpriteMancer by @CodeManu https://spritemancer.com
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."
@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
Dear ImGui Bundle by @pthom https://github.com/pthom/imgui_bundle
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."_
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."
LDtk viewer @Madour: "A toy project I created a while ago to learn ImGui. Very convenient lib, and the customization is also very easy."
erhe by @tksuoran https://github.com/tksuoran/erhe
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! 👌
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.
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:
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)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.void* UserData
field in ImFontAtlas
, as a convenience for use by applications using multiple font atlases.IMGUI_DEBUG_LOG()
not being dead-stripped when building with IMGUI_DISABLE_DEBUG_TOOLS
is used. (#5901) [@Teselka]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:
DockBuilderCopyDockSpace()
crashing when windows not in the remapping list are docked on the left or top side of a split. (#6035)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)ImGui_ImplOSX_GetWindowSize
that would cause issues when resizing from OS decorations, if they are enabled on secondary viewports. (#6009) [@sivu]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--"
NAP Framework by https://nap-labs.tech/ https://www.napframework.com
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."
RetroDebugger by @slajerek https://github.com/slajerek/RetroDebugger
RE Edit, a free and open source WYSIWYG editor for the UI of a Rack Extension https://github.com/pongasoft/re-edit
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! 👌
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.
This is mostly a couple of changes to amend the release of v1.89:
SetKeyboardFocusHere()
/SetItemDefaultFocus()
during a window-appearing frame (and associated lower-level functions e.g. ScrollToRectEx()
) from not centering item. (#5902)End()
/EndChild()
incorrectly asserting if users manipulates cursor position inside a collapsed/culled window and IMGUI_DISABLE_OBSOLETE_FUNCTIONS
is enabled. (#5548, #5911)SetItemDefaultFocus()
) from not being centered when the combo window initially appears. (#5902).style.ColorButtonPosition == ImGuiDir_Left
to move the color button on the left side (regression introduced in 1.88 WIP 2022/02/28). (#5912)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)glfwGetKeyName()
when a name is missing. (#5908)Changes from 1.89 to 1.89,1 related to the docking branch (multi-viewport and docking features) include:
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.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.
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! 👌
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.
Some arbitrary highlights among the 90+ changes:
ImGuiHoveredFlags_DelayNormal
and ImGuiHoveredFlags_DelayShort
for delayed hover test (work on items that have no persistent identifier e.g. Text items).ImGuiInputTextFlags_EscapeClearsAll
and io.ConfigInputTextEnterKeepActive
. Added Shift+Click style selection. Improvements for numerical inputs for IME mode sending full-width characters. Other fixes.Shortcut()
function that magically handle input routing.(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.)
SetCursorPos()
/ SetCursorScreenPos()
to extend parent window/cell boundaries. (#5548)
This relates to when moving the cursor position beyond current boundaries WITHOUT submitting an item.
Begin(...)
+ SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200))
+ End()
Begin(...)
+ SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200))
+ Dummy(ImVec2(0,0))
+ End()
Begin(...)
+ Dummy(ImVec2(200,200))
+ End()
;#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
this will now be detected and assert.#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
this will silently be fixed until we obsolete it.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.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.)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:
IMGUI_DISABLE_OBSOLETE_KEYIO
is defined. Need updating!io.NavInputs[]
(no gamepad support)
io.NavInputs[]
:
IMGUI_DISABLE_OBSOLETE_KEYIO
is defined. Need fixing!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.ImageButton()
function: (#5533, #4471, #2464, #1390)
const char* str_id
parameter + removed int frame_padding = -1
parameter.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));
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.FramePadding
override which was inconsistent with other functions and made the already-long signature even longer.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));
PushID()
calls and then pass an empty identifier.style.FramePadding
for padding, to be consistent with other buttons. You may use PushStyleVar()
to alter this.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)DragScalar()
, DragScalarN()
, DragFloat()
, DragFloat2()
, DragFloat3()
, DragFloat4()
SliderScalar()
, SliderScalarN()
, SliderFloat()
, SliderFloat2()
, SliderFloat3()
, SliderFloat4()
(..., 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()
IMGUI_DISABLE_INCLUDE_IMCONFIG_H
/ IMGUI_INCLUDE_IMCONFIG_H
. They only made sense before we could use IMGUI_USER_CONFIG
. (#255)SetNextWindowScroll()
in public API. Useful to remove a scrolling delay in some situations where e.g. windows need to be synched. (#1526)io.ConfigInputTextEnterKeepActive
feature to make pressing Enter keep the input active and select all text.ImGuiInputTextFlags_EscapeClearsAll
flag: first press on Escape clears text if any, second press deactivate the InputText()
. (#5688, #2620)ImGuiInputTextFlags_ReadOnly
flag.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)ImGuiHoveredFlags_NoSharedDelay
to disable sharing delays between items, so moving from one item to a nearby one will requires delay to elapse again. (#1485)ImGuiTableColumnFlags_IsHovered
set. (#2957)SameLine()
prior to a row change would set the next row in such state where subsequent SameLine()
would move back to previous row.TabItemButton()
. (#5515, #3291) [@rokups]io.ConfigWindowsMoveFromTitleBarOnly)
. (#5843)ImGuiMod_Shortcut
which is ImGuiMod_Super
on Mac and ImGuiMod_Ctrl
otherwise. (#456)ImGuiKey_MouseXXX
aliases for mouse buttons/wheel so all operations done on ImGuiKey
can apply to mouse data as well. (#4921)AddXXX()
calls. (#5599, #4921)AddFocusEvent(false)
to also clear MouseDown[]
state. (#4921)IsItemHovered()
/ IsItemClicked()
on BeginMenu()
. (#5775)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)BeginMenu()
call with same names). (#1207)SetNextWindowXXX
data are not consumed by a BeginMenu()
returning false.GetGlyphRangesGreek()
helper for Greek & Coptic glyph range. (#5676, #5727) [@azonenberg]alloca()
, anymore, lift single polygon size limits. (#5704, #1811)ImmAssociateContextEx()
leading to freeze on some setups. (#2589, #5535, #5264, #4972)ImGuiKey
is now a typed enum, allowing ImGuiKey_XXX
symbols to be named in debuggers. (#4921)PopStyleColor()
/ PopStyleVar()
+ easier to recover. (#1651)io.Framerate
moving average now converge in 60 frames instead of 120. (#5236, #4138)0xXXXXXXXX
value. (#5855)IO
and Clipper
events logging. (#5855)0xXXXXXXXX
value (in most places).RegisterClassW()
to ensure windows are Unicode. (#5725)GLFW_CURSOR_DISABLED
by not setting mouse position. (#5625) [@scorpion-26]glfwGetError()
call on GLFW 3.3 to inhibit missing mouse cursor errors. (#5785) [@mitchellh]MultiByteToWideChar()
when window class was registered as MBCS (not Unicode). (#5725, #1807, #471, #2815, #1060) [@or75, @ocornut]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).sampleCount
-> rasterSampleCount
. (#5603) [@dcvz]ImGui_ImplVulkan_RemoveTexture()
for api symetry. (#914, #5738).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:
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/
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
an IDE, Assembler and Emulator for the CPU Intel 8085 https://github.com/FanisDeligiannis/8085_emulator
Erhe by @tksuoran https://github.com/tksuoran/erhe
Castle-Engine by @benanil
imspinner: Set of nice spinners by @dalerank (#5421) https://github.com/dalerank/imspinner
ImExplorer by @immortalx74: "WIP Windows tabbed file explorer replacement. Uses the voidtools Everything SDK for searching and navigating."
Unknown software by @keycccc
Fragmenter - animated loop machine by @keszegh A real-time animation app, using ImGui via the Gideros ImGui plugin: https://longtitle-productions.itch.io/fragmenter
Hazel Engine by @TheCherno https://github.com/TheCherno/Hazel
Earthblade game editor (upcoming game by the makers of Celeste and Towerfall)
Harfang 3D Engine https://github.com/harfang3d/harfang3d
Xpano by @krupkat "I made a tool for stitching photos:" https://github.com/krupkat/xpano
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
INO3D by @everaldojunior98 "a 3D environment for circuits simulation." https://github.com/everaldojunior98/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!"
Syntacts by @epezent https://www.syntacts.org/
Raytracing off vs. on. All in software, no RTX:p And ImGui for everything UI of course!
Engine by @gboisse
Torch R&D Prototype at Ubisoft La Forge https://twitter.com/Ubisoft/status/1582017652557377537
Raven by @jminor "a user interface for viewing OpenTimelineIO video/audio timelines." https://github.com/jminor/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!
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! 👌
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.
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:
DebugTextEncoding()
function to help validating UTF-8 code since many users have issues with UTF-8 encoding and C++ makes things difficult.Some of the debug tools
(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.)
IMGUI_DISABLE_METRICS_WINDOW to
IMGUI_DISABLE_DEBUG_TOOLS` for correctness. Kept support for old define (will obsolete).CaptureMouseFromApp()
and CaptureKeyboardFromApp()
to SetNextFrameWantCaptureMouse()
and SetNextFrameWantCaptureKeyboard()
to clarify purpose, old name was too misleading. Kept inline redirection functions (will obsolete).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).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)ButtonBehavior()
without calling ItemAdd()
now requires a KeepAliveID()
call. This is because the KeepAliveID()
call was moved from GetID()
to ItemAdd()
. (#5181)io.KeysDown[]
with legacy indices didn't work (with new backends).io.KeysDown[GetKeyIndex(XXX)]
would access invalid data (with old/new backends).IsKeyDown()
didn't have those problems, and is recommended as io.KeysDown[]
is obsolete.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.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.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).SetKeyboardFocusHere()
and simultaneous changing window focus. (#4449)SetKeyboardFocusHere()
to not behave if a drag or window moving is in progress.ImGuiHoveredFlags_NoNavOverride
to disable the behavior where the return value is overridden by focus when gamepad/keyboard navigation is active.IsMouseClicked()
repeat mode rate being half of keyboard repeat rate.SameLine()
after a ColorEdit()
with visible label.BeginTabItem()
now reacts to SetNextItemWidth()
. (#5262)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.GrabMinSize
from 10.0f to 12.0f.SetNextWindowPos
/SetNextWindowSize
API calls not marking settings as dirty.PathArcTo()
emitting terminating vertices too close to arc vertices. (#4993) [@thedmd]ShowDebugLogWindow()
showing an opt-in synthetic log of principal events (focus, popup, active id changes) helping to diagnose issues.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]SetNextFrameWantCaptureMouse()
/SetNextFrameWantCaptureKeyboard()
.DebugTextEncoding()
function.GetID("label")
before a widget emitting this item inside a group (such as InputInt()) from causing an assertion when closing the group. (#5181).IsAnyItemHovered()
returning false when using navigation.IMGUI_STB_SPRINTF_FILENAME
to support custom path to stb_sprintf. (#5068, #2954) [@jakubtomsu]VK_PRESENT_MODE_MAX_ENUM_KHR
as specs state it isn't part of the API. (#5254)SDL_BUTTON_X1
/SDL_BUTTON_X2
). (#5125) [@sgiurgiu]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).GL_ELEMENT_ARRAY_BUFFER_BINDING
and vertex attribute states. [@rokups]ImGui_ImplOSX_HandleEvent()
. (#4821)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:
io.ConfigWindowsMoveFromTitleBarOnly
is true and multi-viewports are disabled. (#5044)io.ConfigDockingAlwaysTabBar
is true. (#5324) [@rokups]Some of changes from 1.87 to 1.88 related to the range-select branch:
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/
"FightNJokes is a semi-humorous retro style 2D fighting game made for players with humor" https://twitter.com/fightnjokes
@gboisse: Procedural geometry with ImGui-based nodes:
@sgiurgiu: A Reddit client https://github.com/sgiurgiu/reddit_desktop
@Jaysmito101: TerraForge3D https://github.com/Jaysmito101/TerraForge3D
@Unit520: Hexmap an interactive WebGL/WASM based binary data exploration tool https://unit520.net/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.
@lukaasm EXOR Tools/Model Editor, Benchmark viewer
@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.
@travishaynes: I'm using ImGui to create a PDF viewer designed for doing quantity takeoff from scaled construction drawings [...]
@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
@pixtur: Tooll 3 - A realtime animation toolkit https://github.com/still-scene/t3/
@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
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!
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! 👌
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.
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!
io.AddKeyEvent()
. The vast majority of changes are backward compatible but you are encouraged to update your backends now. See full recap > #4921.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).(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.)
io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions, obsoleting writing directly to io.MousePos
, io.MouseDown[]
, io.MouseWheel
, etc.io.AddKeyEvent()
function, obsoleting writing directly to io.KeyMap[], io.KeysDown[] arrays.io.AddKeyEvent()
with ImGuiKey_ModXXX
values, obsoleting writing directly to io.KeyCtrl, io.KeyShift etc.io.SetKeyEventNativeData()
function (optional) to pass native and old legacy indices.ImGuiKey_F1
).GetKeyName()
helper function.GetKeyIndex()
: it is now unnecessary and will now return the same value.nt user_key_index
now take ImGuiKey key
: IsKeyDown()
, IsKeyPressed()
, IsKeyReleased()
, GetKeyPressedAmount()
.io.ConfigInputTrickleEventQueue
(defaulting to true) to disable input queue trickling.IsKeyPressed(MY_NATIVE_KEY_XXX)
will still work! (for a while)
#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.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) -> use
IsKeyPressed(ImGuiKey_XXX)`IsKeyPressed(GetKeyIndex(ImGuiKey_XXX))
-> use `IsKeyPressed(ImGuiKey_XXX)io.AddKeyEvent()
, if legacy indexing is desired, call io.SetKeyEventNativeData()**ImGuiKey_GamepadXXXX
enums (e.g. ImGuiKey_GamepadDpadUp
, ImGuiKey_GamepadR2
) to use with io.AddKeyEvent()
, io.AddKeyAnalogEvent()
.io.AddKeyAnalogEvent()
function, obsoleting writing directly to io.NavInputs[]
arrays.ImGuiKey_KeyPadEnter
to ImGuiKey_KeypadEnter
to align with new symbols. Kept redirection enum. (#2625)glfwSetCursorPosCallback()
.
glfwSetCursorPosCallback()
and forward it to the backend function ImGui_ImplGlfw_CursorPosCallback()
.SDL_Renderer*
parameter to ImGui_ImplSDL2_InitForSDLRenderer()
, so backend can call SDL_GetRendererOutputSize()
to obtain framebuffer size valid for hi-dpi. (#4927) [@Clownacy]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
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.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).io.AddKeyEvent()
, io.AddKeyAnalogEvent()
.io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
.ImDrawList::AddCallback()
when submitted in last column or last channel and when there are no other drawing operation. (#4843, #4844) [@hoffstadt]io.ImeSetInputScreenPosFn()
to io.SetPlatformImeDataFn()
API, now taking a ImGuiPlatformImeData
structure which we can more easily extend in the future.io.ImeWindowHandle
to GetMainViewport()->PlatformHandleRaw
.ImGuiPlatformImeData::WantVisible
, hide IME composition window when not used. (#2589) [@actboy168]ImGuiPlatformImeData::InputLineHeight
. (#3113) [@liuliu]ImmSetCandidateWindow()
to position candidate window.io.AddKeyEvent()
. (#2625, #4921)io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions. (#4921)glfwSetCursorPosCallback()
+ fallback when focused but not hovered/captured.io.AddKeyEvent()/AddKeyAnalogEvent()
functions, stopped writing to io.NavInputs[]
. (#4921)ImGui_ImplGlfw_InstallCallbacks()
/ImGui_ImplGlfw_RestoreCallbacks()
helpers to facilitate user installing
callbacks after iniitializing backend. (#4981)io.AddKeyEvent()
. (#2625, #4921)io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions. (#4921)MouseButtonsDown
mask instead of using ImGui::IsAnyMouseDown()
which will be obsoleted.io.AddKeyEvent()/AddKeyAnalogEvent()
functions, stopped writing to io.NavInputs[]
. (#4921)io.AddKeyEvent()
. (#2625, #4921)io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions. (#4921)MouseButtonsDown
mask instead of using ImGui::IsAnyMouseDown()
which will be obsoleted.io.AddKeyEvent()/AddKeyAnalogEvent()
functions, stopped writing to io.NavInputs[]
. (#4921)io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions. (#4921)io.AddKeyEvent()
. (#2625, #4921)io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions. (#4921)io.AddKeyEvent()
/AddKeyAnalogEvent()
functions, stopped writing to io.NavInputs[]. (#4921)io.AddKeyEvent()
. (#2625, #4921)io.AddMousePosEvent()
, io.AddMouseButtonEvent()
, io.AddMouseWheelEvent()
functions. (#4921)#define IMGUI_IMPL_METAL_CPP
in your imconfig.h file. (#4824, #4746) [@luigifcruz]ElemCount == 0
, which are normally not emitted by the library but can theoretically be created by user code manipulating a ImDrawList. (#4857)ImGui_ImplVulkan_AddTexture()
. (#914) [@martty]
wgpuRenderPassEncoderSetIndexBuffer()
and wgpuRenderPassEncoderSetVertexBuffer()
calls. (#4891) [@FeepsDev]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:
io.AddMouseViewportEvent()
function to queue hovered viewport change (when known by backend).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.InputText()
from preventing viewports to merge. (#4212)ImGuiBackendFlags_HasMouseHoveredViewport
now that its specs have been lowered.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
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/
@durswd: ImGradientHDR A gradient editor which supports color, alpha and intensity. https://github.com/effekseer/ImGradientHDR
@tksuoran I heard you liked ImGui so I put ImGui inside ImGui
@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)
@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
@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!
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! 👌
If you get visual glitches and incorrect dimming when using CTRL+Tab or Modal Windows:
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.
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
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.
ImGuiConfigFlags_NavEnableKeyboard
config flag.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.ImDrawCmd::IdxOffset
field. If you get visual glitches when using CTRL+Tabs or Modal, update your backend to get the fix.
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()
).
(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.)
CalcListClipping()
function. Prefer using ImGuiListClipper
which can return non-contiguous ranges. Please open an issue if you think you really need this function. (#3841)NSView*
parameter to ImGui_ImplOSX_Init()
. (#4759) [@stuartcarnie]""
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
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]IsWindowFocused()
/IsWindowHovered()
issues with child windows inside popups. (#4676)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)._NavFlattened
and parent has a pending request.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.style.PopupRounding
. (#4788)SetKeyboardFocusHere()
preventing to use InputText()
. (#4682)SetKeyboardFocusHere()
on InputTextMultiline()
. (#4761)ImGuiInputTextFlags_ReadOnly
flag preventing callbacks from receiving the text buffer. (#4762) [@actondev]FrameBorder > 0
. (#3781, #4794)FramePadding.y
. (#3781, #4794)ForceDisplayRangeByIndices()
to force a given item (or several) to be stepped out during a clipping operation. (#3841) [@@GamingMinds-DanielC]BeginDragDropSource()
with ImGuiDragDropFlags_SourceAllowNullID
doesn't lose tooltip when scrolling. (#143)ImFontGlyphRangesBuilder::AddRanges()
when passing UINT16_MAX or UINT32_MAX without the IMGUI_USE_WCHAR32
compile-time option. (#4802) [@SlavicPotato]ImGuiMouseCursor_NotAllowed
cursor for software rendering (when the io.MouseDrawCursor
configuration flag is enabled). (#4713) [@nobody-special666]IMGUI_API
is defined). [@rokups]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)glBufferSubData()
, seems to fix leaks with multi-viewports with some Intel HD drivers, and perhaps improve performances. (#4468, #4504, #2981, #3381) [@parbo]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)DRAW_EMPTY_SCISSOR_RECTANGLE
warnings. (#4775)ImGuiBackendFlags_RendererHasVtxOffset
in the backend. (#3926) [@rokups]RenderGeometryRaw()
API signature change. (#4819) [@sridenour]GameController
framework) (#4759) [@stuartcarnie]wgpuRenderPassEncoderSetVertexBuffer()
and wgpuRenderPassEncoderSetIndexBuffer()
functions as validation layers appears to not do what the in-flux specs says. (#4766) [@meshula]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:
io.ConfigDockingWithShift
config option (removed in 1.83). (#4643)_KeepAliveOnly
dockspace when unrelated windows submitted before the dockspace have dynamic visibility. (#4757)ImGuiCol_WindowBg
. (#2700, #2539)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)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
@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.
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: 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
From a course on complex network (University of Valencia) https://sites.google.com/site/introcomplexnetworks/
Voxel Editor by @mgerhardy https://github.com/mgerhardy/engine/releases
@aiekick: "NoodlesPlate (offline Shader Editor)" https://github.com/aiekick/NoodlesPlate
@ncatlin "rgat is a software reverse engineering tool for generating and visualizing instruction traces" https://ncatlin.github.io/rgatPages/ 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"
Teamfight Tactics (from https://www.upcomer.com/the-three-innovators-how-the-tft-live-balance-team-built-patch-11-24/)
@phkehl "This is u-blox generation 9 positioning (GNSS) receiver control and analysis tool." https://github.com/phkehl/ubloxcfg/tree/master/cfggui
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.