Releases: ocornut/imgui
v1.89.8
1.89.8: August 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
- Terrible Toybox
- 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 do 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, v1.89.7. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the range-select feature in it, but it's not done... But there are about 600 lines of changelog between 1.89 and 1.89.8.
Breaking Changes:
- IO: Obsoleted
io.ClearInputCharacters()
(added in 1.47) as it now ambiguous and often incorrect/misleading considering the existence of a higher-level input queue. This is automatically cleared byio.ClearInputsKeys()
. (#4921) - ImDrawData:
CmdLists[]
array is now owned, changed fromImDrawList**
toImVector<ImDrawList*>
. Majority of users shouldn't be affected, but you cannot compare to NULL nor reassign manually anymore. Instead useAddDrawList()
. Allocation count are identical. (#6406, #4879, #1878)
Other Changes:
- Fonts:
ImFontConfig::OversampleH
now defaults to 2 instead of 3, since the quality increase is largely minimal. - Fonts, imgui_freetype: Added support to render OpenType SVG fonts using lunasvg. Requires enabling
IMGUI_ENABLE_FREETYPE_LUNASVG
along withIMGUI_ENABLE_FREETYPE
, and providing headers/libraries for lunasvg. (#6591, #6607) [@sakiodre] ImDrawData: CmdLists[]
array is now an ImVector<> owned by ImDrawData rather than a pointer to internal state.- This makes it easier for user to create their own or append to an existing draw data. Added a
ImDrawData::AddDrawList()
helper function to do that. (#6406, #4879, #1878) - This makes it easier to perform a deep-swap instead of a deep-copy, as array ownership is now clear. (#6597, #6475, #6167, #5776, #5109, #4763, #3515, #1860)
- Syntax and allocation count are otherwise identical.
- This makes it easier for user to create their own or append to an existing draw data. Added a
- Fixed CTRL+Tab dimming background assert when target window has a callback in the last
ImDrawCmd
. (#4857, #5937) - IsItemHovered: Fixed
ImGuiHoveredFlags_ForTooltip
for Keyboard/Gamepad navigation, got broken prior to 1.89.7 due to an unrelated change making flags conflict. (#6622, #1485) - InputText: Fixed a case where deactivation frame would write to underlying buffer or call
CallbackResize
although unnecessary, in a frame where the return value was false. - Tables: fixed
GetContentRegionAvail().y
report not taking account of lower cell padding or of usingImGuiTableFlags_NoHostExtendY
. Not taking it into account would make the idiom of creating vertically bottom-aligned content (e.g. a child window) inside a table make the parent window erroneously have a scrollbar. (#6619) - Tables: fixed calculation of multi-instance shared decoration/scrollbar width of scrolling tables, to avoid flickering width variation when resizing down a table hosting a child window. (#5920, #6619)
- Scrollbar: layout needs to take account of window border size, so a border size will slightly reduce scrollbar size. Generally we tried to make it that window border size has no incidence on layout but this can't work with thick borders. (#2522)
- IO: Added
io.ClearEventsQueue()
to clear incoming inputs events. (#4921)
May be useful in conjunction withio.ClearInputsKeys()
if you need to clear both current inputs state and queued events (e.g. when using blocking native dialogs such as Windows's ::MessageBox() or ::GetOpenFileName()). - IO: Changed
io.ClearInputsKeys()
specs to also clear current frame character buffer (what now obsoletedio.ClearInputCharacters()
did), as this is effectively the desirable behavior. - Misc: Added
IMGUI_DISABLE_STB_SPRINTF_IMPLEMENTATION
config macro to disable stb_sprintf implementation when using IMGUI_USE_STB_SPRINTF. (#6626) [@septag] - Misc: Avoid stb_textedit.h reincluding string.h while in a namespace, which messes up with building with Clang Modules. (#6653, #4791) [@JohelEGP]
- Demo: Better showcase use of
SetNextItemAllowOverlap()
. (#6574, #6512, #3909, #517) - Demo: Showcase a few more
InputText()
flags. - Backends: Made all backends sources files support global
IMGUI_DISABLE
. (#6601) - Backends: GLFW: Revert ignoring mouse data on
GLFW_CURSOR_DISABLED
as it can be used differently. User may setImGuiConfigFlags_NoMouse
if desired. (#5625, #6609) [@scorpion-26] - Backends: WebGPU: Update for changes in Dawn. (#6602, #6188) [@williamhCode]
- Examples: Vulkan: Creating minimal descriptor pools to fit only what is needed by example. (#6642) [@SaschaWillem]
Changes from 1.89.7 to 1.89.8 related to the docking branch (multi-viewport and docking features):
- Docking, Style: resizing separators use same colors as window borders (
ImGuiCol_Border
) for consistency. With default styles it doesn't make a big difference. (#2522) [@rmitton] In the future if we promote using thick value for inner/outer docking padding we may need to introduce new colors for it. - Docking: added
style.DockingSeparatorSize
,ImGuiStyleVar_DockingSeparatorSize
. Now also scaled bystyle.ScaleAllSizes()
. (#3481, #4721, #2522) [@PossiblyAShrub, @wobbier] - Docking: fixed rendering of docked-window scrollbar above outer border. (#2522)
Changes from 1.89.7 to 1.89.8 related to the range-select branch:
This is hopefully the last batch of breaking changes before merging this in 1.90:
- RangeSelect/MultiSelect: (BREAKING)
BeginMultiSelect()
doesn't need two last params maintained by users. Moving some storage from user to core. - RangeSelect/MultiSelect: Added fields in
ImGuiMultiSelectIO
to facilitate implementing deletion while providing correct scrolling/focus. - RangeSelect/MultiSelect: Added multi-select deletion demo.
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...
@ThFriedrich: riCOM is a software used in electron microscopy. It interfaces with direct electron cameras for the real-time creation of atomic resolution microscopy images from 4-dimensional data.
@msnh2012: A custom application. (TCP debugger)
@sakiodre : I'm developing a ghidra decompiler plugin [...] ended up writing my own editor from scratch.
@FuXiii: Online Shader Compiler
Also see previous releases details.
Note that GitHub are now clamping release notes sometimes really badly, click on a header/title ...
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...
v1.89.6
1.89.6: May release! (*)
(*) Technically it is still May!
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
FAQ: https://www.dearimgui.com/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- G3DVu
- Asobo Studio
- Tuxedo Labs
- 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.
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. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
I have been stubbornly deferring tagging 1.90 for while because I wanted to include the range-select feature in it, but it's not done... But there are nearly 500 lines of changelog between 1.89 and 1.89.6.
Breaking Changes:
- Clipper: Commented out obsolete redirection constructor which was marked obsolete in 1.79:
ImGuiListClipper(int items_count, float items_height)
--> UseImGuiListClipper() + clipper.Begin()
.
- Clipper: Renamed
ForceDisplayRangeByIndices()
toIncludeRangeByIndices()
, kept inline redirection function (introduced in 1.86 and rarely used). (#6424, #3841) - Commented out obsolete/redirecting functions that were marked obsolete more than two years ago:
ListBoxHeader()
-> useBeginListBox()
ListBoxFooter()
-> useEndListBox()
- Note how two variants of
ListBoxHeader()
existed. Check commented versions in imgui.h for refeence.
- Backends: SDL_Renderer: Renamed 'imgui_impl_sdlrenderer.h/cpp' to 'imgui_impl_sdlrenderer2.h/cpp',
in order to accomodate for upcoming SDL3 and change in its SDL_Renderer API. (#6286) - Backends: GLUT: Removed call to
ImGui::NewFrame()
fromImGui_ImplGLUT_NewFrame()
. It needs to be called from the main app loop, like with every other backends. (#6337) [@GereonV]
Other Changes:
- Window: Fixed resizing from upper border when
io.ConfigWindowsMoveFromTitleBarOnly
is set. (#6390) - Tables: Fixed a small miscalculation in
TableHeader()
leading to an empty tooltip showing when a sorting column has no visible name. (#6342) [@lukaasm] - Tables: Fixed command merging when compiling with VS2013 (one array on stack was not initialized on VS2013. Unsure if due to a bug or UB/standard conformance). (#6377)
- InputText: Avoid setting
io.WantTextInputNextFrame
during the deactivation frame. (#6341) [@lukaasm] - Drag, Sliders: if the format string doesn't contain any
%
, CTRL+Click to input text will use the default format specifier for the type. Allow display/input of raw value when using "enums" patterns (display label instead of value) + allow using when value is hidden. (#6405) - Nav: Record/restore preferred position on each given axis after a movement on that axis, then score movement on the other axis using this as a bias. This allows going up and down between e.g. a large header spanning horizontal space and three-ways-columns, landing on the same column as before.
- Nav: Fixed navigation within tables/columns where item boundaries goes beyond columns limits, unclipped bounding boxes would interfere with other columns. (#2221) [@zzzyap, @ocornut]
- Nav: Fixed CTRL+Tab into a root window with only childs with
_NavFlattened
flags erroneously initializing default nav layer to menu layer. - Menus: Fixed an issue when opening a menu hierarchy in a given menu-bar would allow opening another via simple hovering. (#3496, #4797)
- Fonts: Fixed crash when merging fonts and the first font has no valid glyph. (#6446) [@JaedanC]
- Fonts: Fixed crash when manually specifying an EllipsisChar that doesn't exist. (#6480)
- Misc: Added
ImVec2
unary minus operator. (#6368) [@koostosh] - Debug Tools: Debug Log: Fixed not parsing 0xXXXXXXXX values for geo-locating on mouse hover hover when the identifier is at the end of the line. (#5855)
- Debug Tools: Added
io.ConfigDebugIgnoreFocusLoss
option to disableio.AddFocusEvent(false)
handling. May facilitate interactions with a debugger when focus loss leads to clearing inputs data. (#4388, #4921) - Backends: Clear bits sets
io.BackendFlags
on backendShutdown()
. (#6334, #6335] [@GereonV]
Potentially this would facilitate switching runtime backend mid-session. - Backends: Win32:
Added ImGui_ImplWin32_InitForOpenGL()
to facilitate combining raw Win32/Winapi with OpenGL. (#3218) - Backends: OpenGL3: Restore front and back polygon mode separately when supported by context (Desktop 3.0, 3.1, or 3.2+ with compat bit). (#6333) [@GereonV]
- Backends: OpenGL3: Support for
glBindSampler()
backup/restore on ES3. (#6375) [@jsm174] - Backends: SDL3: Fixed build on Emscripten/iOS/Android. (#6391) [@jo-codegirl]
- Backends: SDLRenderer3: Added SDL_Renderer for SDL3 backend. (#6286) [@Carcons, @ocornut]
- Examples: Added native Win32+OpenGL3 example. We don't recommend using this setup but we provide it for completeness. (#3218, #5170, #6086, #2772, #2600, #2359, #2022, #1553) [@learn-more]
- Examples: Vulkan: Use integrated GPU if nothing else is available. (#6359) [@kimidaisuki22]
- Examples: DX9, DX10, DX11: Queue framebuffer resize instead of processing in WM_SIZE, as some drivers tends to only cleanup after existing the native resize modal loop. (#6374)
- Examples: Added SDL3+SDL_Renderer example. (#6286)
- Examples: Updated all Visual Studio projects and batches to use /utf-8 argument.
Changes from 1.89.5 to 1.89.6 related to the docking branch (multi-viewport and docking features) include:
- Viewports: Fixed platform-side focus (e.g. Alt+Tab) from leading to accidental closure of Modal windows. Regression from 1.89.5. (#6357, #6299)
- Viewports: Fixed erroneous popup closure on closing a previous popup. (#6462, #6299)
- Viewports: Fixed loss of imgui-side focus when dragging a secondary viewport back in main viewport, due to platform-side handling changes. Regression from 1.89.5 (#6299)
- Viewports: Added
void* ImGuiPlatformMonitor::PlatformHandle
field (backend-dependant), for usage by user code. - Backends: GLFW: Preserve monitor list when there are no monitor, may briefly happen when recovering from macOS sleeping mode. (#5683) [@Guistac]
- Backends: SDL2: Update monitor list when receiving a display event. (#6348) Note however that SDL2 currently doesn't have an event for a DPI/Scaling change, so monitor data won't be updated in this situation.
- Backends: SDL3: Update monitor list when receiving a display event. (#6348)
Changes from 1.89.5 to 1.89.6 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):
- RangeSelect/MultiSelect: (BREAKING) Renamed
ImGuiMultiSelectData
toImGuiMultiSelectIO
. - RangeSelect/MultiSelect: Made
SetNextItemSelectionData()
optional to allow disjoint selection (e.g. with a CollapsingHeader between items). - RangeSelect/MultiSelect: Enter can alter selection if current item is not selected.
- RangeSelect/MultiSelect: Removed DragDropActive/preserve_existing_selection logic which seems unused + comments.
- RangeSelect/MultiSelect: Demo tweak. Removed multi-scope from Advanced (too messy), made it a separate mini-demo
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...
@DickyQi
_"MediaEditor Community (MEC) is a highly integrated and easy to learn application software that can be used to create, edit, and produce high-quality videos. [...] Support complete timeline editing functions, including move, crop, cut, thumbnail preview, scale and delete. [...] Support more flexible and easily blueprint system. Blueprint💫 is represented in the form of nodes, which can handle complex functions through nodes and flows. [...]Support about 30+ built-in media filters and 60+ built-in media fusions [...] Support about 10 video and audio analysis tools [...] Support audio mixing, including mixer, pan, equalizer, gate, ...
v1.89.5
1.89.5: April 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/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Special thanks to @PathogenDavid and @GamingMinds-DanielC for their help with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- G3DVu
- Asobo Studio
- Tuxedo Labs
- 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.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR
Changes
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
All Changes:
- InputText: Reworked prev/next-word behavior to more closely match Visual Studio text editor. Include '.' as a delimiter and alter varying subtle behavior with how blanks and separators are treated when skipping words. (#6067) [@ajweeks]
- InputText: Fixed a tricky edge case, ensuring value is always written back on the frame where
IsItemDeactivated()
returns true, in order to allow usage without user retaining underlying data. While we don't really want to encourage user not retaining underlying data, in the absence of a "late commit" behavior/flag we understand it may be desirable to take advantage of this trick. (#4714) - Drag, Sliders: Fixed parsing of text input when '+' or '#' format flags are used in the format string. (#6259) [@idbrii]
- Nav: Made Ctrl+Tab/Ctrl+Shift+Tab windowing register ownership to held modifier so it doesn't interfere with other code when remapping those actions. (#4828, #3255, #5641)
- Nav: Made PageUp/PageDown/Home/End navigation also scroll parent windows when necessary to make the target location fully visible (same as e.g. arrow keys).
- ColorEdit: Fixed shading of S/V triangle in Hue Wheel mode. (#5200, #6254) [@jamesthomasgriffin]
- TabBar: Tab-bars with
ImGuiTabBarFlags_FittingPolicyScroll
can be scrolled with horizontal mouse-wheel (or Shift + WheelY). (#2702) - Rendering: Using adaptive tessellation for RadioButton, ColorEdit preview circles, Windows Close and Collapse Buttons.
- ButtonBehavior: Fixed an edge case where changing widget type/behavior while active and using same id could lead to an assert. (#6304)
- Misc: Fixed ImVec2 operator[] violating aliasing rules causing issue with Intel C++ compiler. (#6272) [@BayesBug]
- IO: Input queue trickling adjustment for touch screens. Fixes single-tapping to move simulated mouse and immediately click on a widget that is using the
ImGuiButtonFlags_AllowItemOverlap
policy. (#2702, #4921)- This only works if the backend can distinguish TouchScreen vs Mouse. See 'Demo->Tools->Metrics->Inputs->Mouse Source' to verify.
- Fixed tapping on
BeginTabItem()
on a touch-screen. (#2702) - Fixed tapping on
CollapsingHeader()
with a close button on a touch-screen. - Fixed tapping on
TreeNode()
usingImGuiTreeNodeFlags_AllowItemOverlap
on a touch-screen. - Fixed tapping on
Selectable()
usingImGuiSelectableFlags_AllowItemOverlap
on a touch-screen. - Fixed tapping on
TableHeader()
on a touch-screen.
- IO: Added
io.AddMouseSourceEvent()
andImGuiMouseSource
enum. This is to allow backend to specify actual event source between Mouse/TouchScreen/Pen. (#2702, #2334, #2372, #3453, #5693) - IO: Fixed support for calling
io.AddXXXX
functions from inactive context (wrongly advertised as supported in 1.89.4). (#6199, #6256, #5856) [@cfillion] - Backends: OpenGL3: Fixed GL loader crash when GL_VERSION returns NULL. (#6154, #4445, #3530)
- Backends: OpenGL3: Properly restoring "no shader program bound" if it was the case prior to running the rendering function. (#6267, #6220, #6224) [@BrunoLevy]
- Backends: Win32: Added support for
io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (#2334, #2702) - Backends: SDL2/SDL3: Added support for
io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen. This is relying on SDL passingSDL_TOUCH_MOUSEID
in the event's 'which' field. (#2334, #2702) - Backends: SDL2/SDL3: Avoid calling
SDL_StartTextInput()
/SDL_StopTextInput()
as they actually block text input input and don't only pertain to IME. It's unclear exactly what their relation is to other IME function such asSDL_SetTextInputRect()
. (#6306, #6071, #1953) - Backends: GLFW: Added support on Win32 only for
io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (#2334, #2702) - Backends: GLFW: Fixed key modifiers handling on secondary viewports. (#6248, #6034) [@aiekick]
- Backends: Android: Added support for
io.AddMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (#6315) [@PathogenDavid] - Backends: OSX: Added support for
io.AddMouseSourceEvent()
to discriminate Mouse/Pen. (#6314) [@PathogenDavid] - Backends: WebGPU: Align buffers. Use WGSL shaders instead of SPIR-V. Add gamma uniform. (#6188) [@eliemichel]
- Backends: WebGPU: Reorganized to store data in
io.BackendRendererUserData
like other backends. - Examples: Vulkan: Fixed validation errors with newer VulkanSDK by explicitly querying and enabling "VK_KHR_get_physical_device_properties2", "VK_KHR_portability_enumeration", and
VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR. (#6109, #6172, #6101) - Examples: Windows: Added
misc/debuggers/imgui.natstepfilter
file to all Visual Studio projects, now that VS 2022 17.6 Preview 2 support adding Debug Step Filter spec files into projects. - Examples: SDL3: Updated for latest WIP SDL3 branch. (#6243)
- TestSuite: Added variety of new regression tests and improved/amended existing ones
in imgui_test_engine/ repository. [@PathogenDavid, @ocornut]
Changes from 1.89.4 to 1.89.5 related to the docking branch (multi-viewport and docking features) include:
- Viewports: Setting focus from Platform/OS (e.g. via decoration, or Alt-Tab) sets corresponding focus at Dear ImGui level (generally last focused window in the viewport). (#6299)
- Docking: Fixed using
GetItemXXX()
orIsItemXXX()
functions after aDockSpace()
call. (#6217) - Backends: GLFW: Fixed key modifiers handling on secondary viewports. (#6248, #6034) [@aiekick]
- Backends: GLFW: Fixed Emscripten erroneously enabling multi-viewport support, leading to assert. (#5683)
- Backends: SDL2/SDL3: Fixed IME text input rectangle position with viewports. (#6071, #1953)
- Backends: SDL3: Fixed for compilation with multi-viewports. (#6255) [@P3RK4N]
Changes from 1.89.4 to 1.89.5 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):
- RangeSelect/MultiSelect: Fixed 'Enter' to never alter selection (unlike Space).
- RangeSelect/MultiSelect: Fixed needing to set RangeSrcPassedBy when not using clipper.
- RangeSelect/MultiSelect: Added
ImGuiMultiSelectFlags_ClearOnClickWindowVoid
. - RangeSelect/MultiSelect: Added
ImGuiMultiSelectFlags_ClearOnEscape
.
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
https://github.com/dearimgui/dear_bindings
Gallery
Below a selection of screenshots from Gallery threads...
thpp by @rodan:
https://github.com/rodan/thpp
"I wanted to try out Dear ImGui, so I wrote a thermal image processing software around it. I really loved every minute, thanks!"
"The rendering loop is event-driven (without poking ImGui's code) - based on great work done in #2749"
Spotted in Counter-Strike 2 dev video.
Spotted in Halo Infinite dev talk (from https://www.gdcvault.com/play/1027689/Thinking-Like-Players-How-Halo)
In-house AI System by @abvadabra
_"In-house AI system, with editor and debugger. Architectured on combination of behaviour trees and...
v1.89.4
1.89.4: Release cadence continues!
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Special thanks to @PathogenDavid and @GamingMinds-DanielC for their help with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- G3DVu
- Asobo Studio
- Tuxedo Labs
- And 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.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR
- Nav: Tab key goes through every items (when keyboard navigation is active).
- Nav: Enter key works to activate most items (when keyboard navigation is active).
- Added return value to BeginTooltip().
- Examples: Activated keyboard and gamepad navigation by default in all examples.
- Various other fixes related to: Nav, Tables, Drag and Drop, InputText.
- Various improvements to Win32, SDL2, SDL3, GLFW backends.
- Added a Debug Tools to facilitate testing user-code testing Begin/BeginChild return value.
Changes
This is a followup to v1.89, v1.89.1, v1.89.2 and v1.89.3. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
Breaking Changes:
- Renamed
PushAllowKeyboardFocus()
/PopAllowKeyboardFocus()
toPushTabStop()
/PopTabStop()
. Kept inline redirection functions (will obsolete). - Moved the optional "courtesy maths operators" implementation from imgui_internal.h in imgui.h. Even though we encourage using your own maths types and operators by setting up
IM_VEC2_CLASS_EXTRA
, it has been frequently requested by people to use our own. We had an opt-in define which was previously fulfilled by imgui_internal.h. It is now fulfilled by imgui.h. (#6164, #6137, #5966, #2832)- OK:
#define IMGUI_DEFINE_MATH_OPERATORS
/#include "imgui.h"
/#include "imgui_internal.h"
- Error:
#include "imgui.h"
/#define IMGUI_DEFINE_MATH_OPERATORS
/#include "imgui_internal.h"
- Added a dedicated compile-time check message to help diagnose this.
- OK:
- Tooltips: Added 'bool' return value to
BeginTooltip()
for API consistency. Please only submit contents and call EndTooltip() if BeginTooltip() returns true. In reality the function will currently always return true, but further changes down the line may change this, best to clarify API sooner. Updated demo code accordingly. - Commented out redirecting enums/functions names that were marked obsolete two years ago:
ImGuiSliderFlags_ClampOnInput
-> useImGuiSliderFlags_AlwaysClamp
ImGuiInputTextFlags_AlwaysInsertMode
-> useImGuiInputTextFlags_AlwaysOverwrite
ImDrawList::AddBezierCurve()
-> useImDrawList::AddBezierCubic()
ImDrawList::PathBezierCurveTo()
-> useImDrawList::PathBezierCubicCurveTo()
Other Changes:
- Nav: Tabbing now cycles through all items when
ImGuiConfigFlags_NavEnableKeyboard
is set. (#3092, #5759, #787)
While this was generally desired and requested by many, note that its addition means that some types of UI may become more fastidious to use TAB key with, if the navigation cursor cycles through too many items. You can mark items items as not tab-spottable:- Public API:
PushTabStop(false)
/PopTabStop()
. - Internal:
PushItemFlag(ImGuiItemFlags_NoTabStop, true);
. - Internal: Directly pass
ImGuiItemFlags_NoTabStop
toItemAdd()
for custom widgets.
- Public API:
- Nav: Tabbing/Shift-Tabbing can more reliably be used to step out of an item that is not tab-stoppable. (#3092, #5759, #787)
- Nav: Made Enter key submit the same type of Activation event as Space key, allowing to press buttons with Enter. (#5606)
(Enter emulates a "prefer text input" activation vs. Space emulates a "prefer tweak" activation which is to closer to gamepad controls). - Nav: Fixed an issue with Gamepad navigation when the movement lead to a scroll and frame time > repeat rate. Triggering a new move request on the same frame as a move result lead to an incorrect calculation and loss of navigation id. (#6171)
- Nav: Fixed SetItemDefaultFocus() from not scrolling when item is partially visible. (#2814, #2812) [@DomGries]
- Tables: Fixed an issue where user's Y cursor movement within a hidden column would have side-effects.
- IO: Lifted constraint to call
io.AddEventXXX
functions from current context. (#4921, #5856, #6199) - InputText: Fixed not being able to use CTRL+Tab while an InputText() using Tab for completion or text data is active (regression from 1.89).
- Drag and Drop: Fixed handling of overlapping targets when smaller one is submitted before and can accept the same data type. (#6183).
- Drag and Drop: Clear drag and drop state as soon as delivery is accepted in order to avoid interferences. (#5817, #6183) [@DimaKoltun]
- Debug Tools: Added
io.ConfigDebugBeginReturnValueOnce
/io.ConfigDebugBeginReturnValueLoop
options to simulate Begin/BeginChild returning false to facilitate debugging user behavior. - Demo: Updated to test return value of
BeginTooltip()
. - Backends: OpenGL3: Fixed restoration of a potentially deleted OpenGL program. If an active program was pending deletion, attempting to restore it would error. (#6220, #6224) [@Cyphall]
- Backends: Win32: Use
WM_NCMOUSEMOVE
/WM_NCMOUSELEAVE
to track mouse positions over non-client area (e.g. OS decorations) when app is not focused. (#6045, #6162) - Backends: SDL2, SDL3: Accept
SDL_GetPerformanceCounter()
not returning a monotonically increasing value. (#6189, #6114, #3644) [@adamkewley] - Backends: GLFW: Avoid using
glfwGetError()
andglfwGetGamepadState()
on Emscripten, which recently updated its GLFW emulation layer to GLFW 3.3 without supporting those. (#6240) - Examples: Android: Fixed example build for Gradle 8. (#6229, #6227) [@duddel]
- Examples: Updated all examples application to enable
ImGuiConfigFlags_NavEnableKeyboard
andImGuiConfigFlags_NavEnableGamepad
by default. (#787) - Internals: Misc tweaks to facilitate applying an explicit-context patch. (#5856) [@Dragnalith]
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
https://github.com/dearimgui/dear_bindings
Also note the release of Dear ImGui Bundle by @pthom
https://github.com/pthom/imgui_bundle
Gallery
Below a selection of screenshots from Gallery threads...
Rat GUI
The most convenient simulation tool for magnet engineers
https://rat-gui.ch/index.html
RTSA (Real-Time Spectrum Analyzer) Suite
https://aaronia.com/software/rtsa-suite/
Structural Mechanics software ObjectiveFrame
https://github.com/jonaslindemann/objectiveframe
OpenSim Creator
https://github.com/ComputationalBiomechanicsLab/opensim-creator
Fun thing, Quake 3 re-release using a Dear ImGui underlying logic for in-game menus:
Astro Duel 2
https://store.steampowered.com/app/655350/Astro_Duel_2/)
rustym: "Dear ImGui has been just instrumental to creating Astro Duel 2. We’ve built debug menus, inspectors, editors and production tools all atop this incredible open source framework. What an industry gem!"
v1.89.3
1.89.3: Release cadence intensifies!
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Special thanks to @PathogenDavid and @GamingMinds-DanielC for their help with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- G3DVu
- Asobo Studio
- And 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.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR
- Renamed SDL2 backend files (+ Added experimental SDL3 backend).
- Fixed wrapping text regression from previous versions.
- Added SeparatorText().
- Lifted limit on table columns count.
- Fixed to horizontal scrolling wheel in many backends.
- More Emscripten examples + fixes for Emscripten.
- Many other tweaks/fixes.
Changes
This is a followup to v1.89, v1.89.1 and v1.89.2. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
Breaking Changes:
- Backends+Examples: SDL2: renamed all unnumbered references to "sdl" to "sdl2". This is in prevision for the future release of SDL3 and its associated backend. (#6146)
imgui_impl_sdl.cpp
->imgui_impl_sdl2.cpp
imgui_impl_sdl.h
->imgui_impl_sdl2.h
example_sdl_xxxx/
->example_sdl2_xxxx/
(folders and projects)
Other Changes:
- SeparatorText(): Added
SeparatorText()
widget. (#1643) [@phed, @ocornut]- Added to style:
float SeparatorTextBorderSize
. - Added to style:
ImVec2 SeparatorTextAlign
,ImVec2 SeparatorTextPadding
.
- Added to style:
- Tables: Raised max Columns count from 64 to 512. The previous limit was due to using 64-bit integers but we moved to bits-array and tweaked the system enough to ensure no performance loss. (#6094, #5305, #4876, #3572)
- Tables: Solved an ID conflict issue with multiple-instances of a same table, due to how unique table instance id was generated. (#6140) [@ocornut, @rodrigorc]
- Inputs, Scrolling: Made horizontal scroll wheel and horizontal scroll direction consistent across backends/os. (#4019, #6096, #1463) [@PathogenDavid, @ocornut, @rokups]
- Clarified that 'wheel_y > 0.0f' scrolls Up, 'wheel_y > 0.0f' scrolls Down.
- Clarified that 'wheel_x > 0.0f' scrolls Left, 'wheel_x > 0.0f' scrolls Right.
- Backends: Fixed horizontal scroll direction for Win32 and SDL backends. (#4019)
- Shift+WheelY support on non-OSX machines was already correct. (#2424, #1463) (whereas on OSX machines Shift+WheelY turns into WheelX at the OS level).
- If you use a custom backend, you should verify horizontal wheel direction.
- Axises are flipped by OSX for mouse & touch-pad when 'Natural Scrolling' is on.
- Axises are flipped by Windows for touch-pad when 'Settings->Touchpad->Down motion scrolls up' is on.
- You can use
Demo->Tools->Debug Log->IO
to visualize values submitted to Dear ImGui.
- Known issues remaining with Emscripten:
- The magnitude of wheeling values on Emscripten was improved but isn't perfect. (#6096)
- When running the Emscripten app on a Mac with a mouse, SHIFT+WheelY doesn't turn into WheelX. This is because we don't know that we are running on Mac and apply our own Shift+swapping on top of OSX' own swapping, so wheel axises are swapped twice. Emscripten apps may need to find a way to detect this and set
io.ConfigMacOSXBehaviors
manually (if you know a way let us know!), or offer the "OSX-style behavior" option to their user.
- Window: Avoid rendering shapes for hidden resize grips.
- Text: Fixed layouting of wrapped-text block skipping successive empty lines, regression from the fix in 1.89.2. (#5720, #5919)
- Text: Fixed clipping of single-character "..." ellipsis (U+2026 or U+0085) when font is scaled. Scaling wasn't taken into account, leading to ellipsis character straying slightly out of its expected boundaries. (#2775)
- Text: Tweaked rendering of three-dots "..." ellipsis variant. (#2775, #4269)
- InputText: Added support for Ctrl+Delete to delete up to end-of-word. (Not adding Super+Delete to delete to up to end-of-line on OSX, as OSX doesn't have it) (#6067) [@ajweeks]
- InputText: On OSX, inhibit usage of Alt key to toggle menu when active (used for work skip).
- Menus: Fixed layout of
MenuItem()
/BeginMenu()
when label contains a '\n'. (#6116) [@imkcy9] - ColorEdit, ColorPicker: Fixed hue/saturation preservation logic from interfering with the displayed value (but not stored value) of others widgets instances. (#6155)
- PlotHistogram, PlotLines: Passing negative sizes honor alignment like other widgets.
- Combo: Allow
SetNextWindowSize()
to alter combo popup size. (#6130) - Fonts: Assert that in each
GlyphRanges[]
pairs first is <= second. - ImDrawList: Added missing early-out in
AddPolyline()
andAddConvexPolyFilled()
when color alpha is zero. - Misc: Most text functions treat
"%s"
as a shortcut to no-formatting. (#3466) - Misc: Tolerate zero delta-time under Emscripten as backends are imprecise in their values for
io.DeltaTime
, and browser features such asprivacy.resistFingerprinting=true
can exacerbate that. (#6114, #3644) - Backends: OSX: Fixed scroll/wheel scaling for devices emitting events with
hasPreciseScrollingDeltas==false
(e.g. non-Apple mices). - Backends: Win32: flipping
WM_MOUSEHWHEEL
horizontal value to match other backends and offer consistent horizontal scrolling direction. (#4019) - Backends: SDL2: flipping
SDL_MOUSEWHEEL
horizontal value to match other backends and offer consistent horizontal scrolling direction. (#4019) - Backends: SDL2: Removed
SDL_MOUSEWHEEL
value clamping. (#4019, #6096, #6081) - Backends: SDL2: Added support for SDL 2.0.18+
preciseX
/preciseY
mouse wheel data for smooth scrolling as reported by SDL. (#4019, #6096) - Backends: SDL2: Avoid calling
SDL_SetCursor()
when cursor has not changed, as the function is surprisingly costly on Mac with latest SDL (already fixed in SDL latest trunk). (#6113) - Backends: SDL2: Implement IME handler to call
SDL_SetTextInputRect()
/SDL_StartTextInput()
. It will only works with SDL 2.0.18+ if your code calls 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1")' prior to callingSDL_CreateWindow()
. Updated all examples accordingly. (#6071, #1953) - Backends: SDL3: Added experimental
imgui_impl_sdl3.cpp
backend. SDL 3.0.0 has not yet been released, so it is possible that its specs/api will change before release. This backend is provided as a convenience for early adopters etc. We don't recommend
switching to SDL3 before it is released. (#6146) [@dovker, @ocornut] - Backends: GLFW: Registering custom low-level mouse wheel handler to get more accurate scrolling impulses on Emscripten. (#4019, #6096) [@ocornut, @wolfpld, @tolopolarity]
- Backends: GLFW: Added
ImGui_ImplGlfw_SetCallbacksChainForAllWindows()
to instruct backend to chain callbacks even for secondary viewports/windows. User callbacks may need to test the 'window' parameter. (#6142) - Backends: OpenGL3: Fixed GL loader compatibility with 2.x profiles. (#6154, #4445, #3530) [@grauw]
- Backends: WebGPU: Fixed building for latest WebGPU specs (remove implicit layout generation). (#6117, #4116, #3632) [@tonygrue, @bfierz]
- Examples: refactored SDL2+GL and GLFW+GL examples to compile with Emscripten. (#2492, #2494, #3699, #3705) [@ocornut, @nicolasnoble] The dedicated example_emscripten_opengl3/ has been removed.
- Examples: Added SDL3+GL experimental example. (#6146)
- Examples: Win32: Fixed examples using
RegisterClassW()
since 1.89 to also callDefWindowProcW()
instead ofDefWindowProc()
so that title text are correctly converted when application is compiled without/DUNICODE
. (#5725, #5961, #5975) [@markreidvfx] - Examples: SDL2+SDL_Renderer: Added call to
SDL_RenderSetScale()
to fix display on a Retina display (albeit lower-res as our other unmodified examples). (#6121, #6065, #5931).
Changes from 1.89.2 to 1.89.3 related to the docking branch (multi-viewport and docking features) include:
- Backends: GLFW: Handle unsupported glfwGetVideoMode() for Emscripten. (#6096)
New exciting projects!
Note the release of Dear ImGui Bundle by @pthom
https://github.com/pthom/imgui_bundle
_"Dear ImGui Bundle is a bundle for Dear ImGui, including various powerful libraries from its ecosystem. It enables to easily create ImGui applications in C++ and Python, under Windows...
v1.89.2
1.89.2: Happy New Year!
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Special thanks to @rokups for their continued work on regression tests (now available as part of Dear ImGui Test Engine & Test Suite).
Special thanks to @PathogenDavid and @GamingMinds-DanielC for their help with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
Huge thank you to all past and present supporters!
Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
Changes
This is a followup to v1.89 and v1.89.1. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
All Changes:
- Tables, Nav, Scrolling: fixed scrolling functions and focus tracking with frozen rows and frozen columns. Windows now have a better understanding of outer/inner decoration sizes, which should later lead us toward more flexible uses of menu/status bars. (#5143, #3692)
- Tables, Nav: frozen columns are not part of menu layer and can be crossed over. (#5143, #3692)
- Tables, Columns: fixed cases where empty columns may lead to empty ImDrawCmd. (#4857, #5937)
- Tables: fixed matching width of synchronized tables (multiple tables with same id) when only some instances have a vertical scrollbar and not all. (#5920)
- Fixed cases where CTRL+Tab or Modal can occasionally lead to the creation of ImDrawCmd with zero triangles, which would makes the render loop of some backends assert (e.g. Metal with debugging, Allegro). (#4857, #5937)
- Inputs, IO: reworked
ImGuiMod_Shortcut
to redirect to Ctrl/Super at runtime instead of compile-time, being consistent with our support for io.ConfigMacOSXBehaviors and making it easier for bindings generators to process that value. (#5923, #456) - Inputs, Scrolling: better selection of scrolling window when hovering nested windows and when backend/OS is emitting dual-axis wheeling inputs (typically touch pads on macOS). We now select a primary axis based on recent events, and select a target window based on it. We expect this behavior to be further improved/tweaked. (#3795, #4559) [@ocornut, @folays]
- InputText: fixed cursor navigation when pressing Up Arrow on the last character of a multi-line buffer which doesn't end with a carriage return. (#6000)
- Text: fixed layouting of wrapped-text block when the last source line is above the clipping region. Regression added in 1.89. (#5720, #5919)
- Misc: added
GetItemID()
in public API. It is not often expected that you would use this, but it is useful for Shortcut() and upcoming owner-aware input functions which wants to be implemented with public API. - Fonts: imgui_freetype: fixed a packing issue which in some occurrences would prevent large amount of glyphs from being packed correctly. (#5788, #5829)
- Fonts: added a
void* UserData
field inImFontAtlas
, as a convenience for use by applications using multiple font atlases. - Demo: simplified "Inputs" section, moved contents to Metrics->Inputs.
- Debug Tools: Metrics: added "Inputs" section, moved from Demo for consistency.
- Misc: fixed parameters to
IMGUI_DEBUG_LOG()
not being dead-stripped when building withIMGUI_DISABLE_DEBUG_TOOLS
is used. (#5901) [@Teselka] - Misc: fixed compile-time detection of SSE features on MSVC 32-bits builds. (#5943) [@TheMostDiligent]
- Examples: DirectX10, DirectX11: try WARP software driver if hardware driver is not available. (#5924, #5562)
- Backends: GLFW: Fixed mods state on Linux when using Alt-GR text input (e.g. German keyboard layout), which could lead to broken text input. Revert a 2022/01/17 change were we resumed using mods provided by GLFW, turns out they are faulty in this specific situation. (#6034)
- Backends: Allegro5: restoring using al_draw_indexed_prim() when Allegro version is >= 5.2.5. (#5937) [@Espyo]
- Backends: Vulkan: Fixed sampler passed to
ImGui_ImplVulkan_AddTexture()
not being honored as we were using an immutable sampler. (#5502, #6001, #914) [@martin-ejdestig, @rytisss]
Changes from 1.89.1 to 1.89.2 related to the docking branch (multi-viewport and docking features) include:
- Docking: Internals: fixed
DockBuilderCopyDockSpace()
crashing when windows not in the remapping list are docked on the left or top side of a split. (#6035) - Docking: fixed
DockSpace()
withImGuiDockNodeFlags_KeepAliveOnly
marking current window as written to, even if it doesn't technically submit an item. This allow using KeepAliveOnly from any window location. (#6037) - Backends: OSX: fixed typo in
ImGui_ImplOSX_GetWindowSize
that would cause issues when resizing from OS decorations, if they are enabled on secondary viewports. (#6009) [@sivu] - Backends: Metal: fixed secondary viewport rendering. (#6015) [@dmirty-kuzmenko]
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
https://github.com/dearimgui/dear_bindings
Running_Dear_ImGui_Test_Suite_.Fast_Mode.mp4
Gallery
Below a selection of screenshots from Gallery threads...
Projectreal by @thefoxcam
"WIP Open source layer-based compositor](https://foxcam.net/projectreal with a focus on bitmap editing for 2D motion design work, basically a combination of After Effects and Photoshop. ImGui's paradigm has been invaluable to my learning journey--"
NAP Framework by https://nap-labs.tech/
https://www.napframework.com
Dear ImGui File Dialogs CLI and Client Library by Samuel Venable.
https://github.com/time-killer-games/libfiledialogs
"Based on ImFileDialog by dfranx, with many bugs/crashes fixed and overall improvements. The 'Quick Access' sidebar actually remembers what favorites were previously saved to it from previous runs of your application now, by saving the settings to a text file in a hidden configuration subfolder of your home folder. Allows for full localization among many other good things you'll find useful. Most of the dialog is customizable via environment variables. Uses system icon theme."
RetroDebugger by @slajerek
https://github.com/slajerek/RetroDebugger
RE Edit, a free and open source WYSIWYG editor for the UI of a Rack Extension
https://github.com/pongasoft/re-edit
v1.89.1
1.89.1: Friendly tweaks and fixes
Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
Thank you! ❤️
Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid for their continued contributions and helping with github answers.
Special thanks to @thedmd for their code reviews and continued exchanges of ideas.
Ongoing work on Dear ImGui is currently financially supported by:
Huge thank you to all past and present supporters!
Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
Changes
This is mostly a couple of changes to amend the release of v1.89:
- Scrolling, Focus: fixed
SetKeyboardFocusHere()
/SetItemDefaultFocus()
during a window-appearing frame (and associated lower-level functions e.g.ScrollToRectEx()
) from not centering item. (#5902) - Inputs: fixed moving a window or drag and dropping from preventing input-owner-unaware code from accessing keys. (#5888, #4921, #456)
- Inputs: fixed moving a window or drag and dropping from capturing mods. (#5888, #4921, #456)
- Layout: fixed
End()
/EndChild()
incorrectly asserting if users manipulates cursor position inside a collapsed/culled window andIMGUI_DISABLE_OBSOLETE_FUNCTIONS
is enabled. (#5548, #5911) - Combo: fixed selected item (marked with
SetItemDefaultFocus()
) from not being centered when the combo window initially appears. (#5902). - ColorEdit: fixed label overlapping when using
style.ColorButtonPosition == ImGuiDir_Left
to move the color button on the left side (regression introduced in 1.88 WIP 2022/02/28). (#5912) - Drag and Drop: fixed
GetDragDropPayload()
returning a non-NULL value if a drag source is active but a payload hasn't been submitted yet. This is convenient to detect new payload from within a drag source handler. (#5910, #143) - Backends: GLFW: cancel out errors emitted by
glfwGetKeyName()
when a name is missing. (#5908) - Backends: WebGPU: fixed validation error with default depth buffer settings. (#5869, #5914) [@kdchambers]
Changes from 1.89 to 1.89,1 related to the docking branch (multi-viewport and docking features) include:
- Viewport: Fixed collapsed windows setting
ImGuiViewportFlags_NoRendererClear
without making title bar color opaque, leading to potential texture/fb garbage being visible. Right now as we don't fully support transparent viewports (#2766), so we turn thatTitleBgCollapsed
color opaque just like we do forWindowBG
on uncollapsed windows.
New secret exciting stuff!
Since 1.89 we semi-sneakily soft launched two new entire projects!
Dear Bindings: alternative binding generator for C and other languages
https://github.com/dearimgui/dear_bindings
Dear ImGui Automation/Test Engine & Test Suite
https://github.com/ocornut/imgui_test_engine
Running_Dear_ImGui_Test_Suite_.Fast_Mode.mp4
See v1.89 for full release details.
v1.89
1.89: Autumn 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!
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
📢 Updating from <1.86 and got visual glitches with custom/old backend when using CTRL+Tab or Modal Windows? See 1.86 release note.
Thank you! ❤️
Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid for their continued contributions and helping with github answers.
Special thanks to @thedmd for their code reviews and continued exchanges of ideas.
Ongoing work on Dear ImGui is currently financially supported by:
Huge thank you to all past and present supporters!
Also thanks to PVS Studio (great static analyzer) for providing us with a license for this project.
Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR;
Some arbitrary highlights among the 90+ changes:
- Debug Tools: Hovering 0xXXXXXXX ids in Debug Log and Metrics can now visually locate the item. (#5855)
- Popups & Modals: fixed nested Begin() inside a popup being erroneously input-inhibited.
- IO: Mitigate scrolling issues on system sending dual-axis wheel data simultaneously (more fixes coming later).
- IsItemHovered: added
ImGuiHoveredFlags_DelayNormal
andImGuiHoveredFlags_DelayShort
for delayed hover test (work on items that have no persistent identifier e.g. Text items). - InputText: added
ImGuiInputTextFlags_EscapeClearsAll
andio.ConfigInputTextEnterKeepActive
. Added Shift+Click style selection. Improvements for numerical inputs for IME mode sending full-width characters. Other fixes. - Menus: various fixes for menu item inside non-popup root windows. Fixes for keyboard/gamepad navigations.
- TabBar: fixes occasional freezes when feeding non-rounded tab widths.
- Backends: Many fixes: freezing IME on Win32, fix for SDL 2.0.22 auto-capture and drag and drop issues with multi-viewports, fixes corruptions issues with OpenGL and multi-viewports on buggy Intel GPU drivers, OSX support for C++ apps etc.
- Obsoleted variety of old symbols, with backward-compatible redirection for newly obsoleted stuff.
- Internals: added wip internal APIs to allow handling input/shorting routing and key ownership. Things will be moved into public APIs over time, including a
Shortcut()
function that magically handle input routing. - And many more things...
Breaking Changes
(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
in your imconfig.h
file to make sure you are not using to-be-obsoleted symbols.)
- Layout: Obsoleted using
SetCursorPos()
/SetCursorScreenPos()
to extend parent window/cell boundaries. (#5548)
This relates to when moving the cursor position beyond current boundaries WITHOUT submitting an item.- Previously this would make the window content size ~200x200:
Begin(...)
+SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200))
+End()
- Instead, please submit an item:
Begin(...)
+SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200))
+Dummy(ImVec2(0,0))
+End()
- Or simpler alternative:
Begin(...)
+Dummy(ImVec2(200,200))
+End()
; - Content size is now only extended when submitting an item.
- With
#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
this will now be detected and assert. - Without
#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
this will silently be fixed until we obsolete it. - This incorrect pattern has been mentioned or suggested in: #4510, #3355, #1760, #1490, #4152, #150, threads have been amended to refer to this issue.
- With
- Previously this would make the window content size ~200x200:
- Renamed and merged keyboard modifiers key enums and flags into a same set: (#4921, #456)
ImGuiKey_ModCtrl
andImGuiModFlags_Ctrl
->ImGuiMod_Ctrl
ImGuiKey_ModShift
andImGuiModFlags_Shift
->ImGuiMod_Shift
ImGuiKey_ModAlt
andImGuiModFlags_Alt
->ImGuiMod_Alt
ImGuiKey_ModSuper
andImGuiModFlags_Super
->ImGuiMod_Super
Kept inline redirection enums (will obsolete). This change simplifies a few things, reduces confusion, and will facilitate upcoming shortcut/input ownership apis.- (The
ImGuiKey_ModXXX
were introduced in 1.87 and mostly used by backends. TheImGuiModFlags_XXX
have been exposed in imgui.h but not really used by any public api, only by third-party extensions. They were however subject to a recent renameImGuiKeyModFlags_XXX
->ImGuiModFlags_XXX
and we are exceptionally commenting out the olderImGuiKeyModFlags_XXX
names ahead of obsolescence schedule to reduce confusion and because they were not meant to be used anyway.)
- Removed
io.NavInputs[]
andImGuiNavInput
enum that were used to feed gamepad inputs. Basically 1.87 already obsoleted them from the backend's point of view, but internally our navigation code still used this array and enum, so they were still present. Not anymore! (#4921, #4858, #787, #1599, #323)
Transition guide:- Official backends from 1.87:
- no issue.
- Official backends from 1.60 to 1.86:
- will compile and convert legacy gamepad inputs, unless
IMGUI_DISABLE_OBSOLETE_KEYIO
is defined. Need updating!
- will compile and convert legacy gamepad inputs, unless
- Custom backends not writing to
io.NavInputs[]
(no gamepad support)- no issue.
- Custom backends writing to
io.NavInputs[]
:- will compile and convert legacy gamepad inputs, unless
IMGUI_DISABLE_OBSOLETE_KEYIO
is defined. Need fixing!
- will compile and convert legacy gamepad inputs, unless
- TL;DR: Backends should call
io.AddKeyEvent()
/io.AddKeyAnalogEvent()
withImGuiKey_GamepadXXX
values instead of fillingio.NavInput[]
. The ImGuiNavInput enum was essentially 1.60's attempt to combine keyboard and gamepad inputs with named semantic, but the additional indirection and copy added complexity and got in the way of other incoming work. User's code (other than backends) should not be affected, unless you have custom widgets intercepting navigation events via the named enums (in which case you can upgrade your code).
- Official backends from 1.87:
DragInt()
,SliderInt()
: Removed runtime patching of invalid "%f"/"%.0f" types of format strings. This was obsoleted in 1.61 (May 2018). See 1.61 changelog for details.- Changed signature of
ImageButton()
function: (#5533, #4471, #2464, #1390)- Added
const char* str_id
parameter + removedint frame_padding = -1
parameter. - Old signature:
bool ImageButton(ImTextureID tex_id, ImVec2 size, ImVec2 uv0 = ImVec2(0,0), ImVec2 uv1 = ImVec2(1,1), int frame_padding = -1, ImVec4 bg_col = ImVec4(0,0,0,0), ImVec4 tint_col = ImVec4(1,1,1,1));
- used the
ImTextureID
value to create an ID. This was inconsistent with other functions, led to ID conflicts, and caused problems with engines using transient ImTextureID values. - had a
FramePadding
override which was inconsistent with other functions and made the already-long signature even longer.
- used the
- New signature:
bool ImageButton(const char* str_id, ImTextureID tex_id, ImVec2 size, ImVec2 uv0 = ImVec2(0,0), ImVec2 uv1 = ImVec2(1,1), ImVec4 bg_col = ImVec4(0,0,0,0), ImVec4 tint_col = ImVec4(1,1,1,1));
- requires an explicit identifier. You may still use e.g.
PushID()
calls and then pass an empty identifier. - always uses
style.FramePadding
for padding, to be consistent with other buttons. You may usePushStyleVar()
to alter this.
- requires an explicit identifier. You may still use e.g.
- As always we are keeping a redirection function available (will obsolete later).
- Added
- Removed the bizarre legacy default argument for
TreePush(const void* ptr = NULL)
. Must always pass a pointer value explicitly, NULL/nullptr is ok but require cast, e.g.TreePush((void*)nullptr);
If you usedTreePush()
replace withTreePush((void*)NULL);
(#1057) - Commented out redirecting functions/enums names that were marked obsolete in 1.77 and 1.79 (August 2020): (#3361)
DragScalar()
,DragScalarN()
,DragFloat()
,DragFloat2()
,DragFloat3()
,DragFloat4()
SliderScalar()
,SliderScalarN()
,SliderFloat()
,SliderFloat2()
,SliderFloat3()
,SliderFloat4()
- For old signatures ending with
(..., const char* format, float power = 1.0f)
->use (..., format ImGuiSliderFlags_Logarithmic)
ifpower != 1.0f
.
- For old signatures ending with
BeginPopupContextWindow(const char*, ImGuiMouseButton, bool)
-> useBeginPopupContextWindow(const char*, ImGuiPopupFlags)
OpenPopupContextItem()
(briefly existed from 1.77 to 1.79) -> useOpenPopupOnItemClick()
- Removed support for 1.42-era
IMGUI_DISABLE_INCLUDE_IMCONFIG_H
/IMGUI_INCLUDE_IMCONFIG_H
. They only made sense before we could useIMGUI_USER_CONFIG
. (#255)
Other Changes
- Popups & Modals: fixed nested Begin() inside a popup being erroneously input-inhibited. While it is unusual, you can nest a Begin() inside a popup or mo...
v1.88
1.88: Summer maintainance 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!
Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌
📢 Updating from <1.86 and got visual glitches with custom/old backend when using CTRL+Tab or Modal Windows? See 1.86 release note.
Thank you!
Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid for their continued contributions and helping with github answers.
Ongoing work on Dear ImGui is currently financially supported by companies such as:
- Platinum sponsors: Blizzard
- Chocolate sponsors: Adobe, Google, Ubisoft, Supercell
- Salty-caramel sponsors: Kylotonn, Wonderland Engine
Huge thank you to all past and present supporters!
Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR;
This is a general "many things" release. Initially I was expecting 1.88 to include new features for input ownership and input routing but it's not ready and we haven't had a release for a while. Among the 80+ changes, some that may interest more people:
- Various fixes related to the 1.87 input io/queue changes.
- Debug: Added of a "Dear ImGui Debug Log" window facilitating looking into common issues (e.g. focus change, popup closure, active id being stolen, etc.).
- Debug: Added a "UTF-8 Encoding Viewer" in Metrics and
DebugTextEncoding()
function to help validating UTF-8 code since many users have issues with UTF-8 encoding and C++ makes things difficult. - Sliders: Clicking within the grab/knob of a non-Drag Slider width doesn't alter current value.
- InputText: Fixed undo-state corruptions when altering in-buffers in user callback and in other cases.
- Tables: Fixed a rather frequent draw-call merging issues (some tables created an unnecessary extra draw-call).
- Fixed subtle or rare nav and focus issues.
- Many backends fixes (including tentative fixes for frequent OpenGL issues on Windows in multi-viewport mode).
- Various Docking and Multi-viewport fixes.
Breaking Changes
(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
in your imconfig.h
file to make sure you are not using to-be-obsoleted symbols.)
- Renamed
IMGUI_DISABLE_METRICS_WINDOW to
IMGUI_DISABLE_DEBUG_TOOLS` for correctness. Kept support for old define (will obsolete). - Renamed
CaptureMouseFromApp()
andCaptureKeyboardFromApp()
toSetNextFrameWantCaptureMouse()
andSetNextFrameWantCaptureKeyboard()
to clarify purpose, old name was too misleading. Kept inline redirection functions (will obsolete). - Renamed
ImGuiKeyModFlags
toImGuiModFlags
. Kept inline redirection enums (will obsolete). (This was never used in public API functions but technically present in imgui.h and ImGuiIO). - Backends: OSX: Removed
ImGui_ImplOSX_HandleEvent()
from backend API in favor of backend automatically handling event capture. Examples that are using the OSX backend have removed all the now-unnecessary calls to ImGui_ImplOSX_HandleEvent(), applications can do as well. [@stuartcarnie] (#4821) - Internals: calling
ButtonBehavior()
without callingItemAdd()
now requires aKeepAliveID()
call. This is because theKeepAliveID()
call was moved fromGetID()
toItemAdd()
. (#5181)
Other Changes
- IO: Fixed backward-compatibility regression introduced in 1.87: (#4921, #4858)
- Direct accesses to
io.KeysDown[]
with legacy indices didn't work (with new backends). - Direct accesses to
io.KeysDown[GetKeyIndex(XXX)]
would access invalid data (with old/new backends). - Calling
IsKeyDown()
didn't have those problems, and is recommended asio.KeysDown[]
is obsolete.
- Direct accesses to
- IO: Fixed input queue trickling of interleaved keys/chars events (which are frequent especially when holding down a key as OS submits chars repeat events) delaying key presses and mouse movements. In particular, using the input system for fast game-like actions (e.g. WASD camera move) would typically have been impacted, as well as holding a key while dragging mouse. Constraints have been lifted and are now only happening when e.g. an InputText() widget is active. (#4921, #4858)
- Note that even thought you shouldn't need to disable
io.ConfigInputTrickleEventQueue
, you can technically dynamically change its setting based on the context (e.g. disable only when hovering or interacting with a game/3D view).
- Note that even thought you shouldn't need to disable
- IO: Fixed input queue trickling of mouse wheel events: multiple wheel events are merged, while a mouse pos followed by a mouse wheel are now trickled. (#4921, #4821)
- IO: Added
io.SetAppAcceptingEvents()
to set a master flag for accepting key/mouse/characters events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen. - Windows: Fixed first-time windows appearing in negative coordinates from being initialized with a wrong size. This would most often be noticeable in multi-viewport mode (docking branch) when spawning a window in a monitor with negative coordinates. (#5215, #3414) [@DimaKoltun]
- Clipper: Fixed a regression in 1.86 when not calling clipper.End() and late destructing the clipper instance. High-level languages (Lua,Rust etc.) would typically be affected. (#4822)
- Layout: Fixed mixing up
SameLine()
andSetCursorPos()
together from creating situations where line height would be emitted from the wrong location (e.g. ItemA+SameLine()+SetCursorPos()+ItemB' would emit ItemA worth of height from the position of ItemB, which is not necessarily aligned with ItemA). - Sliders: An initial click within the knob/grab doesn't shift its position. (#1946, #5328)
- Sliders, Drags: Fixed dragging when using hexadecimal display format string. (#5165, #3133)
- Sliders, Drags: Fixed manual input when using hexadecimal display format string. (#5165, #3133)
- InputScalar: Fixed manual input when using %03d style width in display format string. (#5165, #3133)
- InputScalar: Automatically allow hexadecimal input when format is %X (without extra flag).
- InputScalar: Automatically allow scientific input when format is float/double (without extra flag).
- Nav: Fixed nav movement in a scope with only one disabled item from focusing the disabled item. (#5189)
- Nav: Fixed issues with nav request being transferred to another window when calling
SetKeyboardFocusHere()
and simultaneous changing window focus. (#4449) - Nav: Changed
SetKeyboardFocusHere()
to not behave if a drag or window moving is in progress. - Nav: Fixed inability to cancel nav in modal popups. (#5400) [@rokups]
- IsItemHovered(): added
ImGuiHoveredFlags_NoNavOverride
to disable the behavior where the return value is overridden by focus when gamepad/keyboard navigation is active. - InputText: Fixed pressing Tab emitting two tabs characters because of dual Keys/Chars events being trickled with the new input queue (happened on some backends only). (#2467, #1336)
- InputText: Fixed a one-frame display glitch where pressing Escape to revert after a deletion would lead to small garbage being displayed for one frame. Curiously a rather old bug! (#3008)
- InputText: Fixed an undo-state corruption issue when editing main buffer before reactivating item. (#4947)
- InputText: Fixed an undo-state corruption issue when editing in-flight buffer in user callback. (#4947, #4949] [@JoshuaWebb]
- Tables: Fixed incorrect border height used for logic when resizing one of several synchronized instance of a same table ID, when instances have a different height. (#3955).
- Tables: Fixed incorrect auto-fit of parent windows when using non-resizable weighted columns. (#5276)
- Tables: Fixed draw-call merging of last column. Depending on some unrelated settings (e.g. BorderH) merging drawcall of the last column didn't always work (regression since 1.87). (#4843, #4844) [@rokups]
- Inputs: Fixed
IsMouseClicked()
repeat mode rate being half of keyboard repeat rate. - ColorEdit: Fixed text baseline alignment after a
SameLine()
after aColorEdit()
with visible label. - TabBar:
BeginTabItem()
now reacts toSetNextItemWidth()
. (#5262) - TabBar: Tweak shrinking policy so that while resizing tabs that don't need shrinking keep their initial width more precisely (without the occasional +1 worth of width).
- Menus: Adjusted
BeginMenu()
closing logic so hovering void or non-MenuItem() in parent window always lead to menu closure. Fixes using items that are notMenuItem()
orBeginItem()
at the root level of a popup with a child menu opened. - Menus: Menus emitted from th...