github ocornut/imgui v1.91.9

latest release: v1.91.9-docking
one day ago

v1.91.9

❤️ Last summer was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉
Reading the changelog is a good way to keep up to date with what Dear ImGui has to offer, and will give you ideas of some features that you've been ignoring until now!
📣 If you are browsing multiple releases: click version number above to display full release note contents, otherwise it is badly clipped by GitHub!


Links: Homepage - Release notes - FAQ - Issues, Q&A. Also see our Wiki with sections such as..

Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.

❤️ Thanks to recent years sponsors ❤️

❤️ And many individuals ❤️

Thanks to @GamingMinds-DanielC, @PathogenDavid & more for their help with GitHub answers!


Changes (since v1.91.8)

Breaking Changes:

  • Image: removed tint_col and border_col parameter from Image() function. (#8131, #8238)
    • Old function signature:
      void Image (ImTextureID tex_id, ImVec2 image_size, ImVec2 uv0 = (0,0), ImVec2 uv1 = (1,1), ImVec4 tint_col = (1,1,1,1), ImVec4 border_col = (0,0,0,0));
    • New function signatures:
      void Image (ImTextureID tex_id, ImVec2 image_size, ImVec2 uv0 = (0,0), ImVec2 uv1 = (1,1));
      void ImageWithBg(ImTextureID tex_id, ImVec2 image_size, ImVec2 uv0 = (0,0), ImVec2 uv1 = (1,1), ImVec4 bg_col = (0,0,0,0), ImVec4 tint_col = (1,1,1,1));
    • TL;DR: border_col had misleading side-effect on layout, bg_col was missing, parameter order couldn't be consistent with ImageButton().
    • New behavior always use ImGuiCol_Border color + style.ImageBorderSize / ImGuiStyleVar_ImageBorderSize.
    • Old behavior altered border size (and therefore layout) based on border color's alpha, which caused variety of problems.
    • Old behavior used a fixed value of 1.0f for border size which was not tweakable.
    • Kept legacy signature (will obsolete), which mimics the old behavior, but uses Max(1.0f, style.ImageBorderSize) when border_col is specified.
    • Added ImageWithBg() function which has both bg_col (which was missing and most useful) and tint_col. It was impossible to add bg_col to Image() with a parameter order consistent with other functions, so we decided to remove tint_col and introduce ImageWithBg().
  • Renamed ImFontConfig::GlyphExtraSpacing.x option to GlyphExtraAdvanceX. (#242)
  • Renamed style.TabMinWidthForCloseButton to style.TabCloseButtonMinWidthUnselected.
  • Backends: Vulkan: Added uint32_t api_version argument to ImGui_ImplVulkan_LoadFunctions(). Note that it was also added to ImGui_ImplVulkan_InitInfo() but for the later it is optional. (#8326, #8365, #8400)
  • Internals: Menus: reworked mangling of menu windows to use "###Menu_00" etc. instead of "##Menu_00", allowing them to also store the menu name before it. This shouldn't affect code unless directly accessing menu window from their mangled name.

Other changes:

  • Fixed IsItemDeactivatedAfterEdit() signal being broken for Checkbox(), RadioButton(), Selectable(). Regression from 2025/01/13. (#8370)
  • Windows: Fixed an issue where BeginChild() inside a collapsed Begin() wouldn't inherit the SkipItems flag, resulting in missing coarse clipping opportunities for code not checking the BeginChild() return value.
  • Windows, Style: Added style.WindowBorderHoverPadding setting to configure inner/outer padding applied to hit-testing of windows borders and detection of hovered window.
  • InputText: Allow CTRL+Shift+Z to redo even outside of OSX. (#8389) [@tanksdude]
  • InputText: Pasting a multi-line buffer into a single-line edit replaces carriage return by spaces. (#8459)
  • InputTextWithHint(): Fixed buffer-overflow (luckily often with no visible effect) when a user callback modified the buffer contents in a way that altered the visibility of the preview/hint buffer. (#8368) [@m9710797, @ocornut]
  • Scrollbar: Rework logic that fades-out scrollbar when it becomes too small, which amusingly made it disappear when using very big font/frame size.
  • Scrollbar: Automatically stabilize ScrollbarX visibility when detecting a feedback loop manifesting with ScrollbarX visibility toggling on and off repeatedly. (#8488, #3285, #4539) (feedback loops of this sort can manifest in various situations, but combining horizontal + vertical scrollbar + using a clipper with varying width items is one frequent cause. The better solution is to, either: (1) enforce visibility by using ImGuiWindowFlags_AlwaysHorizontalScrollbar or (2) declare stable contents width with SetNextWindowContentSize(), if you can compute it.)
  • Tables: fixed calling SetNextWindowScroll() on clipped scrolling table to not leak the value into a subsequent window. (#8196)
  • Tables: fixed an issue where Columns Visible/Width state wouldn't be correctly restored when hot-reloading .ini state. (#7934)
  • Tables: tamed some .ini settings optimizations to more accurately allow overwriting/hot-reloading settings in more situations. (#7934)
  • Tables, Error Handling: Recovery from invalid index in TableSetColumnIndex(). (#1651)
  • Image: Added ImageWithBg() variant with bg color and tint color. (#8131, #8238)
  • Image, Style: Added style.ImageBorderSize, ImGuiStyleVar_ImageBorderSize. (#8131, #8238)
  • Selectable: Fixed horizontal label alignment with SelectableTextAlign.x > 0.0f and specifying a selectable size. (#8338)
  • Tabs, Style: made the Close Button of selected tabs always visible by default, without requiring to hover the tab. (#8387)
    • Added style.TabCloseButtonMinWidthSelected/TabCloseButtonMinWidthUnselected settings to configure visibility of the Close Button for selected and unselected tabs. (-1: always visible. 0.0f: visible when hovered. >0.0f: visible when hovered if minimum width)
    • Default for selected tabs: TabCloseButtonMinWidthSelected == -1.0f (always visible)
    • Default for unselected tabs: TabCloseButtonMinWidthUnselected == 0.0f (visible when hovered)
  • Tabs: fixed middle-mouse-button to close tab not checking that close button is hovered, merely its visibility. (#8399, #8387) [@nicovanbentum]
  • TextLink(), TextLinkOpenURL(): fixed honoring text baseline alignment. (#8451, #7660) [@achabense]
  • TextLinkOpenURL(): fixed default Win32 io.PlatformOpenInShellFn handler to handle UTF-8 regardless of system regional settings. (#7660) [@achabense]
  • Disabled: Fixed an issue restoring Alpha in EndDisabled() when using nested BeginDisabled() calls with PushStyleVar(ImGuiStyleVar_DisabledAlpha) within. (#8454, #7640)
  • Clipper: Fixed an issue where passing an out of bound index to clipper.IncludeItemByIndex() could incorrectly offset the final cursor, even if that index was not iterated through. One case where it would manifest was calling Combo() with an out of range index. (#8450)
  • Debug Tools: Added io.ConfigDebugHighlightIdConflictsShowItemPicker (defaults to true) to allow disabled Item Picker suggestion in user facing builds. (#7961, #7669)
  • Debug Tools: Tweaked layout of ID Stack Tool and always display full path. (#4631)
  • Misc: Various zealous warning fixes for newer version of Clang.
  • Misc: Added ImGuiMouseCursor_Wait and ImGuiMouseCursor_Progress mouse cursors (busy/wait/hourglass shape, with or without an arrow cursor).
  • Demo: Reorganized "Widgets" section to be alphabetically ordered and split in more functions.
  • Demo: Combos: demonstrate a very simple way to add a filter to a combo, by showing the filter inside the combo contents. (#718)
  • Examples: SDL3: Added comments to clarify setup for users of the unfortunate SDL_MAIN_USE_CALLBACKS feature. (#8455)
  • IO: Added ImGuiKey_Oem102 to ImGuiKey enum. (#7136, #7201, #7206, #7306, #8468)
  • Backends: reworked key handlers to use/prioritize untranslated scancodes instead of translated keycodes when dealing with OEM keys which are too difficult to find a reliable translated mapping on all systems, backends and keyboard layout. (#7136, #7201, #7206, #7306, #7670, #7672, #8468)
    • The affected keys are: ImGuiKey_Apostrophe, ImGuiKey_Comma, ImGuiKey_Minus, ImGuiKey_Period, ImGuiKey_Slash, ImGuiKey_Semicolon, ImGuiKey_Equal, ImGuiKey_LeftBracket, ImGuiKey_RightBracket, ImGuiKey_Backslash, ImGuiKey_GraveAccent, and newly introduced ImGuiKey_Oem102.
    • This is NOT affecting characters used the text inputs.
    • Fixes many cases of keys not emitting a ImGuiKey value with certain keyboard layouts.
    • Makes emitted ImGuiKey values more consistent regardless of keyboard mapping, but you may be getting different values as before.
    • Win32, SDL2, SDL3: Use scancodes for OEM keys.
    • GLFW: GLFW_KEY_WORLD_1 and GLFW_KEY_WORLD_2 are emitting ImGuiKey_Oem102.
  • Backends: GLFW: Fixed clipboard handler assertion when using GLFW <= 3.2.1 compiled with asserts enabled. (#8452)
  • Backends: SDL2, SDL3: Using SDL_OpenURL() in platform_io.Platform_OpenInShellFn handler. (#7660) [@achabense]
  • Backends: SDL2, SDL3, Win32, Allegro5: Added support for ImGuiMouseCursor_Wait and ImGuiMouseCursor_Progress cursors.
  • Backends: SDL2, SDL3: Avoid calling SDL_GetGlobalMouseState() when mouse is in relative mode. (#8425, #8407) [@TheMode]
  • Backends: SDL2, SDL3: Only start SDL_CaptureMouse() when mouse is being dragged, to mitigate issues with e.g. Linux debuggers not claiming capture back on debug break. (#6410, #3650)
  • Backends: OpenGL3: Lazily reinitialize embedded GL loader for when calling backend from e.g. other DLL boundaries. (#8406)
  • Backends: DirectX12: Fixed an issue where pre-1.91.5 legacy ImGui_ImplDX12_Init() signature started breaking in 1.91.8 due to missing command queue. (#8429)
  • Backends: Metal: Fixed a crash on application resources. (#8367, #7419) [@anszom]
  • Backends: Vulkan: Added ApiVersion field in ImGui_ImplVulkan_InitInfo. Default to header version if unspecified. (#8326, #8365) [@mklefrancois]
  • Backends: Vulkan: Dynamic rendering path loads "vkCmdBeginRendering"/"vkCmdEndRendering" (without -KHR suffix) on API 1.3. (#8326, #8365) [@mklefrancois]
  • Backends: WebGPU: Recreate image bind groups during render to allow reuse of WGPUTextureView pointers. (#8426, #8046, #7765, #8027) [@pplux, @Jairard]
  • Backends: WebGPU: Fix for DAWN API change WGPUProgrammableStageDescriptor -> WGPUComputeState. [@PhantomCloak] (#8369)
  • Backends: WebGPU: Fix for webgpu-native API changes. (#8426) [@pplux]

Changes from 1.91.8 to 1.91.9 specific to the Docking+Multi-Viewports branch:

  • Docking: Removed legacy assert preventing to call DockBuilderSplitNode() on an existing split node. This makes using (technically internal) DockBuilder a little more flexible and bearable! (#8472) [@MegaMech]
  • Viewports: fixed an issue where in certain cases, a window repositioning leading to a monitor change could have the window incorrectly get clamped within the boundaries of its previous monitor. Would happen e.g. when loading .ini data during runtime. (#8484)
  • Viewports: fixed an assert when a window load settings with a position outside monitor bounds, when there are multiple monitors. (#8393, #8385) [@gaborodriguez]
  • Viewports + Backends: Win32: Fixed setting title bar text when applicationis compiled without UNICODE. (#7979, #5725) [@lailoken]
  • Backends: GLFW, SDL2/SDL3: Update monitors and work areas information every frame, as the later may change regardless of monitor/display changes. (#8415)
  • Backends: Win32: WM_SETTINGCHANGE's SPI_SETWORKAREA message also triggers a refresh of monitor list, as they contain work area information. (#8415) [@PathogenDavid, @lailoken]

Gallery

@drhelius: Geargrafx - A new PC Engine / TurboGrafx-16 emulator I’m currently working on:
https://github.com/drhelius/Geargrafx
geargrafx_debug_02

@sava41: "Finished my 2d canvas + image editor. Uses ImGui and webgpu so you can try it in your browser"
https://github.com/sava41/miskeenity-canvas

@qbart: "Hi, here is a small contribution to ImGui ecosystem: AnimationCurve based on Cubic Hermite Splines - it splits the AnimationCurve into runtime and its editor in ImGUI. Feel free to copy and adapt it to your needs"
code links

curve.mp4

@howprice "Here's a screenshot of Aira Force, an interactive disassembler, emulator and debugger for classic Amiga software. Thanks a million for Dear Imgui!"
https://howprice.itch.io/aira-force
Image

@zzrat "Hi, here's a screenshot of zzrat, a remote desktop and file transfer tool that I'm currently working on."
https://github.com/zzrat/zzrat
zzrat

Kickstarter for DeathTower "overclocked roguelite tactical RPG" shows Dear ImGui tooling:
https://www.kickstarter.com/projects/headbangclub/deathtower-the-overclocked-roguelite-tactical-rpg
Image

@philsajdak: "Here is a kernel-level forensics/debugging application I have currently been working on. It works with physical memory directly via memory mapping on processes, drivers, and more."
Image
Image

SatDump: A generic satellite data processing software.
https://github.com/SatDump/SatDump
e.g. video https://x.com/amsatdl/status/1897708906115174537

AMSAT-DL.-.The.moment.IM2.Athena.@Int_Machines.landed.on.the.Moon.Touchdown.17_28_50UTC.2025-03-06.as.received.by.the.20m.Bochum.radio.telescope.@SternwarteBO.1897708437024153600.mp4

Image
Image

@Omar-Chatila: "Motion Files Framework to compare trajectories for motor actions like squats. Part of my bachelor thesis. two motion files are compared and aligned using DTW, Frechet Matchings, Edit Distance (and variations) etc. Plots for cost matrix, alignment path, quality of alignment etc. "
Image

Midnight Murder Club internal tooling by Velan Studios (game released yesterday!)
https://store.steampowered.com/app/2698870/Midnight_Murder_Club/
Midnight Murder Club


Read more gallery posts.


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.

❤️ Last summer was the 10th anniversary of v1.00! Read: 10 years of Dear ImGui ! 🎉

💰 🙏 Dear ImGui is funded by your contributions and absolutely needs them to sustain and grow. We can invoice and accommodate to many situations. If your company uses Dear ImGui, please reach out. See Funding page. Did you know? If you need an excuse to pay, you may buy licenses for Test Engine and buy hours of support (and cough not use them all) and that will contribute to fund Dear ImGui.

Don't miss a new imgui release

NewReleases is sending notifications on new releases.