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 monitors with DpiScale of 0, which seemed to be reported for virtual monitors instead by accessibility drivers. (#7902) [@nicolasnoble, @ocornut]
- Backends: SDL2, SDL3: using
SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN
to support theImGuiViewportFlags_NoFocusOnAppearing
flag, instead of using a Win32-specific hack. (#7896) [@RT2Code]
Gallery
IKEA are using Dear ImGui: IKEA STRÅLA Editor (internal IKEA tool)
https://www.youtube.com/watch?v=Kup0d4Te3n0
Nintendo EPD are using Dear ImGui: Legend of Zelda: Tears of the Kingdom
Slide from CEDEC2024: https://x.com/R_Nikaido/status/1827252823526142412
@Hoek67: Goblin 2D+ Engine. _"Been using Dear ImGui for a few years now and it has made a huge difference to my semi-stalled DX11 game/rendering engine. With it I was able to build a large debug suite that allowed me to see "inside" the engine in real-time and nail down some hard to find issues/bugs. [...]"
@StrikerX3: "Here are some screenshots of the debugging tools on my Nintendo DS emulator."
(see more)
@ronak69: "4 months ago I made an unofficial Dear ImGui frontend for the Ladybird web browser."
Repo: https://codeberg.org/ronak69/dear-ladybird
Demo gif: https://serenityos.social/@ronak69/112282372320979700
gigi released by SEED/electronicarts
"A framework for rapid prototyping and development of real-time rendering techniques."
Maintained by @Atrix256
https://github.com/electronicarts/gigi
https://www.ea.com/seed/news/gigi <- Announcement page
https://www.youtube.com/watch?v=qknK-tahICE <- 25 mins tutorial video
HAVOK (navigation debugger)
https://x.com/momo_zzz/status/1826490841147605370
Posted by @fchen99:
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 weeks 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.