Recent Releases
1.91.419 Oct 2024 23:05
major feature:
Breaking Changes:
Style: renamed ImGuiCol_NavHighlight to ImGuiCol_NavCursor, for consistency with newly exposed and reworked features. Kept inline redirection enum (will obsolete).
The typedef for ImTextureID now defaults to ImU64 instead of void*. (#1641)
This removes the requirement to redefine it for backends which are e.g. storing descriptor sets or other 64-bits structures when building on 32-bits archs (namely our DX12 and Vulkan backends). It therefore simplify various building scripts/helpers.
You may have compile-time warnings if you were casting to void* instead of ImTextureID when passing your types to functions taking ImTextureID values, e.g. ImGui::Image(). In doubt it is almost always better to do an intermediate intptr_t cast, since it allows casting any pointer/integer type without warning:
May warn: ImGui::Image((void*)MyTextureData, ...);
May warn: ImGui::Image((void*)(intptr_t)MyTextureData, ...);
Won't warn: ImGui::Image((ImTextureID)(intptr_t)MyTextureData), ...);
Note that you can always #define ImTextureID to be your own high-level structures (with dedicated constructors and extra render parameters) if you like.
IO: moved ImGuiConfigFlags_NavEnableSetMousePos to standalone io.ConfigNavMoveSetMousePos bool.
IO: moved ImGuiConfigFlags_NavNoCaptureKeyboard to standalone io.ConfigNavCaptureKeyboard bool (note the inverted value!). (#2517, #2009). Kept legacy names (will obsolete) + code that copies settings once the first time. Dynamically changing the old value won't work. Switch to using the new value!
Other changes:
IO: added void* platform_io.Renderer_RenderState which is set during the ImGui_ImplXXXX_RenderDrawData() of standard backends to expose selected render states to your draw callbacks. (#6969, #5834, #7468, #3590)
IO: io.WantCaptureKeyboard is never set when ImGuiConfigFlags_NoKeyboard is enabled. (#4921)
Error Handling: turned a few more funct
1.91.028 Aug 2024 15:45
major feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.0
Breaking changes:
IO, IME: renamed platform IME hook and added explicit context for consistency and future-proofness.
- old: io.SetPlatformImeDataFn(ImGuiViewport viewport, ImGuiPlatformImeData data);.
- new: io.PlatformSetImeDataFn(ImGuiContext ctx, ImGuiViewport viewport, ImGuiPlatformImeData data);
It is expected that for a vast majority of users this is automatically set by core
library and/or platform backend so it won't have any effect.
Obsoleted GetContentRegionMax(), GetWindowContentRegionMin() and GetWindowContentRegionMax().
You should never need those functions! You can do everything in less a confusing manner by only
using GetCursorScreenPos() and GetContentRegionAvail(). Also always consider that if you are using
GetWindowPos() and GetCursorPos() you may also be making things unnecessarily complicated.
I repeat: You can do everything with GetCursorScreenPos() and GetContentRegionAvail()!.
- GetWindowContentRegionMax().x - GetCursorPos().x -- GetContentRegionAvail().x.
- GetWindowContentRegionMax().x + GetWindowPos().x -- GetCursorScreenPos().x + GetContentRegionAvail().x // when called from left edge of window.
- GetContentRegionMax() -- GetContentRegionAvail() + GetCursorScreenPos() - GetWindowPos() // right edge in local coordinates.
- GetWindowContentRegionMax().x - GetWindowContentRegionMin().x -- GetContentRegionAvail() // when called from left edge of window.
Item flag changes:
- Obsoleted PushButtonRepeat()/PopButtonRepeat() in favor of using new PushItemFlag()/PopItemFlag()
with ImGuiItemFlags_ButtonRepeat. Kept inline redirecting functions (will obsolete).
- Obsoleted PushTabStop()/PopTabStop() in favor of using new PushItemFlag()/PopItemFlag()
with ImGuiItemFlags_NoTabStop. Kept inline redirecting functions (will obsolete).
- R
1.90.902 Jul 2024 03:16
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.9
Breaking changes:
Removed old nested structure: renaming ImGuiStorage::ImGuiStoragePair type to
ImGuiStoragePair (simpler for many languages). No significant nested type left.
BeginChild: added ImGuiChildFlags_NavFlattened as a replacement for the window
flag ImGuiWindowFlags_NavFlattened: the feature only ever made sense for
BeginChild() calls anyhow. @cfillion .
- old: BeginChild("Name", size, 0, ImGuiWindowFlags_NavFlattened);.
- new: BeginChild("Name", size, ImGuiChildFlags_NavFlattened, 0)
Kept inline redirection flag (will obsolete).
Style: renamed tab colors for clarity and consistency with other changes: (#261, #351).
- ImGuiCol_TabActive - ImGuiCol_TabSelected.
- ImGuiCol_TabUnfocused - ImGuiCol_TabDimmed.
- ImGuiCol_TabUnfocusedActive - ImGuiCol_TabDimmedSelected
Kept inline redirecting enums (will obsolete).
IO: io.ClearInputKeys() (first exposed in 1.89.8) doesn't clear mouse data.
Newly added io.ClearInputMouse() does..
Drag and Drop: renamed ImGuiDragDropFlags_SourceAutoExpirePayload to
ImGuiDragDropFlags_PayloadAutoExpire. Kept inline redirecting enum (will obsolete)..
Other changes:
IO: do not disable io.ConfigWindowsResizeFromEdges (which allow resizing from borders
and lower-left corner) when ImGuiBackendFlags_HasMouseCursors is not set by backend.
The initial reasoning is that resizing from borders feels better when correct mouse cursor
shape change as honored by backends. Keeping this enabling will hopefully increase pressure
on third-party backends to set ImGuiBackendFlags_HasMouseCursors and honor changes of
ImGui::GetMouseCursor() value..
IO: do not claim io.WantCaptureMouse=true on the mouse release frame of a button
which was pressed over void/underlying app, which is consistent/needed to allow the
mouse up event of a drag over void/underlying app to catch release. @Moka42 .
IO: Added io.ClearInputMouse() to clear
1.90.808 Jun 2024 02:05
minor bugfix:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.8
Breaking changes:
Reordered various ImGuiInputTextFlags values. This should NOT be breaking unless
you are using generated headers that have values not matching the main library.
Removed ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft
from imgui.h, was mostly unused and misleading.
Other changes:
Inputs: IsMouseClicked(..., repeat=true); broken in 1.90.7 on 2024/05/22.
(due to an internal api parameter swap, repeat wouldn't be honored and
ownership would be accidentally checked even though this api is meant to not
check ownership). @korenkonder .
Windows: altering FramePadding mid-frame not correctly affecting logic
responsible for honoring io.ConfigWindowsMoveFromTitleBarOnly..
Scrollbar: made scrolling logic more standard: clicking above or below the
grab scrolls by one page, holding mouse button repeats scrolling..
Scrollbar: miscalculation of vertical scrollbar visibility when required
solely by the presence of an horizontal scrollbar..
InputScalar, InputInt, InputFloat: added ImGuiInputTextFlags_ParseEmptyRefVal
to parse an empty field as zero-value. @supermerill, @ocornut .
InputScalar, InputInt, InputFloat: added ImGuiInputTextFlags_DisplayEmptyRefVal
to display a zero-value as empty. @supermerill, @ocornut .
Popups: an preventing to a popup opened over a modal by clicking
over void (it required clicking over the visible part of the modal)..
Tables: an where ideal size reported to parent container wouldn't
correctly take account of inner scrollbar, affecting potential auto-resize of
parent container..
Tables: a where after disabling the ScrollY flag for a table,
previous scrollbar width would be accounted for..
Combo: simplified Combo() API uses a list clipper (due to its api it wasn't
previously trivial before we added clipper.IncludeItemByIndex() function).
Disabled: nested tooltips or other non-child window within a BeginDi
1.90.728 May 2024 11:05
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.7
Breaking changes:
Inputs: on macOS X, Cmd and Ctrl keys are now automatically swapped by io.AddKeyEvent(),
as this naturally align with how macOS X uses those keys..
- Effectively it means that e.g. ImGuiMod_Ctrl ImGuiKey_C is a valid idiomatic shortcut
for both Windows and Mac style users.
- It shouldn't really affect your code unless you had explicit/custom shortcut swapping in
place for macOS X apps in your input logic.
- Removed ImGuiMod_Shortcut which was previously dynamically remapping to Ctrl or Cmd/Super.
It is now unnecessary to specific cross-platform idiomatic shortcuts.
Kept symbols redirecting ImGuiMod_Shortcut to ImGuiMod_Ctrl (will obsolete).
Commented out obsolete symbols renamed in 1.88 (May 2022):
CaptureKeyboardFromApp() - SetNextFrameWantCaptureKeyboard()
CaptureMouseFromApp() - SetNextFrameWantCaptureMouse().
Backends: SDL_Renderer2/SDL_Renderer3: ImGui_ImplSDLRenderer2_RenderDrawData() and
ImGui_ImplSDLRenderer3_RenderDrawData() now takes a SDL_Renderer parameter. This was previously
overlooked from the API but it will allow eventual support for multi-viewports.
Other changes:
Windows: BeginChild(): visibility of fully clipped child windows and tables to Test Engine.
Windows: BeginChild(): auto-fit calculation when using either (not both) ResizeX/ResizeY
and double-clicking on a border. Calculation incorrectly didn't always account for scrollbar as
it assumed the other axis would also be auto-fit..
Inputs: added shortcut and routing system in public API. BETA .
- The general idea is that several callers may register interest in a shortcut, and only one owner gets it.
- in Parent: call Shortcut(Ctrl+S) // When Parent is focused, Parent gets the shortcut.
- in Child1: call Shortcut(Ctrl+S) // When Child1 is focused, Child1 gets the shortcut (Child1 overrides Parent shortcuts).
- in Child2: no call // When Child2 is fo
1.90.609 May 2024 22:05
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.6
Breaking changes:
TreeNode: a layout inconsistency when using a empty/hidden label followed
by a SameLine() call.
Before: TreeNode("##Hidden"); SameLine(); Text("Hello");.
// This was actually incorrect! BUT appeared to look ok with the default style.
// where ItemSpacing.x == FramePadding.x 2 (it didn't look aligned otherwise).
After: TreeNode("##Hidden"); SameLine(0, 0); Text("Hello");.
// This is correct for all values in style.
With the, IF you were successfully using TreeNode("")+SameLine(); you will now
have extra spacing between your TreeNode and the following item. You'll need to change
the SameLine() call to SameLine(0,0) to remove this extraneous spacing.
This seemed like the more sensible that's not making things less consistent.
(Note: when using this idiom you are likely to also use ImGuiTreeNodeFlags_SpanAvailWidth).
Other changes:
Windows: Changed default ClipRect to extend to windows' left and right borders,
instead of adding arbitrary WindowPadding.x 0.5f space on left and right.
That ClipRect half-padding was arbitrary/confusing and inconsistent with Y axis.
It also made it harder to draw items covering whole window without pushing an
extended ClipRect. Some items near windows left and right edge that used to be clipped
may be partly more visible..
Windows: subsequent Begin() append calls from setting last item information
for title bar, making it impossible to use IsItemHovered() on a Begin()-to-append,
and causing bypassing hover detection on collapsed windows..
Fonts: font ascent and descent calculation when a font hits exact integer values.
It is possible that some prior manual use of ImFontConfig::GlyphOffset may become
duplicate with this. @GamingMinds-DanielC .
TreeNode: Added ImGuiTreeNodeFlags_SpanTextWidth to make hitbox and highlight only
cover the label. @dimateos .
Tables: Angled headers: multi-line label display when angle is flip
1.90.512 Apr 2024 11:45
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.5
Breaking changes:
More formally obsoleted GetKeyIndex() when IMGUI_DISABLE_OBSOLETE_FUNCTIONS is set.
It has been unnecessary and a no-op since 1.87 (it returns the same value as passed
when used with a 1.87+ backend using io.AddKeyEvent() function)..
- IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -- IsKeyPressed(ImGuiKey_XXX).
ImDrawList: Merged the radius_x/radius_y parameters in AddEllipse(), AddEllipseFilled()
and PathEllipticalArcTo() into a single ImVec2 parameter. Exceptionally, because those
functions were added recently in 1.90, we are not adding inline redirection functions.
The transition is easy and should affect few users. @cfillion .
Other changes:
Windows: Scrollbar visibility decision uses current size when both size and contents
size are submitted by API..
Windows: Double-click to collapse may be disabled via key-ownership mechanism..
Windows: BeginChild(): Extend outer resize borders to the edges when there are no corner
grips. Essentially affects resizable child windows. @cfillion .
Windows: BeginChild(): Resizing logic for child windows evaluates whether per-axis clamping
should be applied based on parent scrollbars, not child scrollbars. @cfillion
Adjust those resizing limits to match window padding rather than inner clipping rectangle.
Tables: auto-width columns when using synced-instances of same table, width of
one instance would bleed into next one instead of sharing their widths..
Tables: Angled headers: border hit box extending beyond when used within
non-scrollable tables. @cfillion .
Tables: Angled headers: borders not moving back up after TableAngleHeadersRow()
stops being called. @cfillion .
Tables: Angled headers: rounding header size to nearest integers, some when using clipper.
Menus, Popups: an where sibling menu popups re-opening in successive
frames would erroneously the window. While it is technically a popup it woul
1.90.424 Feb 2024 03:05
minor bugfix:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.4
Other changes:
Nav: SetKeyboardFocusHere() or programmatic tabbing API from not working on
windows with the ImGuiWindowFlags_NoNavInputs flag (regression in 1.90.2, which
among other things broke imgui_memory_editor).
Menus, Popups: an where hovering a parent-menu upward would
erroneously the window..
Popups: resizable popup minimum size being too small. Standardized minimum
size logic.
Modals: Temporary changes of ImGuiCol_ModalWindowDimBg are properly handled by
BeginPopupModal()..
Tables: Angled headers: support for multi-line labels..
Tables: Angled headers: various to accurately handle CellPadding changes..
Tables: Angled headers: properly registers horizontal component of angled headers
for auto-resizing of columns..
Tables: Angled headers: TableAngledHeadersRow() incorrect background fill
drawn too low, particularly visible with tables that have no scrolling..
ProgressBar: a minor tesselation when rendering rounded progress bars,
where in some situations the rounded section wouldn't follow regular tesselation rules.
DeTools: Item Picker: Promoted ImGui::DetartItemPicker() to public API..
DeTools: Item Picker: Menu entry visible in Demo- Tools but greyed out unless
io.ConfigDeIsDegerPresent is set..
Misc: Added optional alpha multiplier parameter to GetColorU32(ImU32) variant.
Demo: Custom Rendering: better demonstrate PathArcTo(), PathBezierQuadraticCurveTo(),
PathBezierCubicCurveTo(), PathStroke(), PathFillConvex() functions.
.
1.90.315 Feb 2024 19:05
minor feature:
Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.90.3
Breaking changes:
Backends: SDL2: Removed obsolete ImGui_ImplSDL2_NewFrame(SDL_Window*) signature which
was obsoleted in 1.84. Calling ImGui_ImplSDL2_NewFrame() is fine.
Backends: Vulkan: Moved RenderPass parameter from ImGui_ImplVulkan_Init() function to
ImGui_ImplVulkan_InitInfo structure. Not required when using dynamic rendering. @shawnhatori .
Backends: Vulkan: Using dynamic rendering now require filling the PipelineRenderingCreateInfo
structure in ImGui_ImplVulkan_InitInfo, allowing to configure color/depth/stencil formats.
Removed ColorAttachmentFormat field previously provided for dynamic rendering.
@shawnhatori .
Other changes:
Menus, Popups: menus and popups with ChildWindow flag erroneously not displaying
a scrollbar when contents is over parent viewport size. @ZingBallyhoo .
Backends: SDL2, SDL3: Handle gamepad disconnection + increasing gamepad reference
counter continuously. Added support for multiple simultaneous gamepads.
Added ImGui_ImplSDL2_SetGamepadMode()) function to select whether to automatically pick
first available gamepad, all gamepads, or specific gamepads.
@ocornut, @lethal-guitar, @wn2000, @bog-dan-ro .
BackendsL SDL3: gamepad handling. @bog-dan-ro .
Backends: SDLRenderer3: query newly added SDL_RenderViewportSet() to not restore
a wrong viewport if none was initially set.
Backends: DirectX9: Using RGBA format when allowed by the driver to avoid CPU side
conversion. @Demonese .
Internals: ImFileOpen not working before context is created, preventing creation
of a font atlas before main context creation. @PathogenDavid, @ocornut .
.
1.90.210 Feb 2024 00:03
major bugfix:
Breaking changes:
- Commented out ImGuiIO::ImeWindowHandle obsoleted in 1.87 in favor of writing
to 'void* ImGuiViewport::PlatformHandleRaw'.
- Backends: WebGPU: ImGui_ImplWGPU_Init() now takes a ImGui_ImplWGPU_InitInfo structure
instead of variety of parameters, allowing for easier further changes. (#7240)
Other changes:
- Nav: keyboard/gamepad activation mark widgets as held to give better visual feedback.
- Nav: tweak to logic marking navigated item as hovered when using keyboard, allowing
the hover highlight to stay even while another item is activated.
- Nav: Fixed SetKeyboardFocusHere() not working when current nav focus is in different scope,
regression from 1.90.1 related to code scoping Tab presses to local scope. (#7226) @bratpilz
- Nav: Fixed pressing Escape while in a child window with _NavFlattened flag. (#7237)
- Nav: Improve handling of Alt key to toggle menu so that key ownership may be claimed on
individual left/right alt key without interfering with the other.
- Nav, Menus: Fixed click on a BeginMenu() followed by right-arrow from making the child menu
reopen and flicker (using ImGuiPopupFlags_NoReopen).
- Nav: ImGuiWindowFlags_NoNavInputs is tested during scoring so NavFlattened windows can use it.
- Popups: OpenPopup(): added ImGuiPopupFlags_NoReopen flag to specifically not close and reopen
a popup when it is already open. (#1497, #1533)
(Note that this differs from specific handling we already have in place for the case of calling
OpenPopup() repeatedly every frame: we already didn't reopen in that specific situation, otherwise
the effect would be very disastrous in term of confusion, as reopening would steal focus).
- Popups: Slight change to popup closing logic (e.g. after focusing another window) which skipped
over popups that are also child windows.
- Combo: Fixed not reusing windows optimally when used inside a popup stack.
- Debug Tools: Metrics: Fixed debug break in SetShortcutRouting() not handling ImGuiMod_Sh