Releases: ocornut/imgui
v1.91.6
1.91.6: general maintenance release
❤️ A few months ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ 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!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recently joining sponsors: id Software!, SCS Software! Valve! Gravity Well! ❤️
❤️ Thanks to other present and past sponsors incl Supercell! BeamNG! OTOY! Arkane Lyon, Asobo Studio, Lucid Games! Asobo! G3Dvu ! Planestate Software! Aras P! FUTO! & many individuals ❤️
Thanks to @GamingMinds-DanielC, @PathogenDavid & more for their help with github answers!
Changes (since v1.91.5)
This is an unusual small release. It is mostly motivated by the fact that the Win32 backend in docking branch of v1.91.5 had a crash when running multiple program instances. Most of the work done this month is part of a larger feature I will talk about later :)
Breaking Changes:
- Backends: DX12: Changed
ImGui_ImplDX12_Init()
signature to take aImGui_ImplDX12_InitInfo
struct.- Using the new API, application is now required to pass function pointers to allocate/free SRV Descriptors.
- We provide convenience legacy fields to pass a single descriptor, matching the old API, but upcoming features will want multiple.
- Legacy ImGui_ImplDX12_Init() signature is still supported (will obsolete).
- Misc: changed CRC32 table from CRC32-adler to CRC32c polynomial in order to be compatible with the result of SSE 4.2 instructions. (#8169, #4933) [@Teselka]
- As a result, some .ini data may be partially lost when storing checksums (docking and tables information particularly).
- Because some users have crafted and storing .ini data as a way to workaround limitations of the docking API, we are providing a
#define IMGUI_USE_LEGACY_CRC32_ADLER
compile-time option to keep using old CRC32 tables if you cannot afford invalidating old .ini data.
Other changes:
- InputText: added
ImGuiInputTextFlags_ElideLeft
to elide left side and ensure right side of contents is visible when whole text is not fitting (useful for paths/filenames). (#1442, #1440, #4391, #7208, #8216) [@kucoman, @ocornut] - InputText: reactivating last activated
InputText()
doesn't restore horizontal scrolling (which was disabled during deactivation anyway). - Error Handling: fixed cases where recoverable error handling would crash when processing errors outside of the
NewFrame()
..EndFrame()
scope. (#1651) - Tables: fixed
SetNextWindowScroll()
value being ignored byBeginTable()
during the first frame or when scrolling flags have changed. (#8196) - Misc: changed embedded ProggyClean encoding to save a bit of binary space (~12kb to 9.5kb).
- Misc: added
IMGUI_DISABLE_DEFAULT_FONT
to strip embedded font from binary. (#8161) [@Demonese] - Demo: example tree used by Property Editor & Selection demos properly freed on application closure. (#8158) [@Legulysse]
- Fonts: fixed
AddCustomRect()
not being packed with TexGlyphPadding + not accounted for surface area used to determine best-guess texture size. (#8107) [@YarikTH, @ocornut] - Misc: use SSE 4.2 crc32 instructions when available. (#8169, #4933) [@Teselka]
- Tools: binary_to_compressed_c: added
-u8
/-u32
/-base85
export options. - Backends: DirectX12: Let user specifies the
DepthStencilView
format by settingImGui_ImplDX12_InitInfo::DSVFormat
. (#8217) [@bmarques1995] - Backends: Vulkan: Make user-provided descriptor pool optional. As a convenience, when setting
init_info->DescriptorPoolSize
then the backend will create and manage one itself. (#8172, #4867) [@zeux] - Examples: Win32+DX12: Using a basic free-list allocator to manage multiple SRV descriptors.
Changes from 1.91.5 to 1.91.6 in the Docking branch:
- Backends: Win32: Fixed a crash/regression in 1.91.5 when running two processes with multi-viewports (was using GetProp() to query property which could have belonged to another process). (#8162, #8069) [@sammyfreg, @ocornut]
- Docking: Added an assert to clarify that
ImGuiDockNodeFlags_CentralNode
flag (from internals) does not need to be passed to DockSpace(), as it causes general havoc. (#8145)
Gallery
@HODAKdev: "ImGui is amazing, you can make any editor you want. This is what my game engine looks like. ❤️"
https://github.com/HODAKdev/StarEngine
@734vin: "a node base editor use ImGui, pegborad module."
LightAct 4 (Media Server for Big Shows & Fast Workflows)
https://lightact.com
@matheusgarcez "Working in progress markdown renderer for a game guide overlay (using md4c for building the node tree):"
@coderloff "Here is my basic C++ game engine for learning purposes, Ferx Engine, I'm developing as a 16-year-old:"
Orion Drift upcoming game by Another Axiom
https://www.meta.com/experiences/orion-drift/7181769438517329/
https://www.youtube.com/watch?v=LWvzanMj_
https://www.meta.com/experiences/orion-drift/7181769438517329/
@BigJk "I'm using ImGui for the whole UI of a small game I'm currently developing for fun after work. It's a First Person Dungeon Crawler with Monster Collecting Elements called Gloamvault."
"It's the first time I had a usecase for ImGui's drag and drop features. I use it so that you can easily move monsters in your party around or cast spells by dragging the spell onto the target 😄 Was super easy to implement. Working with ImGui is a breeze as always!"
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.
❤️ A few months ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
💰 🙏 Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
v1.91.5
1.91.5: many tweaks/fixes & obsoleted old IO
❤️ A few months ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ 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!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thanks to recently joining sponsors: id Software, SCS Software! Valve! Gravity Well! ❤️
❤️ Thanks to other present and past sponsors incl Supercell! BeamNG! OTOY! Arkane Lyon, Asobo Studio, Lucid Games! Asobo! G3Dvu ! Planestate Software! Aras P! FUTO! & many individuals ❤️
Thanks to @GamingMinds-DanielC, @PathogenDavid & more for for their help with github answers!
Changes (since v1.91.4)
Breaking Changes:
- Commented out pre-1.87 IO system (equivalent to using
IMGUI_DISABLE_OBSOLETE_KEYIO
orIMGUI_DISABLE_OBSOLETE_FUNCTIONS
before).io.KeyMap[]
andio.KeysDown[]
are removed (obsoleted February 2022).io.NavInputs[]
andImGuiNavInput
enum are removed (obsoleted July 2022).- Pre-1.87 backends are not supported:
- backends need to call
io.AddKeyEvent()
,io.AddMouseEvent()
instead of writing toio.KeysDown[]
,io.MouseDown[]
fields. - backends need to call
io.AddKeyAnalogEvent()
for gamepad values instead of writing toio.NavInputs[]
fields.
- backends need to call
- For more references:
- If you have trouble updating a very old codebase using legacy backend-specific key codes:
consider updating to 1.91.4 first, then #define IMGUI_DISABLE_OBSOLETE_KEYIO, then update to latest. - Obsoleted
ImGuiKey_COUNT
(it was unusually error-prone/misleading since valid keys don't start at 0). Probably useImGuiKey_NamedKey_BEGIN
/ImGuiKey_NamedKey_END
instead?
- Fonts: removed const qualifiers from most font functions in prevision for upcoming fonts improvements.
Other changes:
- Selectable: selected
Selectable
useImGuiCol_Header
instead of an arbitrary lerp between_Header
and_HeaderHovered
which was introduced v1.91 (#8106, #1861) - Buttons: using
ImGuiItemFlags_ButtonRepeat
makes default button behavior use_PressedOnClick
instead of_PressedOnClickRelease
when unspecified.- This is intended to make the +/- buttons of
InputInt()
/InputFloat()
react on the initial mouse down event. - Note that it may reveal incorrect usage if you were using
InputInt()
/InputFloat()
without persistent storage by relying solely on e.g.IsItemDeactivatedAfterEdit()
: this was never supported and didn't work consistently (see #8149).
- This is intended to make the +/- buttons of
- InputText: fixed a bug (regression in 1.91.2) where modifying text buffer within a callback would sometimes prevents further appending to the buffer.
- Tabs, Style: made
ImGuiCol_TabDimmedSelectedOverline
alpha 0 (not visible) in default styles as the current look is not right (butImGuiCol_TabSelectedOverline
stays the same). - Log/Capture: added experimental
io.ConfigWindowsCopyContentsWithCtrlC
option to automatically copy window contents into clipboard using CTRL+C. This is experimental because (1) it currently breaks on nested Begin/End, (2) text output quality varies, and (3) text output comes in submission order rather than spatial order. - Log/Capture: better decorating of
BeginMenu()
andTabItem()
output. - Log/Capture: a non terminated log ends automatically in the window which called it.
- imgui_freetype: Fixed a crash in build font atlas when using merged fonts and the first font in a merged set has no loaded glyph. (#8081)
- Backends: DX12: Unmap() call specify written range. The range is informational and may be used by debug tools.
- Backends: SDL2: Replace
SDL_Vulkan_GetDrawableSize()
forward declaration with the actual include. (#8095, #7967, #3190) [@sev-] - Backends: SDL2, SDL3:
SDL_EVENT_MOUSE_WHEEL
event doesn't require dividing by 100.0f on Emscripten target. (#4019, #6096, #1463) - Examples: SDL3+Vulkan: Added example. (#8084, #8085)
- Examples: Android+OpenGL: Using
ALooper_pollOnce()
instead ofALooper_pollAll()
which has been deprecated. (#8013) [@feather179]
Changes from 1.91.4 to 1.91.5 in the Docking branch:
- Backends: GLFW: added Linux workaround for spurious mouse up events emitted while dragging and creating new viewports. Generally they would be interrupting a dragging operations. (#3158, #7733, #7922) [@rokups, @ocornut]
- Docking: fixed using
ImGuiDockNodeFlags_KeepAliveOnly
withDockSpaceOverViewport()
: the normally invisible space did erroneously claim mouse hover and could be potentially focused. (#8125) [@kcbanner] ‼️ *EDIT* The imgui_impl_win32 backend in this release has a crashing bug when using multi-viewports + running multiple processes simultaneously (because I didn't realize Win32's SetProp()/GetProp() data were not process bound). Fixed by dad1047 head but not in a tagged release yet. You may cherry-pick dad1047 from 1.91.5.‼️
How the output of io.ConfigWindowsCopyContentsWithCtrlC
looks:
Gallery
@elvissteinjr: "I've just released Desktop+ 3.0, a SteamVR desktop/windows mirroring application, which features a fully revamped UI, naturally using ImGui. While it was using ImGui before (last gallery post in 2020), the UI is now fancier with multiple windows floating in VR, some animated widgets and a custom VR keyboard (which is also just a ImGui window).
Nowadays also available on Steam (free). The Steam announcement for this release also has some short video clips and more screencaps, though not all focused on the interface itself." read more
@koki10190: "Editor for my game engine! The engine itself is similar to how unity works"
https://github.com/Vault-Software-Team/Vault-Engine
@vircon32: "Hi! Never got to show it here, but for some time now I have been using Dear Imgui. I made Vircon32, a game console I designed from scratch, and my emulator uses ImGui to show menus."
@343587787: "I used ImGui combined with OpenCASCADE to create a 3D model visualization software for debugging some of my graphics algorithms."
@Riztazz: "We built a single/multi-webcam motion capture app AImation Studio with the help of ImGui, thank you for this library! Testing some of the features, streaming to unreal and other features available on our website if anyone is interested"
aimation_imgui_ver_three.mp4
@tay10r: "I use ImGui for practically everything at work and at home. Here's an app I made for monitoring training loops for neural networks. In this particular case I'm training an anomaly detector based on data augmentation techniques from: https://www.sciencedirect.com/science/article/abs/pii/S0031320320305094 Thanks @ocornut for maintaining this awesome library!"
[Read on more gallery...
v1.91.4
1.91.4: keyboard/gamepad nav options, draw callback data & backend render state & more
❤️ Two months ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ 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!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
❤️ Thank you Supercell! BeamNG! OTOY! Lucid Games! Asobo! Planestate Software! Aras! Gravity Well! SCS Software! & many individuals ❤️
Special thanks to @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Changes (since v1.91.3)
Breaking Changes:
- Style: renamed
ImGuiCol_NavHighlight
toImGuiCol_NavCursor
, for consistency with newly exposed and reworked features. Kept inline redirection enum (will obsolete). - The typedef for
ImTextureID
now defaults toImU64
instead ofvoid*
. (#1641)- This removes the requirement to redefine it for backends which are e.g. storing descriptor sets or other 64-bits structures when building on 32-bits archs (namely our DX12 and Vulkan backends). It therefore simplify various building scripts/helpers.
- You may have compile-time warnings if you were casting to
void*
instead ofImTextureID
when passing your types to functions takingImTextureID
values, e.g.ImGui::Image()
. In doubt it is almost always better to do an intermediateintptr_t
cast, since it allows casting any pointer/integer type without warning:- May warn:
ImGui::Image((void*)MyTextureData, ...);
- May warn:
ImGui::Image((void*)(intptr_t)MyTextureData, ...);
- Won't warn:
ImGui::Image((ImTextureID)(intptr_t)MyTextureData), ...);
- May warn:
- Note that you can always #define ImTextureID to be your own high-level structures (with dedicated constructors and extra render parameters) if you like.
- IO: moved
ImGuiConfigFlags_NavEnableSetMousePos
to standaloneio.ConfigNavMoveSetMousePos
bool. - IO: moved
ImGuiConfigFlags_NavNoCaptureKeyboard
to standaloneio.ConfigNavCaptureKeyboard
bool (note the inverted value!). (#2517, #2009). Kept legacy names (will obsolete) + code that copies settings once the first time. Dynamically changing the old value won't work. Switch to using the new value!
Other changes:
- IO: added
void* platform_io.Renderer_RenderState
which is set during theImGui_ImplXXXX_RenderDrawData()
of standard backends to expose selected render states to your draw callbacks. (#6969, #5834, #7468, #3590) - IO:
io.WantCaptureKeyboard
is never set whenImGuiConfigFlags_NoKeyboard
is enabled. (#4921) - Error Handling: turned a few more functions into recoverable errors. (#1651)
- Nav (Keyboard/Gamepad navigation):
- Nav: added
io.ConfigNavCursorVisibleAuto
andio.ConfigNavCursorVisibleAlways
to configure visibility of navigation cursor. (#1074, #2048, #7237, #8059, #3200, #787)- Set
io.ConfigNavCursorVisibleAuto = true
(default) to enable automatic toggling of cursor visibility (mouse click hide the cursor, arrow keys makes it visible). - Set
io.ConfigNavCursorVisibleAlways
to keep cursor always visible.
- Set
- Nav: added
NavSetCursorVisible(bool visible)
function to manipulate visibility of navigation cursor (e.g. set default state, or after some actions). (#1074, #2048, #7237, #8059) - Nav: added
io.ConfigNavEscapeClearFocusItem
andio.ConfigNavEscapeClearFocusWindow
to change how pressing Escape affects navigation. (#8059, #2048, #1074, #3200)- Set
io.ConfigNavEscapeClearFocusItem = true
(default) to clear focused item and highlight. - Set
io.ConfigNavEscapeClearFocusItem = false
for Escape to not have an effect. - Set
io.ConfigNavEscapeClearFocusWindow = true
to completely unfocus the Dear ImGui window, is for some reason your app relies on imgui focus to take other decisions.
- Set
- Nav: pressing Escape to hide the navigation cursor doesn't clear current location, so it may be restored when Ctrl+Tabbing back into the same window later.
- Nav: fixed Ctrl+Tab initiated with no focused window from skipping the top-most window. (#3200)
- Nav: navigation cursor is not rendered for items with
ImGuiItemFlags_NoNav
. Can be relevant when e.g activating a _NoNav item with mouse, then Ctrl+Tabbing back and forth.
- Nav: added
- Disabled: clicking a disabled item focuses parent window. (#8064)
- InvisibleButton, Nav: fixed an issue when
InvisibleButton()
would be navigable into but not display navigation highlight. Properly navigation on it by default. (#8057) - InvisibleButton: added
ImGuiButtonFlags_EnableNav
to enable navigation over the invisible button. (#8057) - Tooltips: fixed incorrect tooltip positioning when using keyboard/gamepad navigation (1.91.3 regression). (#8036)
- DrawList:
AddCallback()
added an optional size parameter allowing to copy and store any amount of user data for usage by callbacks: (#6969, #4770, #7665)- If
userdata_size == 0:
we copy/store theuserdata
argument as-is (existing behavior). It will be available unmodified inImDrawCmd::UserCallbackData
during render. - If
userdata_size > 0
, we copy/storeuserdata_size
bytes pointed to byuserdata
(new behavior). We store them in a buffer stored inside the drawlist.ImDrawCmd::UserCallbackData
will point inside that buffer so you have to retrieve data from there. Your callback may need to useImDrawCmd::UserCallbackDataSize
if you expect dynamically-sized data. - Note that we use a raw type-less copy.
- If
- Tables: fixed initial auto-sizing issue with synced-instances. (#8045, #7218)
- InputText: fixed an issue with not declaring ownership of Delete/Backspace/Arrow keys, preventing use of external shortcuts that are not guarded by an ActiveId check. (#8048) [@geertbleyen]
- InputText: ensure mouse cursor shape is set regardless of whether keyboard mode is enabled or not. (#6417)
- InputScalar: added an assert to clarify that
ImGuiInputTextFlags_EnterReturnsTrue
is not
supported byInputFloat()
/InputInt()
/InputScalar()
etc. widgets. It actually never was. (#8065, #3946) - imgui_freetype: Added support for plutosvg (as an alternative to lunasvg) to render OpenType SVG fonts. Requires defining
IMGUI_ENABLE_FREETYPE_PLUTOSVG
along withIMGUI_ENABLE_FREETYPE
. Providing headers/librairies for plutosvg + plutovg is up to you (see #7927 for help). (#7927, #7187, #6591, #6607) [@pthom] - Backends: DX11, DX12, SDLRenderer2/3. Vulkan, WGPU: expose selected state in
ImGui_ImplXXXX_RenderState
structures during render loop, for user draw callbacks. (#6969, #5834, #7468, #3590) - Backends: DX9, DX10, DX11, DX12, OpenGL, Vulkan, WGPU: Changed default texture sampler to Clamp instead of Repeat/Wrap. (#7468, #7511, #5999, #5502, #7230)
Changes from 1.91.3 to 1.91.4 in the Docking branch:
- Backends: changed all backends to allow enabling
ImGuiConfigFlags_ViewportsEnable
after initialization. (#5371)
Gallery
@abdullahoday710 : "World editor I made for my game engine"
@Redcrafter: "I'm using ImGui for the unofficial Animal Well map editor."
@fchen99: "I'm working on this car audio flow editing and tuning tool recently. I've posted screen shot of its early version a couple of weeks ago, and now it's getting to its first release. Thanks @ocornut and all other contributors for your great work, imgui makes my work easier and more enjoyable."
@ypujante: _"I made an Emscripten port for ImGui. What this means is that you only need the port file to use ImGui and it has simple options to configure it (like which renderer to use and which backend and the branch). The port takes care of downloading the proper version and compiling it. Check out the port on pongasoft/emscripten-ports.
Also see previous releases details.
Note that GitHub are now clamping re...
v1.91.3
1.91.3: opt-in error recovery features + misc drags/tooltips/scrollbar/backends work.
❤️ A month ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ 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!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
In recent year, Dear ImGui has been financially supported by many companies. Thank you SCS Software for starting to sponsor Dear ImGui!
Special thanks to @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Changes (since v1.91.2)
Breaking Changes:
- Drags: treat v_min==v_max as a valid clamping range when != 0.0f. Zero is still a special value due to legacy reasons, unless using
ImGuiSliderFlags_ClampZeroRange
. (#7968, #3361, #76) - Drags: extended behavior of
ImGuiSliderFlags_AlwaysClamp
to includeImGuiSliderFlags_ClampZeroRange
. It considers v_min==v_max==0.0f as a valid clamping range (aka edits not allowed). Although unlikely, it you wish to only clamp on text input but want v_min==v_max==0.0f to mean unclamped drags, you can use_ClampOnInput
instead of_AlwaysClamp
. (#7968, #3361, #76)
Other changes:
- Error Handling: Enabled/improved error recovery systems. (#1651, #5654)
- Read https://github.com/ocornut/imgui/wiki/Error-Handling for a bit more details.
- Error recovery is provided as a way to facilitate:
- Recovery after a programming error. Native code or scripting language (the later tends to facilitate iterating on code while running).
- Recovery after running an exception handler or any error processing which may skip code after an error has been detected.
- Error recovery is not perfect nor guaranteed! It is a feature to ease development.
You not are not supposed to rely on it in the course of a normal application run. - Functions that support error recovery are using
IM_ASSERT_USER_ERROR()
instead ofIM_ASSERT()
. - By design, we do not allow error recovery to be 100% silent. One of the options needs to be enabled!
- Possible usage: facilitate recovery from errors triggered from a scripting language or after specific exceptions handlers. Surface errors to programmers in less aggressive ways.
- Always ensure that on programmers seats you have at minimum Asserts or Tooltips enabled when making direct imgui API calls! Otherwise it would severely hinder your ability to catch and correct mistakes!
- Added
io.ConfigErrorRecovery
to enable error recovery support. - Added
io.ConfigErrorRecoveryEnableAssert
to assert on recoverable errors. - Added
io.ConfigErrorRecoveryEnableDebugLog
to output to debug log on recoverable errors. - Added
io.ConfigErrorRecoveryEnableTooltip
to enable displaying an error tooltip on recoverable errors. The tooltip include a way to enable asserts if they were disabled. - All options are enabled by default.
- Windows: BeginChild(): made it possible to call
SetNextWindowSize()
on a child window usingImGuiChildFlags_ResizeX
,ImGuiChildFlags_ResizeY
in order to override its current size. (#1710, #8020) - Scrollbar: Shift+Click scroll to clicked location (pre-1.90.8 default). (#8002, #7328)
- Scrollbar: added
io.ConfigScrollbarScrollByPage
setting (default to true). Setio.ConfigScrollbarScrollByPage=false
to enforce always scrolling to clicked location. (#8002, #7328) - Drags: split
ImGuiSliderFlags_AlwaysClamp
into two distinct flags: (#7968, #3361, #76)ImGuiSliderFlags_AlwaysClamp
=ImGuiSliderFlags_ClampOnInput
+ImGuiSliderFlags_ClampZeroRange
.- Previously
_AlwaysClamp
only did the equivalent of_ClampOnInput
. - Added
ImGuiSliderFlags_ClampOnInput
which is now a subset of_AlwaysClamp
(note that it was the old name of_AlwaysClamp
, but we are reintroducing that name). - Added
ImGuiSliderFlags_ClampZeroRange
to enforce clamping even when v_min==v_max==0.0f in drag functions. Sliders are not affected.
- Tooltips, Drag and Drop: Fixed an issue where the fallback drag and drop payload tooltip appeared during drag and drop release.
- Tooltips, Drag and Drop: Stabilized name of drag and drop tooltip window so thattransitioning from an item tooltip to a drag tooltip doesn't leak window auto-sizing info from one to the other. (#8036)
- Tooltips: Tooltips triggered from touch inputs are positioned above the item. (#8036)
- Backends: SDL3: Update for API changes:
SDL_bool
removal.SDL_INIT_TIMER
removal. - Backends: WebGPU: Fixed DAWN api change using
WGPUStringView
inWGPUShaderSourceWGSL
. (#8009, #8010) [@blitz-research]
Changes from 1.91.2 to 1.91.3 in the Docking branch:
- Backends: SDL2, SDL3: Fixed building for UWP platforms. (#8008)
- Backends: Win32: Use
ResisterClassW()
/CreateWindowExW()
for secondary viewports, to ensure correct IME input even if the backend was compiled in MBCS mode. (#7979, #5725)
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.
❤️ A month ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
💰 🙏 Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
v1.91.2
1.91.2: detect id conflicts, table fixes, faster input text & more.
❤️ A month ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ 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!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
In recent year, Dear ImGui has been financially supported by many companies.
Thank you SCS Software for joining the list! Thank you to FUTO for their recent migrogrant!
Following the 10 years of Dear ImGui post, there has been an unusually high amount of individual donations. Thank you Adam, Albert, Antoine, Arthur, Bruno, Caleb, Charles, Daniel, Geoff, Giacomo, Israelle, Jean-Sebastien, Jonathan, Liam, Lucas, Martin, Nathaniel, Ondrej, Peter, Simon, Yuvan.
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @cfillion & more for for their help with patches and answers!
Changes (since v1.91.1)
- Added
io.ConfigDebugHighlightIdConflicts
debug feature! (#7961, #7669)
THIS DETECTS THE MOST COMMON USER ERROR BY FIRST-TIME DEAR IMGUI PROGRAMMERS! See Debug Tools page.- The tool detects when multiple items are sharing the same identifier, due to not using
PushID
/PopID
in loops, or not using ID stack facilities such as"##"
suffixes. Very frequently it happens when using empty""
labels. - When hovering an item with a conflicting ID, all visible items with the same ID will be highlighted and an explanatory tooltip is made visible.
- The feature may be disabled and is exposed in Demo->Tools menu.
- I've been wanting to add this tool for a long time, but was stalled by finding a way to
not make it spammy + make it practically zero cost. After @pthom made various proposals to
solve the same problem (thanks for pushing me!), I decided it was time to finish it. - Added
ImGuiItemFlags_AllowDuplicateId
to use withPushItemFlag()
/PopItemFlag()
if for some
reason you intend to have duplicate identifiers. - (#74, #96, #480, #501, #647, #654, #719, #843, #894, #1057, #1173, #1390, #1414, #1556, #1768, #2041, #2116, #2330, #2475, #2562, #2667, #2807, #2885, #3102, #3375, #3526, #3964, #4008, #4070, #4158, #4172, #4199, #4375, #4395, #4471, #4548, #4612, #4631, #4657, #4796, #5210, #5303, #5360, #5393, #5533, #5692, #5707, #5729, #5773, #5787, #5884, #6046, #6093, #6186, #6223, #6364, #6387, #6567, #6692, #6724, #6939, #6984, #7246, #7270, #7375, #7421, #7434, #7472, #7581, #7724, #7926, #7937 and probably more..)
- The tool detects when multiple items are sharing the same identifier, due to not using
- Nav: pressing any keyboard key while holding Alt disable toggling nav layer on Alt release. (#4439)
- MultiSelect+Tables: fixed an issue where box-select would skip items while drag-scrolling in a table with outer borders. (#7970, #7821).
- Inputs:
SetNextItemShortcut()
withImGuiInputFlags_Tooltip
doesn't show tooltip when item is active. - InputText: internal refactoring to simplify and optimize the code. The ImWchar buffer has been removed. Simplifications allowed to implement new optimizations for handling very large text buffers (e.g. in our testing, handling of a 1 MB text buffer is now 3 times faster in VS2022 Debug build). This is the first step toward more refactoring. (#7925) [@alektron, @ocornut]
- InputText: added CJK double-width punctuation to list of separators considered for CTRL+Arrow.
- Tables: fixed auto-width columns when using synced-instances of same table. The previous fix done in v1.90.5 was incomplete. (#7218)
- Tables: fixed assertion related to inconsistent outer clipping when sizes are not rounded. (#7957) [@eclbtownsend]
- Tables: fixed assertion with tables with borders when clipped by parent. (#6765, #3752, #7428)
- Windows: fixed an issue where double-click to collapse could be triggered even while another item is active, if the item didn't use the left mouse button. (#7841)
- Misc: Made it accepted to call
SetMouseCursor()
with any out-of-bound value, as a way to allow hacking in custom cursors if desirable. - Fonts: fixed ellipsis
"..."
rendering width miscalculation bug introduced in 1.91.0. (#7976) [@DDeimos] - TextLinkOpenURL(): modified tooltip to display a verb "Open 'xxxx'". (#7885, #7660)
- Backends: SDL2: use
SDL_Vulkan_GetDrawableSize()
when available. (#7967, #3190) [@scribam] - Backends: GLFW+Emscripten: use OSX behaviors automatically when using contrib glfw port. (#7965, #7915) [@ypujante]
- Backends: WebGPU: Added support for optional
IMGUI_IMPL_WEBGPU_BACKEND_DAWN
/IMGUI_IMPL_WEBGPU_BACKEND_WGPU
defines to handle ever-changing native implementations. (#7977, #7969, #6602, #6188, #7523) [@acgaudette]
Changes from 1.91.1 to 1.91.2 in the Docking branch:
- Viewports: fixed an issue where a window manually constrained to the main viewport while crossing over main viewport bounds isn't translated properly. (#7985)
- Backends: SDL2, SDL3, Win32: ensure that
ImGuiPlatformMonitor
list is available after backend Init call. (#7995) - Backends: Win32: fixed direct calls to
platform_io.Platform_SetWindowPos()
/Platform_SetWindowSize()
on windows created by application (typically main viewport). - Backends: Win32: fixed an issue where a viewport destroyed while clicking would hog mouse tracking and temporary lead to incorrect update of HoveredWindow. (#7971)
- Backends: SDL3: added support for
viewport->ParentViewportId
field to support parenting windows at OS level. (#7973, #7989) [@RT2Code]
Gallery
@EddieEldridge: "Using ImGUI and a custom Lua wrapper to enable users to create their own custom GUI elements for the base game and it's modifications in the strategy game Medieval II: Total War" (Demo video,Medieval 2 Engine Overhaul Project).
@untodesu: "I'm back at it with my ImGui-based Game UI for my voxel game - Voxelius This time the game features an almost-full fledged UI with the most recent addition being in-game chat! "
@Green-Sky: "Recently I also started to use DearImGui for a non game program, my messenger (framework frontend) tomato, which has Tox support built-in. It also supports loading plugins."
"With doom as a plugin 😏 :"
@SirMallard: "Used at Roblox as an internal development tool for the engine. Shown during RDC24 (Roblox Developer Conference)."
"Only the engine programmers (Roblox employees) are able to use Dear ImGui. Developers using the Roblox engine do not have access to it, nor the ability to add it to the engine themselves, hence the implementation of Dear ImGui in Roblox Luau, Iris."
@bryanedds:
Nu Game Engine and Omni Blade (steam) from @bryanedds
https://github.com/bryanedds/Nu
"ImGui is the KEY factor that enables our game editor's user-extensibility far beyond what any retained gui can provide in practice. To us, the extensibility built into the ImGui paradigm was and continues to be the primary value proposition. And Dear ImGui specifically is the reason why we didn't even have to consider writing an ImGui ourselves! There's no sufficient way to emphasize how Dear ImGui and its lineage makes straight-forward the otherwise impractical!"
Also see [previous releases details](https://gi...
v1.91.1
1.91.1: moving to ImGuiPlatformIO + many fixes & improvements.
❤️ A few weeks ago was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
✋ 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!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.
In recent year, Dear ImGui has been financially supported by: Aras Pranckevičius / Arkane Lyon / Asobo Studio / Avalanche Studios Group / BeamNG / Esoterica Engine / FUTO / G3Dvu / Lucid Games / Noel Berry / Mobigame / OTOY / Planestate Software / Remedy Entertainment / Sofistik / Supercell / Tuxedo Labs, Valve and many individual contributors. Thank you to FUTO for their recent migrogrant. Thank you for allowing Dear ImGui to stay on its path.
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @cfillion & more for for their help with patches and answers!
Changes (since v1.91.0)
We are moving a few platform related handlers from the ImGuiIO
to the ImGuiPlatformIO
structure.
- If you are using standard backends you'll have nothing to do.
- If you are using a custom and or third-party backend: we kept a legacy redirection but consider updating (you can check by enabling
IMGUI_DISABLE_OBSOLETE_FUNCTIONS
. Most likely the only functions you used that have moved areGetClipboardTextFn
/SetClipboardTextFn()
. - The
ImGuiPlatformIO
structure already existed in the docking branch to support multi-viewports, we are slowly introducing selected parts of it in the master branch in order to (in the future) add features related to e.g. querying monitor/desktop DPI scale.
Breaking Changes:
- BeginChild(): renamed
ImGuiChildFlags_Border
toImGuiChildFlags_Borders
for consistency. [@cfillion]
Kept inline redirection flag (will obsolete). - IO: moved clipboard functions from
ImGuiIO
toImGuiPlatformIO
:io.GetClipboardTextFn
->platform_io.Platform_GetClipboardTextFn
io.SetClipboardTextFn
->platform_io.Platform_SetClipboardTextFn
- in function signatures, changed
void* user_data
toImGuiContext* ctx
for consistency with other functions. Pull your user data fromplatform_io.ClipboardUserData
if used. - as this is will affect all users of custom engines/backends, we are providing proper legacy redirection (will obsolete).
- IO: moved other functions from
ImGuiIO
toImGuiPlatformIO
:io.PlatformOpenInShellFn
->platform_io.Platform_OpenInShellFn
(#7660)io.PlatformSetImeDataFn
->platform_io.Platform_SetImeDataFn
io.PlatformLocaleDecimalPoint
->platform_io.Platform_LocaleDecimalPoint
(#7389, #6719, #2278)- access those via GetPlatformIO() instead of GetIO().
(BecausePlatformOpenInShellFn
andPlatformSetImeDataFn
were introduced extremely recently and
often automatically set by core library and backends, we are exceptionally not maintaining a legacy redirection symbol for those two.)
- Commented the old
ImageButton()
signature obsoleted in 1.89 (~August 2022). (#5533, #4471, #2464, #1390)- old
ImageButton()
usedImTextureId
as item id (created issue with e.g. multiple buttons in same scope, transient texture id values, opaque computation of ID) - new
ImageButton()
requires an explicitconst char* str_id
- old
ImageButton()
had aframe_padding
override argument. - new
ImageButton()
always usestyle.FramePadding
, which you can modify usingPushStyleVar()
/PopStyleVar()
.
- old
Other Changes
- IO: Added
GetPlatformIO()
andImGuiPlatformIO
, pulled from 'docking' branch, which is a centralized spot to connect os/platform/renderer related functions. Clipboard, IME and OpenInShell hooks are moved here. (#7660) - IO, InputText: fixed an issue where typing text in an
InputText()
would defer character processing by one frame, because of the trickling input queue. Reworked interleaved keys<>char trickling to take account for keys known to input characters. (#7889, #4921, #4858) - Windows: adjust default
ClipRect
to better match rendering of thick borders (which are in theory not supported). Compensate for the fact that borders are centered around the windows edge rather than inner. (#7887, #7888 + #3312, #7540, #3756, #6170, #6365) - Made
BeginItemTooltip()
andIsItemHovered()
with delay flag infer an implicit ID (for ID-less items such as Text element) in a way that works when item resizes. (#7945, #1485) - MultiSelect+TreeNode+Drag and Drop: fixed an issue where carrying a drag and drop payload over an already open tree node using multi-select would incorrectly select it. (#7850)
- MultiSelect+TreeNode: default open behavior is
_OpenOnDoubleClick
+_OpenOnArrow
when used in a multi-select context without anyImGuiTreeNode_OpenOnXXX
flags set. (#7850) - Tables: fixes/revert a 1.90 change were outer border would be moved bottom and right by an extra pixel + rework the change so that contents doesn't overlap the bottom and right border in a scrolling table. (#6765, #3752, #7428)
- Tables: fixed an issue resizing columns or querying hovered column/row when using multiple synched instances that are layed out at different X positions. (#7933)
- Tabs: avoid queuing a refocus when tab is already focused, which would have the side-effect of e.g. closing popup on a mouse release. (#7914)
- InputText: allow callback to update buffer while in read-only mode. (imgui_club/#46)
- InputText: fixed an issue programmatically refocusing a multi-line input which was just active. (#4761, #7870)
- TextLink(), TextLinkOpenURL(): change mouse cursor to Hand shape when hovered. (#7885, #7660)
- Tooltips, Drag and Drop: made it possible to override
BeginTooltip()
position while inside a drag and drop source or target: aSetNextWindowPos()
call won't be overridden. (#6973) - PlotHistogram, PlotLines: register item ID and use button behavior in a more idiomatic manner, fixes preventing e.g.
GetItemID()
and other ID-based helper to work. (#7935, #3072) - Style: added
PushStyleVarX()
,PushStyleVarY()
helpers to conveniently modify only one component of a ImVec2 var. - Fonts: made it possible to use
PushFont()
/PopFont()
calls across Begin() calls. (#3224, #3875, #6398, #7903) - Backends:
- Backends: GLFW: added
ImGui_ImplGlfw_Sleep()
helper function because GLFW does not provide a way to do a portable sleep. (#7844) - Backends: GLFW+Emscripten: Use
OpenURL()
from GLFW3 contrib port when available and using the contrib port instead of Emscripten own GLFW3 implementation. (#7647, #7915, #7660) [@ypujante] - Backends: SDL2, SDL3: ignore events of other SDL windows. (#7853) [@madebr, @ocornut]
- Backends: SDL2, SDL3: storing
SDL_WindowID
insideImGuiViewport::PlatformHandle
instead ofSDL_Window*
. - Backends: SDL3: Update for API changes:
SDL_GetGamepads()
memory ownership logic was reverted back by SDL3 on July 27. (#7918, #7898, #7807) [@cheyao, @MattGuerrette] - Backends: GLFW: passing null window to
glfwGetClipboardString()
/glfwSetClipboardString()
since GLFW own tests are doing that and it seems unnecessary. - Backends: SDL2, SDL3, GLFW, OSX, Allegro: update to set function handlers in ImGuiPlatformIO instead of ImGuiIO.
- Backends: GLFW: added
- Examples:
- Examples: GLFW (all), SDL2 (all), SDL3 (all), Win32+OpenGL3: rework examples main loop to handle minimization without burning CPU or GPU by running unthrottled code. (#7844)
- Examples: SDL3: Update for API changes:
SDL_Init()
returns 0 on failure.
Changes from 1.91.0 to 1.91.1 in the Docking branch:
- Viewports: added optional
platform_io.Platform_GetWindowWorkAreaInsets()
hook to allow backends to alter the default per-viewport work-area. (#7823) - Backends: don't report ...
v1.91.0
1.91.0: multi-select, box-select, item flags, links & more
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!
❤️ This is the 100th release of Dear ImGui.
📆 In 12 days I will address the nation regarding upcoming plans for Dear Imgui, general thoughts, and putting more energy on topics that no one cares about such as: fonts, dpi scaling, styling, docking. *EDIT* Read August 15 post: "10 years of Dear ImGui". !
Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..
- Getting Started (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Dear ImGui is funded by your contributions and absolutely 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 you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
In the recent years, Dear ImGui has been financially supported by: Aras Pranckevičius / Arkane Lyon / Asobo Studio / Avalanche Studios Group / BeamNG / Blizzard / Esoterica Engine / G3Dvu / Lucid Games / Noel Berry / Mobigame / OTOY / Planestate Software / Pocketwatch Games / Remedy Entertainment / Sofistik / Supercell / Terrible Toybox / Tuxedo Labs / Wonderland Engine and many individual contributors. Thank you for allowing Dear ImGui to stay on its path.
Welcome to our new sponsors Valve, OTOY, Sofistik !!
Special thanks to @GamingMinds-DanielC, @PathogenDavid, @cfillion & more for for their help with patches and answers!
Some of the multi-selection demos:
Changes
Breaking Changes:
- IO, IME: renamed platform IME hook and added explicit context for consistency and future-proofness.
- old:
io.SetPlatformImeDataFn(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
- new:
io.PlatformSetImeDataFn(ImGuiContext* ctx, ImGuiViewport* viewport, ImGuiPlatformImeData* data);
It is expected that for a vast majority of users this is automatically set by core library and/or platform backend so it won't have any effect.
- old:
- Obsoleted
GetContentRegionMax()
,GetWindowContentRegionMin()
andGetWindowContentRegionMax()
. (information thread: #7838)
You should never need those functions! You can do everything in less a confusing manner by only usingGetCursorScreenPos()
andGetContentRegionAvail()
. Also always consider that if you are usingGetWindowPos()
andGetCursorPos()
you may also be making things unnecessarily complicated.
I repeat: You can do everything withGetCursorScreenPos()
andGetContentRegionAvail()
!GetWindowContentRegionMax().x - GetCursorPos().x
-->GetContentRegionAvail().x
GetWindowContentRegionMax().x + GetWindowPos().x
-->GetCursorScreenPos().x + GetContentRegionAvail().x
// when called from left edge of windowGetContentRegionMax()
-->GetContentRegionAvail() + GetCursorScreenPos() - GetWindowPos()
// right edge in local coordinatesGetWindowContentRegionMax().x - GetWindowContentRegionMin().x
-->GetContentRegionAvail()
// when called from left edge of window
- Item flag changes:
- Obsoleted
PushButtonRepeat()
/PopButtonRepeat()
in favor of using newPushItemFlag()
/PopItemFlag()
withImGuiItemFlags_ButtonRepeat
. Kept inline redirecting functions (will obsolete). - Obsoleted
PushTabStop()
/PopTabStop()
in favor of using newPushItemFlag()
/PopItemFlag()
withImGuiItemFlags_NoTabStop
. Kept inline redirecting functions (will obsolete). - Renamed
ImGuiSelectableFlags_DontClosePopups
toImGuiSelectableFlags_NoAutoClosePopups
for consistency. Kept inline redirecting functions (will obsolete). + Internals: changed/invertedImGuiItemFlags_SelectableDontClosePopup
(default==false) to
ImGuiItemFlags_AutoClosePopups
(default==true), same logic, only inverted behavior. (#1379, #1468, #2200, #4936, #5216, #7302, #7573)
- Obsoleted
- Commented out obsolete
ImGuiModFlags
(renamed toImGuiKeyChord
in 1.89). (#4921, #456) - Commented out obsolete
ImGuiModFlags_XXX
values (renamed toImGuiMod_XXX
in 1.89). (#4921, #456)ImGuiModFlags_Ctrl
->ImGuiMod_Ctrl
,ImGuiModFlags_Shift
->ImGuiMod_Shift
etc.
- Backends: GLFW+Emscripten: Renamed
ImGui_ImplGlfw_InstallEmscriptenCanvasResizeCallback()
toImGui_ImplGlfw_InstallEmscriptenCallbacks()
, with an additionalGLFWWindow*
parameter. (#7647) [@ypujante]
Other Changes
- Added
TextLink()
,TextLinkOpenURL()
hyperlink widgets. (#7660) - IO: added
io.PlatformOpenInShellFn()
handler to open a link/folder/file in OS shell. (#7660)
Added IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS to disable default Windows/Linux/Mac implementation. - IO: added
io.ConfigNavSwapGamepadButtons
to swap Activate/Cancel (A<>B) buttons, to match the typical "Nintendo/Japanese consoles" button layout when using Gamepad navigation. (#787, #5723) - Added
PushItemFlag()
/PopItemFlags()
,ImGuiItemFlags
to modify shared item flags:- Added
ImGuiItemFlags_NoTabStop
to disable tabbing through items. - Added
ImGuiItemFlags_NoNav
to disable any navigation and focus of items. (#787) - Added
ImGuiItemFlags_NoNavDefaultFocus
to disable item being default focus. (#787) - Added
ImGuiItemFlags_ButtonRepeat
to enable repeat on any button-like behavior. - Added
ImGuiItemFlags_AutoClosePopups
to disable menu items/selection auto closing parent popups.
Disabling this was previously possible for Selectable() via a direct flag but not for MenuItem(). (#1379, #1468, #2200, #4936, #5216, #7302, #7573) - This was mostly all previously in imgui_internal.h.
- Added
- Multi-Select: added multi-select API and demos. (#1861, #6518)
- This system implements standard multi-selection idioms (CTRL+mouse click, CTRL+keyboard moves, SHIFT+mouse click, SHIFT+keyboard moves, etc.) with support for clipper (not submitting non-visible items), box-selection with scrolling, and many other details.
- In the spirit of Dear ImGui design, your code owns both items and actual selection data. This is designed to allow all kinds of selection storage you may use in your application (e.g. set/map/hash, intrusive selection, interval trees, up to you).
- The supported widgets are Selectable(), Checkbox(). TreeNode() is also technically supported but... using this correctly is more complicated. You need some sort of linear/random access to your tree, which is suited to advanced trees setups already implementing filters and clipper. We will work toward simplifying our existing demo for trees.
- A helper
ImGuiSelectionBasicStorage
is provided to facilitate getting started in a typical app (likely to suit a majority of users). - Documentation:
- Wiki page https://github.com/ocornut/imgui/wiki/Multi-Select for API overview.
- Demo code + headers are well commented.
- Added
BeginMultiSelect()
,EndMultiSelect()
,SetNextItemSelectionUserData()
. - Added
IsItemToggledSelection()
for use if you need latest selection update during current iteration. - Added
ImGuiMultiSelectIO
andImGuiSelectionRequest
structures:BeginMultiSelect()
andEndMultiSelect()
return aImGuiMultiSelectIO
structure, which is mostly an array ofImGuiSelectionRequest
actions (clear, select all, set range, etc.)- Other fields are helpful when using a clipper, or wanting to handle deletion nicely.
- Added
ImGuiSelectionBasicStorage
helper to store and maintain a selection (optional):- This is similar to if you used e.g. a std::set to store a selection, with all the right glue to honor
ImGuiMultiSelectIO
requests. Most applications can use that.
- This is similar to if you used e.g. a std::set to store a selection, with all the right glue to honor
- Added
ImGuiSelectionExternalStorage
helper to maintain an externally stored selection (optional):- Helpful to easily bind multi-selection to e.g. an array of checkboxes.
- Added
ImGuiMultiSelectFlags
options:ImGuiMultiSelectFlags_SingleSelect
: Disable selecting more than one item. This is available to allow single-selection code to share same code/logic if desired. It essential...
v1.90.9
1.90.9: Last shy version increment before 1.91!
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 (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Consider reading the foreword for v1.90.5. If you contacted me in March consider following up :)
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 you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
In the last years, Dear ImGui has been financially supported by: Aras Pranckevičius / Arkane Lyon / Asobo Studio / Avalanche Studios Group / BeamNG / Blizzard / Esoterica Engine / G3Dvu / Lucid Games / Noel Berry / Mobigame / Planestate Software / Pocketwatch Games / Remedy Entertainment / Supercell / Terrible Toybox / Tuxedo Labs / Wonderland Engine and many individual contributors. Thank you for allowing Dear ImGui to stay on its path.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Changes
Breaking Changes:
- Removed old nested structure: renaming
ImGuiStorage::ImGuiStoragePair
type toImGuiStoragePair
(simpler for many languages). No significant nested type left. - BeginChild: added
ImGuiChildFlags_NavFlattened
as a replacement for the window flagImGuiWindowFlags_NavFlattened
: the feature only ever made sense for BeginChild() calls anyhow. (#7687) [@cfillion]- old:
BeginChild("Name", size, 0, ImGuiWindowFlags_NavFlattened);
- new:
BeginChild("Name", size, ImGuiChildFlags_NavFlattened, 0)
Kept inline redirection flag (will obsolete).
- old:
- Style: renamed tab colors for clarity and consistency with other changes: (#261, #351)
ImGuiCol_TabActive
->ImGuiCol_TabSelected
ImGuiCol_TabUnfocused
->ImGuiCol_TabDimmed
ImGuiCol_TabUnfocusedActive
->ImGuiCol_TabDimmedSelected
Kept inline redirecting enums (will obsolete).
- IO:
io.ClearInputKeys()
(first exposed in 1.89.8) doesn't clear mouse data. Newly addedio.ClearInputMouse()
does. (#4921) - Drag and Drop: renamed
ImGuiDragDropFlags_SourceAutoExpirePayload
toImGuiDragDropFlags_PayloadAutoExpire
. Kept inline redirecting enum (will obsolete). (#1725, #143)
Other Changes
- IO: do not disable
io.ConfigWindowsResizeFromEdges
(which allow resizing from borders and lower-left corner) whenImGuiBackendFlags_HasMouseCursors
is not set by backend. The initial reasoning is that resizing from borders feels better when correct mouse cursor shape change as honored by backends. Keeping this enabling will hopefully increase pressure on third-party backends to setImGuiBackendFlags_HasMouseCursors
and honor changes ofImGui::GetMouseCursor()
value. (#1495) - IO: do not claim
io.WantCaptureMouse=true
on the mouse release frame of a button which was pressed over void/underlying app, which is consistent/needed to allow the mouse up event of a drag over void/underlying app to catch release. (#1392) [@Moka42] - IO: Added
io.ClearInputMouse()
to clear mouse state. (#4921) - Windows: BeginChild(): fixed a glitch when during a resize of a child window which is tightly close to the boundaries of its parent (e.g. with zero
WindowPadding
), the child position could have temporarily be moved around by erroneous padding application. (#7706) - TabBar, Style: added
ImGuiTabBarFlags_DrawSelectedOverline
option to draw an horizontal line over selected tabs to increase visibility. This is used by docking. Added correspondingImGuiCol_TabSelectedOverline
andImGuiCol_TabDimmedSelectedOverline
colors. - Tables: added
TableGetHoveredColumn()
to public API, as an alternative to testing forTableGetColumnFlags(column) & ImGuiTableColumnFlags_IsHovered
on each column. (#3740) - Disabled, Inputs: fixed using
Shortcut()
orSetNextItemShortcut()
within a disabled block bypassing the disabled state. (#7726) - Disabled: Reworked 1.90.8 behavior of
Begin()
not inheriting currentBeginDisabled()
state, to make it that only tooltip windows are temporarily clearing it. (#211, #7640) - Drags: added
ImGuiSliderFlags_WrapAround
flag forDragInt()
,DragFloat()
etc. (#7749) - Drag and Drop:
BeginDragDropSource()
withImGuiDragDropFlags_SourceExtern
sets active id so a multi-frame extern source doesn't interfere with hovered widgets. (#143) - Drag and Drop:
BeginDragDropSource()
withImGuiDragDropFlags_SourceExtern
does not assume a mouse button being pressed. Facilitate implementing cross-context drag and drop. (#143) - Drag and Drop: Added
ImGuiDragDropFlags_PayloadNoCrossContext
/ImGuiDragDropFlags_PayloadNoCrossProcess
flags as metadata to specify that a payload may not be copied outside the context/process by some logic aiming to copy payloads around. - Drag and Drop: Fixes an issue when elapsing payload would be based on last payload frame instead of last drag source frame, which makes a difference if not resubmitting payload every frame. (#143)
- Debug Tools: Metrics/Debugger: Browsing a Storage perform hover lookup on identifier.
- Viewports: Backported
void* ImGuiViewport::PlatformHandle
from docking branch for use by backends. - imgui_freetype: Fixed divide by zero while handling
FT_PIXEL_MODE_BGRA
glyphs. (#7267, #3369) - Backends: OpenGL2, OpenGL3:
ImGui_ImplOpenGL3_NewFrame()
recreates font texture if it has been destroyed byImGui_ImplOpenGL3_DestroyFontsTexture()
. (#7748) [@mlauss2] - Backends: SDL3: Update for API removal of keysym field in
SDL_KeyboardEvent
. (#7728) - Backends: SDL3: Update for
SDL_StartTextInput()
/SDL_StopTextInput()
API changes. (#7735) - Backends: SDL3: Update for
SDL_SetTextInputRect()
API rename. (#7760, #7754) [@maxortner01] - Backends: SDLRenderer3: Update for
SDL_RenderGeometryRaw()
API changes. (SDL#9009). - Backends: Vulkan: Remove
Volk/
fromvolk.h
#include directives. (#7722, #6582, #4854) [@martin-ejdestig] - Examples: SDL3: Remove use of
SDL_HINT_IME_NATIVE_UI
since newSDL_HINT_IME_IMPLEMENTED_UI
values has a more suitable default for our case case. - Examples: GLFW+Vulkan, SDL+Vulkan: handle swap chain resize even without Vulkan returning
VK_SUBOPTIMAL_KHR
, which doesn't seem to happen on Wayland. (#7671) [@AndreiNego, @ocornut]
Changes from 1.90.8 to 1.90.9 related to the Docking branch: (aimed to merge in 1.91)
- Windows, Menus: Fixed an issue where the size of sub-menu in their own viewport would be erroneously clamped to the size of main viewport. (#7730)
- Merged
GetBackgroundDrawList()
andGetBackgroundDrawList(ImGuiViewport* viewport)
api entry points into a same oneGetBackgroundDrawList(ImGuiViewport* viewport = NULL);
- Merged
GetForegroundDrawList()
andGetForegroundDrawList(ImGuiViewport* viewport)
api entry points into a same oneGetForegroundDrawList(ImGuiViewport* viewport = NULL);
- Backends: SDL3: Update for introduction of SDL_GLContext type from void*. (#7701, #7702) [@bcsanches]
- Backends: Win32: Secondary viewports WndProc handler retrieve/set imgui context from the HWND, allowing WndProc dispatch to work in multi-context setups.
Changes from 1.90.8 to 1.90.9 related to the Multi-Select/Range-Select branch: (aimed to merge in 1.91)
https://github.com/ocornut/imgui/wiki/Multi-Select
- MultiSelect: provide RangeDirection to allow selection handler to handler backward shift+click if they wish to make use of that order.
- MultiSelect: Shift+Tab doesn't enable Shift select on landing item.
- MultiSelect: added courtesy
ImGuiMultiSelectFlags_NavWrapX
flag so we can demo this until a nav api is designed. - MultiSelect: added
ImGuiMultiSelectFlags_NoAutoClearOnReselect
. (#7424) - MultiSelect: BoxSelect: (breaking) renamed ImGuiMultiSelectFlags_BoxSelect -> ImGuiMultiSelectFlags_BoxSelect2d. Which include not assuming one flag imply the other.
- MultiSelect: BoxSelect: uses
SetActiveIdUsingAllKeyboardKeys()
to avoid nav interference, much like most drag operations. - MultiSelect: BoxSelect: made Escape disable box-select and clear selection.
- MultiSelect: ImGuiSelectionBasicStorage: rework to accept massive selections requests without fl...
v1.90.8
1.90.8: various fixes, scroll by page, hide/omit zero values
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 (~25 lines in an existing app)
- Useful Extensions/Widgets
- Software using Dear ImGui
- Bindings & Backends
- and more! 👌
Consider reading the foreword for v1.90.5. If you contacted me in March consider following up :)
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 you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
In the last years, Dear ImGui has been financially supported by: Aras Pranckevičius / Arkane Lyon / Asobo Studio / Avalanche Studios Group / BeamNG / Blizzard / Esoterica Engine / G3Dvu / Lucid Games / Noel Berry / Mobigame / Planestate Software / Pocketwatch Games / Remedy Entertainment / Supercell / Terrible Toybox / Tuxedo Labs / Wonderland Engine and many individual contributors. Thank you for allowing Dear ImGui to stay on its path.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Changes
Breaking Changes:
- Reordered various
ImGuiInputTextFlags
values. This should NOT be breaking unless you are using generated headers that have values not matching the main library. - Removed
ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft
from imgui.h, was mostly unused and misleading.
Other Changes
- Inputs: Fixed
IsMouseClicked(..., repeat=true);
broken in 1.90.7 on 2024/05/22. (due to an internal api parameter swap, repeat wouldn't be honored and ownership would be accidentally checked even though this api is meant to not
check ownership). (#7657) [@korenkonder] - Windows: fixed altering FramePadding mid-frame not correctly affecting logic responsible for honoring
io.ConfigWindowsMoveFromTitleBarOnly
. (#7576, #899) - Scrollbar: made scrolling logic more standard: clicking above or below the grab scrolls by one page, holding mouse button repeats scrolling. (#7328, #150)
- Scrollbar: fixed miscalculation of vertical scrollbar visibility when required solely by the presence of an horizontal scrollbar. (#1574)
- InputScalar, InputInt, InputFloat: added
ImGuiInputTextFlags_ParseEmptyRefVal
to parse an empty field as zero-value. (#7305) [@supermerill, @ocornut] - InputScalar, InputInt, InputFloat: added
ImGuiInputTextFlags_DisplayEmptyRefVal
to display a zero-value as empty. (#7305) [@supermerill, @ocornut] - Popups: fixed an issue preventing to close a popup opened over a modal by clicking over void (it required clicking over the visible part of the modal). (#7654)
- Tables: fixed an issue where ideal size reported to parent container wouldn't correctly take account of inner scrollbar, affecting potential auto-resize of parent container. (#7651)
- Tables: fixed a bug where after disabling the ScrollY flag for a table, previous scrollbar width would be accounted for. (#5920)
- Combo: simplified Combo() API uses a list clipper (due to its api it wasn't previously trivial before we added
clipper.IncludeItemByIndex()
function). - Disabled: nested tooltips or other non-child window within a
BeginDisabled()
block disable the disabled state. (#211, #7640) - Misc: made
ImGuiDir
andImGuiSortDirection
stronger-typed enums. - Backends: SDL3: Update for
SDL_SYSTEM_CURSOR_xxx
api renames. (#7653)
Changes from 1.90.7 to 1.90.8 related to the Multi-Select/Range-Select branch: (aimed to merge in 1.91)
https://github.com/ocornut/imgui/wiki/Multi-Select
- RangeSelect/MultiSelect: Box-Select: when dragging from void, first hit item sets NavId so navigation can resume from that spot.
- RangeSelect/MultiSelect: (breaking) Added optional 'items_count' parameter to BeginMultiSelect(). Will enable extra features, and remove equivalent parameter from
ImGuiSelectionBasicStorage::ApplyRequests()
. - RangeSelect/MultiSelect: (breaking) renamed
ImGuiMultiSelectFlags_BoxSelect
->ImGuiMultiSelectFlags_BoxSelect1d
,ImGuiMultiSelectFlags_BoxSelect2d
->ImGuiMultiSelectFlags_BoxSelect
. - RangeSelect/MultiSelect: (breaking) ImGuiSelectionBasicStorage: renamed
AdapterData
toUserData
. - RangeSelect/MultiSelect: ImGuiSelectionBasicStorage: added
GetStorageIdFromIndex()
method indirection to be easier on the reader. - RangeSelect/MultiSelect: ImGuiSelectionBasicStorage: fixed
Swap()
helper. - RangeSelect/MultiSelect: added ImGuiSelectionExternalStorage helper. Simplify checkboxes/bool demo.
- RangeSelect/MultiSelect: Box-select: fixes for checkboxes support.
- RangeSelect/MultiSelect: mark parent child window as navigable into, with highlight visible when pressing Escape.
Gallery
@pinojojo: "UI for my project on scripting-based 3d printing software. Using ImGuiColorTextEdit and some customized widgets with basic ImGui assets. "
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. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
v1.90.7
1.90.7: Shortcuts, input routing, OSX mods & ctrl+left click.
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, Useful Extensions Gallery, Software using Dear ImGui, Bindings & Backends and more! 👌
Consider reading the foreword for v1.90.5. If you contacted me in March consider following up :)
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 you need an excuse to pay, you may buy licenses for Test Engine and that will contribute to fund Dear ImGui.
In the last years, Dear ImGui has been financially supported by: Aras Pranckevičius / Arkane Lyon / Asobo Studio / Avalanche Studios Group / BeamNG / Blizzard / Esoterica Engine / G3Dvu / Lucid Games / Noel Berry / Mobigame / Planestate Software / Pocketwatch Games / Remedy Entertainment / Supercell / Terrible Toybox / Tuxedo Labs / Wonderland Engine and many individual contributors. Thank you for allowing Dear ImGui to stay on its path.
Special thanks to @cfillion, @GamingMinds-DanielC, @PathogenDavid & more for for their help with patches and answers!
Changes
Breaking Changes:
- Inputs: on macOS X, Cmd and Ctrl keys are now automatically swapped by
io.AddKeyEvent()
, as this naturally align with how macOS X uses those keys. (#2343, #4084, #5923, #456)- Effectively it means that e.g.
ImGuiMod_Ctrl | ImGuiKey_C
is a valid idiomatic shortcut for both Windows and Mac style users. - It shouldn't really affect your code unless you had explicit/custom shortcut swapping in place for macOS X apps in your input logic.
- Removed
ImGuiMod_Shortcut
which was previously dynamically remapping to Ctrl or Cmd/Super. It is now unnecessary to specific cross-platform idiomatic shortcuts. Kept symbols redirectingImGuiMod_Shortcut
toImGuiMod_Ctrl
(will obsolete).
- Effectively it means that e.g.
- Commented out obsolete symbols renamed in 1.88 (May 2022):
CaptureKeyboardFromApp()
->SetNextFrameWantCaptureKeyboard()
CaptureMouseFromApp()
->SetNextFrameWantCaptureMouse()
- Backends:
SDL_Renderer2
/SDL_Renderer3
:ImGui_ImplSDLRenderer2_RenderDrawData()
andImGui_ImplSDLRenderer3_RenderDrawData()
now takes aSDL_Renderer*
parameter. This was previously overlooked from the API but it will allow eventual support for multi-viewports.
Extra Breaking changes IF AND ONLY IF you were using imgui_internal.h versions of Shortcut()
or owner-aware versions of IsKeyPressed()
, IsKeyChordPressed()
, IsMouseClicked()
prior to this version.
(Open for details)
- Inputs (Internals): Renamed
ImGuiKeyOwner_None
toImGuiKeyOwner_NoOwner
, to make use more explicit and reduce confusion with the fact it is a non-zero value and cannot be a default. - Inputs (Internals): Renamed symbols global routes:
- Renamed
ImGuiInputFlags_RouteGlobalLow
->ImGuiInputFlags_RouteGlobal
(this is the suggested global route) - Renamed
ImGuiInputFlags_RouteGlobal
->ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteOverFocused
- Renamed
ImGuiInputFlags_RouteGlobalHigh
->ImGuiInputFlags_RouteGlobal | ImGuiInputFlags_RouteOverFocused | ImGuiInputFlags_RouteOverActive
- Renamed
- Inputs (Internals):
Shortcut(),
SetShortcutRouting()`: swapped last two parameters order in function signatures:- Before:
Shortcut(ImGuiKeyChord key_chord, ImGuiID owner_id = 0, ImGuiInputFlags flags = 0);
- After:
Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags = 0, ImGuiID owner_id = 0);
- Before:
- Inputs (Internals): owner-aware versions of
IsKeyPressed()
,IsKeyChordPressed()
,IsMouseClicked()
: swapped last two parameters order in function signatures:- Before:
IsKeyPressed(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags = 0);
- After:
IsKeyPressed(ImGuiKey key, ImGuiInputFlags flags, ImGuiID owner_id = 0);
- Before:
IsMouseClicked(ImGuiMouseButton button, ImGuiID owner_id, ImGuiInputFlags flags = 0);
- After:
IsMouseClicked(ImGuiMouseButton button, ImGuiInputFlags flags, ImGuiID owner_id = 0);
- Before:
- For several reasons those changes makes sense. They were all made before making some of those API public. Only past users of imgui_internal.h with the extra parameters will be affected. Added asserts for valid flags in various functions to detect some misuses, BUT NOT ALL.
Other Changes
- Windows:
BeginChild()
: fixed visibility of fully clipped child windows and tables from Test Engine. - Windows:
BeginChild()
: fixed auto-fit calculation when using either (not both)ResizeX
/ResizeY
and double-clicking on a border. Calculation incorrectly didn't always account for scrollbar as it assumed the other axis would also be auto-fit. (#1710) - Inputs: added shortcut and routing system in public API. (#456, #2637)
- Most of the infrastructure have been in place for a few versions. Recent changes/fixes allowed to make it public.
- The general idea is that several callers may register interest in a shortcut, and only one owner gets it.
- in Parent: call Shortcut(Ctrl+S) // When Parent is focused, only Parent gets the shortcut.
- in Child1: call Shortcut(Ctrl+S) // When Child1 is focused, only Child1 gets the shortcut (Child1 overrides Parent shortcuts)
- in Child2: no call // When Child2 is focused, only Parent gets the shortcut.
- The whole system is order independent, so if Child1 makes its calls before Parent, results will be identical. This is an important property as it facilitate working with foreign code or larger codebase.
- Added
Shortcut()
function. e.g. UsingImGui::Shortcut(ImGuiMod_Ctrl | ImGuiKey_C)
with default policy:- checks that CTRL+C is pressed,
- and that current window is in focus stack,
- and that no other requests for CTRL+C have been made from higher priority locations (e.g. deeper in the window/item stack).
- Added
SetNextItemShortcut()
to set a shortcut to locally or remotely press or activate an item (depending on specified routing policy: usingImGuiInputFlags_RouteGlobal
the item shortcut may be executed even if its window is not in focus stack). Items like buttons are not fully activated, in the sense that they get pressed but another active item, e.g. InputText() won't be deactivated. - Added routing policies for
Shortcut()
,SetNextItemShortcut()
: (#456, #2637)ImGuiInputFlags_RouteFocused
: focus stack route (default)ImGuiInputFlags_RouteActive
: only route to active itemImGuiInputFlags_RouteGlobal
: route globally, unless a focus route claim shame shortcut.ImGuiInputFlags_RouteAlways
: no routing submission, no routing check.
- Added other shortcut/routing options: (#456, #2637)
ImGuiInputFlags_Repeat
: for use by Shortcut() and by upcoming rework of various input functions (which are still internal for now).ImGuiInputFlags_Tooltip
: forSetNextItemShortcut()
to show a tooltip when hovering item.ImGuiInputFlags_RouteOverFocused
: global route takes priority over focus route.ImGuiInputFlags_RouteOverActive
: global route takes priority over active item.ImGuiInputFlags_RouteUnlessBgFocused
: global route disabled if no imgui window focused.ImGuiInputFlags_RouteFromRootWindow
: route evaluated from the point of view of root window rather than current window.
- Inputs: (OSX) Fixes variety of code which inconsistently required using Ctrl instead of Cmd.
- Inputs: (OSX) Ctrl+Left Click alias as a Right click. (#2343) [@haldean, @ocornut]
- Inputs: Fixed
ImGui::GetKeyName(ImGuiKey_None)
from returning "N/A" or "None" depending on value of IMGUI_DISABLE_OBSOLETE_KEYIO. It always returns "None". - Nav: fixed holding Ctrl or gamepad L1 from not slowing down keyboard/gamepad tweak speed. Broken during a refactor refactor for 1.89. Holding Shift/R1 to speed up wasn't broken.
- Tables: fixed cell background of fully clipped row overlapping with header. (#7575, #7041) [@prabuinet]
- Demo: Added "Inputs & Focus -> Shortcuts" section. (#456, #2637)
- Demo: Documents: Added shortcuts and r...