Dear ImGui 1.91.0

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 initial

Recent Releases

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