github ocornut/imgui v1.89.9

latest releases: v1.91.5-docking, v1.91.5, v1.91.4-docking...
14 months ago

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:

Special thanks to @GamingMinds-DanielC, @sakiodre, @PathogenDavid for their help with github answers.

Reaching 50000 GitHub stars: (49993 as I'm typing those words)
image

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 called ForceDisplayRangeByIndices() before 1.89.6) again to IncludeItemsByIndex(). Kept inline redirection function. (#6424, #3841)

Other Changes:

  • Tables: Made it possible to use SameLine(0,0) after TableNextColumn()/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() when v_max=INT_MAX. (#6675, #6679) [@jbarthelmes]
  • Windows: Layout of Close/Collapse buttons uses style.ItemInnerSpacing.x between items, stopped incorrectly using FramePadding 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 to AddCircle(). (#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() and io.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]

image

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() to SetNextItemSelectionUserData().

  • 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, unlike RangeSrcItem...RangeDstItem). Removed RangeDstItem. Removed RangeDirection.

  • 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 to ImGuiMultiSelectFlags_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

TimelineProfiler

Intel XeSS Demo
https://github.com/intel/xess
260038114-2b8c0114-2f37-4cbb-87c5-1a85d77b23cd

PrusaSlicer (Prusa Slic3r) using Dear ImGui within their 3d viewport:
https://www.prusa3d.com/page/prusaslicer_424/
Slic3r

@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.
clusterapp_screenshot

@lukaasm: "Next addition to our game/engine tooling suite: ParticleEditor ( based on modified version of https://github.com/thedmd/imgui-node-editor )"
ParticleEditor

@rodan: "Magic Carpet 2 porting effort."
https://github.com/rodan/magic_carpet_2
mc2

@cfnptr: "Screenshot from my pet game engine editor. With a visual studio code inspired theme :)"
Screenshot from 2023-08-18 15-40-41

YAZE (Yet Another Zelda3 Editor) by @scawful
https://github.com/scawful/yaze
yaze-01

Property Watcher: A runtime variable watch window for Unreal Engine using ImGui, by @guitarfreak
https://github.com/guitarfreak/PropertyWatcher
263518750-2d26cc5b-a054-4200-ac5c-80d698e44d73


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

Don't miss a new imgui release

NewReleases is sending notifications on new releases.