v1.89.9
1.89.9: September 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! ❤️
Dear ImGui is funded by your contributions and needs them to sustain and grow. We can do regular B2B Invoicing.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
Ongoing work on Dear ImGui is currently financially supported by:
- Blizzard
- Supercell
- Planestate Software
- Pocketwatch Games
- G3DVu
- Wonderland Engine
- Terrible Toybox
- And more Individual contributions!
Special thanks to @GamingMinds-DanielC, @sakiodre, @PathogenDavid for their help with github answers.
Reaching 50000 GitHub stars: (49993 as I'm typing those words)
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.
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, v1.89.8. 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 650 lines of changelog between 1.89 and 1.89.9.
Breaking Changes:
- Clipper: Renamed
IncludeRangeByIndices()
(also calledForceDisplayRangeByIndices()
before 1.89.6) again to IncludeItemsByIndex(). Kept inline redirection function. (#6424, #3841)
Other Changes:
- Tables: Made it possible to use
SameLine(0,0)
afterTableNextColumn()
/TableSetColumnIndex()
in order to reuse line pos/height from previous cell. (#3740) - Tables: Made it possible to change
style.CellPadding.y
between rows. (#3740) - Nav, TreeNode: Pressing Left with
ImGuiTreeNodeFlags_NavLeftJumpsBackHere
now goes through proper navigation logic: honor scrolling and selection. (#1079, #1131) - Sliders: Fixed an integer overflow and div-by-zero in
SliderInt()
whenv_max=INT_MAX
. (#6675, #6679) [@jbarthelmes] - Windows: Layout of Close/Collapse buttons uses
style.ItemInnerSpacing.x
between items, stopped incorrectly usingFramePadding
in a way where hit-boxes could overlap when setting large values. (#6749) - InputFloat, SliderFloat, DragFloat: always turn both
.
and,
into the current decimal point character when using Decimal/Scientific character filter. (#6719, #2278) [@adamsepp] - ColorEdit, ColorPicker: Manipulating options popup don't mark item as edited. (Note that they may still be marked as Active/Hovered.) (#6722)
- Clipper: Added
IncludeItemByIndex()
helper to include a single item. (#6424, #3841) - Clipper: Fixed a bug if attempt to force-include a range which matches an already included range, clipper would end earlier. (#3841)
- ImDrawData: Fixed an issue where
TotalVtxCount
/TotalIdxCount
does not match the sum of individual ImDrawList's buffer sizes when a dimming/modal background is rendered. (#6716) - ImDrawList: Automatically calling
ChannelsMerge()
if not done after a split. - ImDrawList: Fixed OOB access in
_CalcCircleAutoSegmentCount()
when passing excessively large radius toAddCircle()
. (#6657, #5317) [@EggsyCRO, @jdpatdiscord] - IO: Exposed
io.PlatformLocaleDecimalPoint
to configure decimal point ('.' or ',') for languages needing it. Should ideally be set to the value of*localeconv()->decimal_point
but our backends don't do it yet. (#6719, #2278) - IO: Fixed
io.AddMousePosEvent()
andio.AddMouseButtonEvent()
writing MouseSource to wrong union section. Was semantically incorrect and accidentally had no side-effects with default compiler alignment settings. (#6727) [@RickHuang2001] - Misc: Made multiple calls to Render() during the same frame early out faster.
- Debug Tools: Metrics: Fixed "Drawlists" section and per-viewport equivalent appearing empty (regression in 1.89.8).
- Demo: Reorganized "Examples" menu.
- Demo: Tables: Demonstrate using
SameLine()
between cells. (#3740) - Demo: Tables: Demonstrate altering
CellPadding.y
between rows. (#3740) - Demo: Custom Rendering: Demonstrate out-of-order rendering using
ImDrawListSplitter
. - Backends: SDL2,SDL3: added
ImGui_ImplSDL2_InitForOther()
/ImGui_ImplSDL3_InitForOther()
for consistency (matching GLFW backend) and as most initialization paths don't actually need to care about rendering backend. - Examples: Emscripten+WebGPU: Fixed WGPUInstance creation process + use preferred framebuffer format. (#6640, #6748) [@smileorigin]
Changes from 1.89.8 to 1.89.9 related to the docking branch (multi-viewport and docking features):
- Docking: when
io.ConfigDockingWithShift
is enabled, staying stationary while moving a window displays an help tooltip to increase affordance. (#6709, #4643)
Changes from 1.89.8 to 1.89.9 related to the prototype range-select branch:
This is a new API that hasn't been discussed much in public yet. Ignore if you are not one of the few users. If you happen to be using this please do get in contact. I know I said this API would have been stabilized by now, but it's not! I expect to make some more changes before 1.90. Hopefully this is on track to be stable and merged in 1.90.
Open for details of MultiSelect changes
-
RangeSelect/MultiSelect: (BREAKING) Renamed
SetNextItemSelectionData()
toSetNextItemSelectionUserData()
. -
RangeSelect/MultiSelect: (BREAKING) Use
ImGuiSelectionUserData
type (= ImS64) instead of void* for selection user data. -
RangeSelect/MultiSelect: (BREAKING) RequestSetRange's parameter are
RangeFirstItem...RangeLastItem
(which are always ordered, unlikeRangeSrcItem...RangeDstItem
). RemovedRangeDstItem
. RemovedRangeDirection
. -
RangeSelect/MultiSelect: (BREAKING) Removed RangeSrcPassedBy in favor of favoring user to call IncludeByIndex(RangeSrcItem) which is easier/simpler to honor.
-
RangeSelect/MultiSelect: (BREAKING) Renamed
ImGuiMultiSelectFlags_NoMultiSelect
toImGuiMultiSelectFlags_SingleSelect
as it seems easier to grasp + fixed behavior. -
RangeSelect/MultiSelect: Added
ImGuiMultiSelectFlags_SelectOnClickRelease
to allow dragging an unselected item without altering selection + update drag and drop demo. -
RangeSelect/MultiSelect: Assert if SetNextItemSelectionUserData() is called not in the context of a BeginMultiSelect() block.
-
RangeSelect/MultiSelect: Tweak debug log to print decimal+hex values for item data.
-
RangeSelect/MultiSelect: Clear selection when leaving a scope with a nav directional request (may make optional).
-
RangeSelect/MultiSelect: Demo: Assets Browser: Added assets browser demo.
-
RangeSelect/MultiSelect: Demo: Dual List Box: Added simple dual list box demo. (#6648)
-
RangeSelect/MultiSelect: Demo: added simpler demo using Clipper. Clarify RangeSrcPassedBy doc.
-
RangeSelect/MultiSelect: Demo: rework ExampleSelection with an ExampleSelectionAdapter layer, allowing to share more code across examples using different storage design.
-
RangeSelect/MultiSelect: Demo: rework deletion demo code.
Previously:
ImGui::SetNextItemSelectionData((void*)(intptr_t)idx);
Now:
ImGui::SetNextItemSelectionUserData(idx);
Previously:
if (ms_io->RequestSetRange) { int first = (int)ms_io->RangeSrcItem; int last = (int)ms_io->RangeDstItem if (first > last) swap(first, last); for (int idx = first; idx <= last; idx++) SetSelection(idx, ms_io->RangeSelected); }
Now:
if (ms_io->RequestSetRange) for (int idx = ms_io->RangeFirstItem; idx <= ms_io->RangeLastItem; idx++) SetSelection(idx, ms_io->RangeSelected);
Previously: (required inside loop and after loop, when using clipper)
if (!ms_io->RangeSrcPassedBy && clipper.DisplayStart > ms_io->RangeSrcItem) ms_io->RangeSrcPassedBy = true;
Now:
if (ms_io->RangeSrcItem != -1) clipper.IncludeItemByIndex((int)ms_io->RangeSrcItem); // Ensure RangeSrc item is not clipped.
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...
@simco50: "A simple CPU/GPU profiler with a timeline UI having both CPU and GPU tracks in the same synchronized view.
Continuously records and saves N frames and can be paused to analyze."
https://github.com/simco50/TimelineProfiler
Intel XeSS Demo
https://github.com/intel/xess
PrusaSlicer (Prusa Slic3r) using Dear ImGui within their 3d viewport:
https://www.prusa3d.com/page/prusaslicer_424/
@samuel-watson: "This is a non-game related example. Dear ImGui is used as the GUI for a scientific application to support the design of cluster randomised trials (a type of experimental design). [...] It runs in the browser and is compiled using Emscripten to generate the html, JS, and WASM files. "
The app is currently hosted at https://www.clustertrial.app/ and the code is available at the GitHub repo.
@lukaasm: "Next addition to our game/engine tooling suite: ParticleEditor ( based on modified version of https://github.com/thedmd/imgui-node-editor )"
@rodan: "Magic Carpet 2 porting effort."
https://github.com/rodan/magic_carpet_2
@cfnptr: "Screenshot from my pet game engine editor. With a visual studio code inspired theme :)"
YAZE (Yet Another Zelda3 Editor) by @scawful
https://github.com/scawful/yaze
Property Watcher: A runtime variable watch window for Unreal Engine using ImGui, by @guitarfreak
https://github.com/guitarfreak/PropertyWatcher
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