Dear ImGui 1.91.6

Dear ImGui is a bloat-free graphical user interface library for C++. It outputs optimized vertex buffers that you can render anytime in your 3D-pipeline-enabled application. It is fast, portable, renderer agnostic, and self-contained (no external dependencies). Dear ImGui is designed to enable fast iterations and to empower programmers to create content creation tools and visualization / debug tools (as opposed to UI for the average end-user). It favors simplicity and productivity toward this goal and lacks certain features commonly found in more high-level libraries. Dear ImGui is particularly suited to integration in game engines (for tooling), real-time 3D applications, fullscreen applications, embedded applications, or any applications on console platforms where operating system features are non-standard. Minimize state synchronization. Minimize UI-related state storage on user side. Minimize setup and maintenance. Easy to use to create dynamic UI which are the reflection of a dynamic data set. Easy to use to create code-driven and data-driven tools. Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools. Easy to hack and improve. Portable, minimize dependencies, run on target (consoles, phones, etc.). Efficient runtime and memory consumption. Battle-tested, used by many major actors in the game industry.

Tags game ui gui api gamedev library framework game-engine game-development toolkit cpp c
License MITL
State alpha

Recent Releases

1.91.612 Dec 2024 09:05 minor feature: Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.6 Breaking changes: Backends: DX12: Changed ImGui_ImplDX12_Init() signature to take a ImGui_ImplDX12_InitInfo struct. - Using the new API, application is now required to pass function pointers to allocate/free SRV Descriptors. - We provide convenience legacy fields to pass a single descriptor, matching the old API, but upcoming features will want multiple. - Legacy ImGui_ImplDX12_Init() signature is still supported (will obsolete). Misc: changed CRC32 table from CRC32-adler to CRC32c polynomial in order to be compatible with the result of SSE 4.2 instructions. @Teselka . - As a result, some.ini data may be partially lost when storing checksums. (docking and tables information particularly). - Because some users have crafted and storing.ini data as a way to workaround limitations of the docking API, we are providing a '#define IMGUI_USE_LEGACY_CRC32_ADLER' compile-time option to keep using old CRC32 tables if you cannot afford invalidating old.ini data. Other changes: Error Handling: cases where recoverable error handling would crash when processing errors outside of the NewFrame()..EndFrame() scope.. Tables: SetNextWindowScroll() value being ignored by BeginTable() during the first frame or when scrolling flags have changed.. InputText: added ImGuiInputTextFlags_ElideLeft to elide left side and ensure right side of contents is visible when whole text is not fitting (useful for paths/filenames). @kucoman, @ocornut . InputText: reactivating last activated InputText() doesn't restore horizontal scrolling. (which was disabled during deactivation anyway). Misc: changed embedded ProggyClean encoding to save a bit of binary space ( 12kb to 9.5kb). Misc: added IMGUI_DISABLE_DEFAULT_FONT to strip embedded font from binary.. @demonese . Demo: example tree used by Property Editor Selection demos properly freed on application closure. @Legulysse . Fonts: AddCustomRect() n
1.91.529 Nov 2024 04:45 minor feature: Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.5 Breaking changes: Commented out pre-1.87 IO system (equivalent to using IMGUI_DISABLE_OBSOLETE_KEYIO or IMGUI_DISABLE_OBSOLETE_FUNCTIONS before). - io.KeyMap and io.KeysDown are removed (obsoleted February 2022). - io.NavInputs and ImGuiNavInput are removed (obsoleted July 2022). - Pre-1.87 backends are not supported: - backends need to call io.AddKeyEvent(), io.AddMouseEvent() instead of writing to io.KeysDown , io.MouseDown fields. - backends need to call io.AddKeyAnalogEvent() for gamepad values instead of writing to io.NavInputs fields. - For more references: - read 1.87 and 1.88 part of API BREAKING CHANGES in imgui.cpp or read Changelog for 1.87 and 1.88. - read https://github.com/ocornut/imgui//4921. - If you have trouble updating a very old codebase using legacy backend-specific key codes: consider updating to 1.91.4 first, then #define IMGUI_DISABLE_OBSOLETE_KEYIO, then update to latest. - Obsoleted ImGuiKey_COUNT (it is unusually error-prone/misleading since valid keys don't start at 0). Probably use ImGuiKey_NamedKey_BEGIN/ImGuiKey_NamedKey_END?. Fonts: removed const qualifiers from most font functions in prevision for upcoming fonts improvements. Other changes: Selectable: selected Selectables use ImGuiCol_Header instead of an arbitrary lerp between _Header and _HeaderHovered which was introduced v1.91. Buttons: using ImGuiItemFlags_ButtonRepeat makes default button behavior use PressedOnClick instead of PressedOnClickRelease when unspecified. InputText: a (regression in 1.91.2) where modifying text buffer within a callback would sometimes prevents further appending to the buffer. Tabs, Style: made ImGuiCol_TabDimmedSelectedOverline alpha 0 (not visible) in default styles as the current look is not right (but ImGuiCol_TabSelectedOverline stays the same). Log/Capture: added experimental io.ConfigWindowsCopyContentsWithCtrlC option to automatically copy
1.91.326 Nov 2024 07:25 minor feature: Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.3 Breaking changes: Drags: treat v_min==v_max as a valid clamping range when != 0.0f. Zero is still a special value due to legacy reasons, unless using ImGuiSliderFlags_ClampZeroRange.. Drags: extended behavior of ImGuiSliderFlags_AlwaysClamp to include _ClampZeroRange. It considers v_min==v_max==0.0f as a valid clamping range (aka edits not allowed). Although unlikely, it you wish to only clamp on text input but want v_min==v_max==0.0f to mean unclamped drags, you can use _ClampOnInput instead of _AlwaysClamp.. Other changes: Error Handling: Enabled/improved error recovery systems.. - Error recovery is provided as a way to facilitate: - Recovery after a programming error. Native code or scripting language (the later tends to facilitate iterating on code while running). - Recovery after running an exception handler or any error processing which may skip code after an error has been detected. - Error recovery is not perfect nor guaranteed! It is a feature to ease development. You not are not supposed to rely on it in the course of a normal application run. - Functions that support error recovery are using IM_ASSERT_USER_ERROR() instead of IM_ASSERT(). - By design, we do not allow error recovery to be 100 silent. One of the options needs to be enabled!. - Possible usage: facilitate recovery from errors triggered from a scripting language or after specific exceptions handlers. Surface errors to programmers in less aggressive ways. - Always ensure that on programmers seats you have at minimum Asserts or Tooltips enabled when making direct imgui API calls! Otherwise it would severely hinder your ability to catch and correct mistakes!. - Added io.ConfigErrorRecovery to enable error recovery support. - Added io.ConfigErrorRecoveryEnableAssert to assert on recoverable errors. - Added io.ConfigErrorRecoveryEnableDeLog to output to delog on recoverable errors. - Added io.ConfigErrorR
1.91.224 Nov 2024 18:25 minor bugfix: Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.2 Other changes: Added io.ConfigDeHighlightIdConflicts defeature! THIS DETECTS THE MOST COMMON USER ERROR BY FIRST-TIME DEAR IMGUI PROGRAMMERS!. - The tool detects when multiple items are sharing the same identifier, due to not using PushID/PopID in loops, or not using ID stack facilities such as "##" suf. Very frequently it happens when using empty "" labels. - When hovering an item with a conflicting ID, all visible items with the same ID will be highlighted and an explanatory tooltip is made visible. - The feature may be disabled and is exposed in Demo- Tools menu. - I've been wanting to add this tool for a long time, but was stalled by finding a way to not make it spammy + make it practically zero cost. After @pthom made various proposals to solve the same problem, I decided it was time to finish it. - Added ImGuiItemFlags_AllowDuplicateId to use with PushItemFlag()/PopItemFlag() if for some reason you intend to have duplicate identifiers. -. Nav: pressing any keyboard key while holding Alt disable toggling nav layer on Alt release.. MultiSelect+Tables: an where box-select would skip items while drag-scrolling in a table with outer borders. Inputs: SetNextItemShortcut() with ImGuiInputFlags_Tooltip doesn't show tooltip when item is active. InputText: internal refactoring to simplify and optimize the code. The ImWchar buffer has been removed. Simplifications allowed to implement new optimizations for handling very large text buffers. (e.g. in our testing, handling of a 1 MB text buffer is now 3 times faster in VS2022 Debuild). This is the first step toward more refactoring. @alektron, @ocornut . InputText: added CJK double-width punctuation to list of separators considered for CTRL+Arrow. Tables: auto-width columns when using synced-instances of same table. The previous done in v1.90.5 was incomplete.. Tables: assertion related to inconsistent outer clipping when s
1.91.123 Nov 2024 05:25 minor feature: Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.1 Breaking changes: BeginChild(): renamed ImGuiChildFlags_Border to ImGuiChildFlags_Borders for consistency. @cfillion Kept inline redirection flag (will obsolete). IO: moved clipboard functions from ImGuiIO to ImGuiPlatformIO: - io.GetClipboardTextFn - platform_io.Platform_GetClipboardTextFn. - io.SetClipboardTextFn - platform_io.Platform_SetClipboardTextFn. - in function signatures, changed 'void user_data' to 'ImGuiContext ctx' for consistency with other functions. Pull your user data from platform_io.ClipboardUserData if used. - as this is will affect all users of custom engines/backends, we are providing proper legacy redirection (will obsolete). IO: moved other functions from ImGuiIO to ImGuiPlatformIO: - io.PlatformOpenInShellFn - platform_io.Platform_OpenInShellFn. - io.PlatformSetImeDataFn - platform_io.Platform_SetImeDataFn. - io.PlatformLocaleDecimalPoint - platform_io.Platform_LocaleDecimalPoint. - access those via GetPlatformIO() instead of GetIO(). (Because PlatformOpenInShellFn and PlatformSetImeDataFn were introduced very recently and often automatically set by core library and backends, we are exceptionally not maintaining a legacy redirection symbol for those two.). Commented the old ImageButton() signature obsoleted in 1.89 ( August 2022).. - old ImageButton() used ImTextureId as item id (created with e.g. multiple buttons in same scope, transient texture id values, opaque computation of ID). - new ImageButton() requires an explicit 'const char str_id'. - old ImageButton() had frame_padding' override argument. - new ImageButton() always use style.FramePadding, which you can modify using PushStyleVar()/PopStyleVar(). Other changes: IO: Added GetPlatformIO() and ImGuiPlatformIO, pulled from 'docking' branch, which is a centralized spot to connect os/platform/renderer related functions. Clipboard, IME and OpenInShell hooks
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