v1.89.7
1.89.7: Summer release! 🌞
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
FAQ: https://www.dearimgui.com/faq/
Getting Started: https://github.com/ocornut/imgui/wiki/Getting-Started
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Getting Started and Useful Extensions Gallery! 👌
Thank you! ❤️
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- Planestate Software
- Pocketwatch Games
- G3DVu
- Asobo Studio
- And more Individual contributions.
Huge thank you to all past and present supporters!
Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Dear ImGui is funded by your contributions and needs them right now. We can regular B2B Invoicing.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
Changes
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the range-select feature in it, but it's not done... But there are about 540 lines of changelog between 1.89 and 1.89.7.
Breaking Changes:
- Moved
io.HoverDelayShort
/io.HoverDelayNormal
tostyle.HoverDelayShort
/style.HoverDelayNormal
. As the fields were added in 1.89 and expected to be left unchanged by most users, or only tweaked once during app initialization, we are exceptionally accepting the breakage. Majority of users are likely to not even notice. - Overlapping items: (#6512, #3909, #517)
- Obsoleted
SetItemAllowOverlap()
: it didn't and couldn't work reliably since 1.89 (2022-11-15), and relied on ambiguously defined design. UseSetNextItemAllowOverlap()
before item instead. - Added
SetNextItemAllowOverlap()
(called before an item) as a replacement for usingSetItemAllowOverlap()
(called after an item). This is roughly equivalent to using the legacySetItemAllowOverlap()
call (public API) +ImGuiButtonFlags_AllowOverlap
(internal). - Renamed 'ImGuiTreeNodeFlags_AllowItemOverlap
to
ImGuiTreeNodeFlags_AllowOverlap` for consistency. - Renamed
ImGuiSelectableFlags_AllowItemOverlap
toImGuiSelectableFlags_AllowOverlap
for consistency. - Kept redirecting enums (will obsolete).
- Obsoleted
Other Changes:
- Tooltips/IsItemHovered() related changes:
- Tooltips: Added
SetItemTooltip()
andBeginItemTooltip()
helper functions.
They are shortcuts for the common idiom of usingIsItemHovered()
.SetItemTooltip("Hello")
==if (IsItemHovered(ImGuiHoveredFlags_Tooltip)) { SetTooltip("Hello"); }
BeginItemTooltip()
==IsItemHovered(ImGuiHoveredFlags_Tooltip) && BeginTooltip()
The newly addedImGuiHoveredFlags_Tooltip
is meant to facilitate standardizing mouse hovering delays and rules for a given application. The previously common idiom of using 'if (IsItemHovered()) { SetTooltip(...); }' won't use delay or stationary test.
- IsItemHovered: Added
ImGuiHoveredFlags_Stationary
to require mouse being stationary when hovering a new item. Addedstyle.HoverStationaryDelay
(~0.15 sec). Once the mouse has been stationary once the state is preserved for same item. (#1485) - IsItemHovered: Added
ImGuiHoveredFlags_ForTooltip
as a shortcut for pulling flags fromstyle.HoverFlagsForTooltipMouse
orstyle.HoverFlagsForTooltipNav
depending on active inputs. (#1485)style.HoverFlagsForTooltipMouse
defaults toImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort
.style.HoverFlagsForTooltipNav
defaults toImGuiHoveredFlags_NoSharedDelay | ImGuiHoveredFlags_DelayNormal
.
- Tooltips: Tweak default offset for non-drag and drop tooltips so underlying items isn't covered as much. (Match offset for drag and drop tooltips)
- IsItemHovered: Tweaked default value of
style.HoverDelayNormal
from 0.30 to 0.40, Tweaked default value ofstyle.HoverDelayShort
from 0.10 to 0.15. (#1485) - IsItemHovered: Added
ImGuiHoveredFlags_AllowWhenOverlappedByWindow
to ignore window-overlap only. OptionImGuiHoveredFlags_AllowWhenOverlapped
now expand into a combination of both_AllowWhenOverlappedByWindow
+_AllowWhenOverlappedByItem
, matching old behavior.
- Tooltips: Added
- Overlapping items: (#6512, #3909, #517)
- Most item types should now work with
SetNextItemAllowOverlap()
. (#6512, #3909, #517) - Fixed first frame of an overlap highlighting underlying item if previous frame didn't hover anything.
- IsItemHovered: Changed to return false when querying an item using AllowOverlap mode which is being overlapped. Added
ImGuiHoveredFlags_AllowWhenOverlappedByItem
to opt-out. (#6512, #3909, #517) - Selectable, TreeNode: When using
ImGuiSelectableFlags_AllowOverlap
/ImGuiTreeNodeFlags_AllowOverlap
and holding item held, overlapping widgets won't appear as hovered. (#6512, #3909)
- Most item types should now work with
- IsWindowHovered: Added support for
ImGuiHoveredFlags_Stationary
. - IsWindowHovered, IsItemHovered: Assert when passed any unsupported flags.
- Tables: Fixed a regression in 1.89.6 leading to the first column of tables with either ScrollX or ScrollY flags from being impossible to resize. (#6503)
- CollapsingHeader/TreeNode: Fixed text padding when using _Framed+_Leaf flags. (#6549) [@BobbyAnguelov]
- InputText: Fixed not returning true when buffer is cleared while using the
ImGuiInputTextFlags_EscapeClearsAll
flag. (#5688, #2620) - InputText: Fixed a crash on deactivating a ReadOnly buffer. (#6570, #6292, #4714)
- InputText:
ImGuiInputTextCallbackData::InsertChars()
accept (NULL,NULL) range, in order to conform to common idioms (e.g. passing .data(), .data() + .size() from a null string). (#6565, #6566, #3615) - Combo: Made simple/legacy Combo() function not returns true when picking already selected item. This is consistent with other widgets. If you need something else, you can use
BeginCombo()
. (#1182) - Clipper: Rework inner logic to allow functioning with a zero-clear constructor. This is order to facilitate usage for language bindings (e.g cimgui or dear_binding) where user may not be calling a constructor manually. (#5856)
- Drag and Drop: Apply default behavior of drag source not reporting itself as hovered at lower-level, so DragXXX, SliderXXX, InputXXX, Plot widgets are fulfilling it. (Behavior doesn't apply when
ImGuiDragDropFlags_SourceNoDisableHover
is set). - Modals: In the case of nested modal, made sure that focused or appearing windows are moved below the lowest blocking modal (rather than the highest one). (#4317)
- GetKeyName(): Fixed assert with
ImGuiMod_XXX
values whenIMGUI_DISABLE_OBSOLETE_KEYIO
is set. - Debug Tools: Added
io.ConfigDebugIniSettings
option to save .ini data with extra comments. Currently mainly for inspecting Docking .ini data, but makes saving slower. - Demo: Added more developed
Widgets->Tooltips
section. (#1485) - Backends: OpenGL3: Fixed support for
glBindSampler()
backup/restore on ES3. (#6375, #6508) [@jsm174] - Backends: OpenGL3: Fixed erroneous use
glGetIntegerv(GL_CONTEXT_PROFILE_MASK)
on contexts lower than 3.2. (#6539, #6333) [@krumelmonster] - Backends: Vulkan: Added optional support for
VK_KHR_dynamic_rendering
(Vulkan 1.3+) in the backend, for applications using it. User needs to setinit_info->UseDynamicRendering = true
andinit_info->ColorAttachmentFormat
. RenderPass becomes unused. (#5446, #5037) [@spnda, @cmarcelo] - Backends: GLFW: Accept
glfwGetTime()
not returning a monotonically increasing value. This seems to happens on some Windows setup when peripherals disconnect, and is likely to also happen on browser+Emscripten. Matches similar 1.89.4 fix in SDL backend. (#6491) - Examples: Win32+OpenGL3: Changed
DefWindowProc()
toDefWindowProcW()
to match other examples
and support the example app being compiled without UNICODE. (#6516, #5725, #5961, #5975) [@yenixing]
Changes from 1.89.6 to 1.89.7 related to the docking branch (multi-viewport and docking features):
- Viewports+Docking: Fixed extraneous viewport+platform-window recreation in various combination of showing or hiding windows, docking with/without split, undocking. While with some backends and without OS decorations, some extraneous window recreation were visibly not noticeable, they would typically become noticeable when enabling OS decorations on those windows (e.g. Windows title bar fade-in/animation).
- Viewports: Closing a viewport via OS/platform means (e.g. OS close button or task-bar menu), mark all windows in this viewport as closed.
- Docking: Fixed one-frame flickering on reappearing windows binding to a dock node where a later-submitted window was already bound.
- Docking: Fixed dragging from title-bar empty space (regression from 1.88 related to keeping ID alive when calling low-level
ButtonBehavior()
directly). (#5181, #2645) - Docking: [Internal]
DockBuilderDockWindow()
API calls don't clear docking order if the target node is same as existing one. - Backends: Win32: Added support for changing
ParentViewportID
after viewport creation.
Changes from 1.89.6 to 1.89.7 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):
- RangeSelect/MultiSelect: (BREAKING) In ImGuiMultiSelectIO, renamed "RangeSrc" -> "RangeSrcItem", "RangeDst" -> "RangeDstItem". "RangeValue" -> "RangeSelected". This is designed to make things more consistent with upcoming features and polish/merge of the branch.
- RangeSelect/MultiSelect: Removed the need for polling
IsItemToggledSelection()
and toggling per-item selection. This can now be completely handled by the BeginMultiSelect() and EndMultiSelect() requests. - RangeSelect/MultiSelect: Removed
ImGuiMultiSelectFlags_NoUnselect
because I currently can't find use for this specific design. - RangeSelect/MultiSelect: Update various comments. Simplified/tidied up internal code.
New exciting projects!
Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear ImGui Automation/Test Engine & Test Suite
https://github.com/ocornut/imgui_test_engine
Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui).
https://github.com/dearimgui/dear_bindings
Gallery
Below a selection of screenshots from Gallery threads...
@eleriaqueen: "WIP modding tool for a somewhat retro game made with my limited programming knowledge and skills."
@alipbcs: "I used ImGui, ImPlot, and imnodes in my hobby real-time renderer. Full source code available on GitHub."
@lucabart97: TII Unimore Racing, a University of Modena and Reggio Emilia team.
"This is our perception stack completing a full lap in Autodromo Nazionale Monza using LiDAR localization only during Indy Autonomous Challenge."
Video:
"Spotted in S.T.A.L.K.E.R. 2: Heart of Chornobyl."
@sarchar: "RDS (Retro Disassembler Studio) aims to be a complete disassembler tool for retro systems. Currently, the only supported system is the Nintendo Entertainment System (NES) but others are planned for the future."
https://github.com/sarchar/RetroDisassemblerStudio
@qoala101: "PONC is the graphical tool used by telecommunication engineers to design, manage, and optimize Passive Optical Network layouts."
https://github.com/qoala101/ponc
@gboisse: "Some shots from the ImGui-based editor we used to produce our Revision 2023 demo: Reality Check"
https://www.pouet.net/prod.php?which=94177
"Dear ImGui has been amazing from the start and remains a pleasure to work with 🙂"
@tildearrow: "Furnace - a multi-system chiptune tracker with support for many chips and a customizable interface."
https://github.com/tildearrow/furnace
@aiekick "Just for fun. see my WIP ToolBar :)"
ImCoolbar: https://github.com/aiekick/ImCoolBar
@RorySoh: "Nin Online is an MMORPG that started development in 2013 and launched in 2017 built with a Visual Basic 6 engine. In recent years, we ported the game to C# with .NET Framework. Now, we're using .NET 6 and all our UI systems have been replaced with just ImGui (We had 6 separate systems, including WinForms for our in-game editor suite). The HUD and every UI piece in the screen is also ImGui. There's actually a lot more cool stuff in the game, like animated UI elements that are done in ImGui. Performance has been amazing too." [..] "Thank you @ocornut and all the contributors for ImGui, it's amazing."
https://www.ninonline.org
Here are more screenshots! https://imgur.com/a/6urSiYC
@pixtur Tooll v3.6
www.tooll.io
@ta-david-yu "I made an editor for my ECS game engine - DYEngine. I can't live without Dear ImGui anymore, it's so useful. " Here is a feature highlight video: https://youtu.be/ZrwCcynemSA
Also see previous releases details.
Note that GitHub are now clamping release notes sometimes really badly, click on a header/title to read full notes