Skip to content

v1.89.7

Compare
Choose a tag to compare
@ocornut ocornut released this 04 Jul 14:26
· 479 commits to master since this release

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:

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 to style.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. Use SetNextItemAllowOverlap() before item instead.
    • Added SetNextItemAllowOverlap() (called before an item) as a replacement for using SetItemAllowOverlap() (called after an item). This is roughly equivalent to using the legacy SetItemAllowOverlap() call (public API) + ImGuiButtonFlags_AllowOverlap (internal).
    • Renamed 'ImGuiTreeNodeFlags_AllowItemOverlaptoImGuiTreeNodeFlags_AllowOverlap` for consistency.
    • Renamed ImGuiSelectableFlags_AllowItemOverlap to ImGuiSelectableFlags_AllowOverlap for consistency.
    • Kept redirecting enums (will obsolete).

Other Changes:

  • Tooltips/IsItemHovered() related changes:
    • Tooltips: Added SetItemTooltip() and BeginItemTooltip() helper functions.
      They are shortcuts for the common idiom of using IsItemHovered().
      • SetItemTooltip("Hello") == if (IsItemHovered(ImGuiHoveredFlags_Tooltip)) { SetTooltip("Hello"); }
      • BeginItemTooltip() == IsItemHovered(ImGuiHoveredFlags_Tooltip) && BeginTooltip()
        The newly added ImGuiHoveredFlags_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. Added style.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 from style.HoverFlagsForTooltipMouse or style.HoverFlagsForTooltipNav depending on active inputs. (#1485)
      • style.HoverFlagsForTooltipMouse defaults to ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort.
      • style.HoverFlagsForTooltipNav defaults to ImGuiHoveredFlags_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 of style.HoverDelayShort from 0.10 to 0.15. (#1485)
    • IsItemHovered: Added ImGuiHoveredFlags_AllowWhenOverlappedByWindow to ignore window-overlap only. Option ImGuiHoveredFlags_AllowWhenOverlapped now expand into a combination of both _AllowWhenOverlappedByWindow + _AllowWhenOverlappedByItem, matching old behavior.
  • 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)
  • 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 when IMGUI_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 set init_info->UseDynamicRendering = true and init_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() to DefWindowProcW() to match other examples
    and support the example app being compiled without UNICODE. (#6516, #5725, #5961, #5975) [@yenixing]

Changes from 1.89.6 to 1.89.7 related to the docking branch (multi-viewport and docking features):

  • Viewports+Docking: Fixed extraneous viewport+platform-window recreation in various combination of showing or hiding windows, docking with/without split, undocking. While with some backends and without OS decorations, some extraneous window recreation were visibly not noticeable, they would typically become noticeable when enabling OS decorations on those windows (e.g. Windows title bar fade-in/animation).
  • Viewports: Closing a viewport via OS/platform means (e.g. OS close button or task-bar menu), mark all windows in this viewport as closed.
  • Docking: Fixed one-frame flickering on reappearing windows binding to a dock node where a later-submitted window was already bound.
  • Docking: Fixed dragging from title-bar empty space (regression from 1.88 related to keeping ID alive when calling low-level ButtonBehavior() directly). (#5181, #2645)
  • Docking: [Internal] DockBuilderDockWindow() API calls don't clear docking order if the target node is same as existing one.
  • Backends: Win32: Added support for changing ParentViewportID after viewport creation.

Changes from 1.89.6 to 1.89.7 related to the range-select branch: (aimed to finish, apply some api changes and merge in 1.90):

  • RangeSelect/MultiSelect: (BREAKING) In ImGuiMultiSelectIO, renamed "RangeSrc" -> "RangeSrcItem", "RangeDst" -> "RangeDstItem". "RangeValue" -> "RangeSelected". This is designed to make things more consistent with upcoming features and polish/merge of the branch.
  • RangeSelect/MultiSelect: Removed the need for polling IsItemToggledSelection() and toggling per-item selection. This can now be completely handled by the BeginMultiSelect() and EndMultiSelect() requests.
  • RangeSelect/MultiSelect: Removed ImGuiMultiSelectFlags_NoUnselect because I currently can't find use for this specific design.
  • RangeSelect/MultiSelect: Update various comments. Simplified/tidied up internal code.

New exciting projects!

Since 1.89 we semi-sneakily soft launched two new entire projects!

Dear ImGui Automation/Test Engine & Test Suite
https://github.com/ocornut/imgui_test_engine

Dear Bindings: alternative binding generator for C and other languages by @ShironekoBen (as an alternative to good old cimgui).
https://github.com/dearimgui/dear_bindings

Gallery

Below a selection of screenshots from Gallery threads...

@eleriaqueen: "WIP modding tool for a somewhat retro game made with my limited programming knowledge and skills."
Screenshot_20230530_204531

@alipbcs: "I used ImGui, ImPlot, and imnodes in my hobby real-time renderer. Full source code available on GitHub."
3

@lucabart97: TII Unimore Racing, a University of Modena and Reggio Emilia team.
"This is our perception stack completing a full lap in Autodromo Nazionale Monza using LiDAR localization only during Indy Autonomous Challenge."
Video:
TII Unimore Racing

"Spotted in S.T.A.L.K.E.R. 2: Heart of Chornobyl."
out2087

@sarchar: "RDS (Retro Disassembler Studio) aims to be a complete disassembler tool for retro systems. Currently, the only supported system is the Nintendo Entertainment System (NES) but others are planned for the future."
https://github.com/sarchar/RetroDisassemblerStudio
image

@qoala101: "PONC is the graphical tool used by telecommunication engineers to design, manage, and optimize Passive Optical Network layouts."
https://github.com/qoala101/ponc
Feature 3

@gboisse: "Some shots from the ImGui-based editor we used to produce our Revision 2023 demo: Reality Check"
https://www.pouet.net/prod.php?which=94177
"Dear ImGui has been amazing from the start and remains a pleasure to work with 馃檪"
behind_the_scenes-00

@tildearrow: "Furnace - a multi-system chiptune tracker with support for many chips and a customizable interface."
https://github.com/tildearrow/furnace
Furnace

@aiekick "Just for fun. see my WIP ToolBar :)"
ImCoolbar: https://github.com/aiekick/ImCoolBar
ImCoolBarApp_WIn32_cpUeIWSPfZ

@RorySoh: "Nin Online is an MMORPG that started development in 2013 and launched in 2017 built with a Visual Basic 6 engine. In recent years, we ported the game to C# with .NET Framework. Now, we're using .NET 6 and all our UI systems have been replaced with just ImGui (We had 6 separate systems, including WinForms for our in-game editor suite). The HUD and every UI piece in the screen is also ImGui. There's actually a lot more cool stuff in the game, like animated UI elements that are done in ImGui. Performance has been amazing too." [..] "Thank you @ocornut and all the contributors for ImGui, it's amazing."
https://www.ninonline.org
MapEditor
Here are more screenshots! https://imgur.com/a/6urSiYC

@pixtur Tooll v3.6
www.tooll.io
image

@ta-david-yu "I made an editor for my ECS game engine - DYEngine. I can't live without Dear ImGui anymore, it's so useful. " Here is a feature highlight video: https://youtu.be/ZrwCcynemSA
DYEngineEditor_Screenshot


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