Skip to content

Releases: ocornut/imgui

v1.87

07 Feb 17:19
Compare
Choose a tag to compare

1.87: The event-based IO 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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌

📢 Got visual glitches with custom/old backend when using CTRL+Tab or Modal Windows? See 1.86 release note.

📢 EDIT 2022/02/21: A regression in 1.87 prevents direct access to legacy io.KeysDown[] array in certains situations (see #4921, now fixed in latest). IsKeyDown() function was not affected.

Thank you!

Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @thedmd for their contribution to this verison.
Special thanks to @PathogenDavid for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by companies such as:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

This is a rather "boring" release in the sense that the refactor are not super exciting per se, but they are going to enable quite a few good things. Backends for all platforms have been updated. Most of the IO API hadn't changed this 1.0!

  • Revamped the way for backend submit data to ImGuiIO. Now using functions e.g. io.AddKeyEvent(). The vast majority of changes are backward compatible but you are encouraged to update your backends now. See full recap > #4921.
  • Added full range of ImGuiKey values, making it possible to access keys in a backend-agnostic way and make it easier to share code (e.g. for third-party libraries using Dear ImGui).
  • Most platfom backends have been reworked to submit events.
  • Backward compatible: 99% of old backends (custom or standard) and app code will still work (but consider updating!)
  • Fixed SDL and GLFW backends to submit translated keys (not same as characters) to facilitate using shortcuts with ImGuiKey values.
  • Trickling input queue improve usability on very low framerate (e.g. <15 FPS).
  • Variety of other fixes (popups, ctrl+tab).

image

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Removed support for pre-C++11 compilers. We'll stop supporting VS2010. (#4537)
  • Reworked IO mouse input API: (#4921, #4858) [@thedmd, @ocornut]
    • Added io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() functions, obsoleting writing directly to io.MousePos, io.MouseDown[], io.MouseWheel, etc.
    • This enable input queue trickling to support low framerates. (#2787, #1992, #3383, #2525, #1320)
    • For all new calls to IO functions, the Dear ImGui context should be bound/current.
  • Reworked IO keyboard input API: (#4921, #2625, #3724) [@thedmd, @ocornut]
    • Added io.AddKeyEvent() function, obsoleting writing directly to io.KeyMap[], io.KeysDown[] arrays.
    • For keyboard modifiers, you must call io.AddKeyEvent() with ImGuiKey_ModXXX values, obsoleting writing directly to io.KeyCtrl, io.KeyShift etc.
    • Added io.SetKeyEventNativeData() function (optional) to pass native and old legacy indices.
    • Added full range of key enums in ImGuiKey (e.g. ImGuiKey_F1).
    • Added GetKeyName() helper function.
    • Obsoleted GetKeyIndex(): it is now unnecessary and will now return the same value.
    • All keyboard related functions taking 'nt user_key_index now take ImGuiKey key: IsKeyDown(), IsKeyPressed(), IsKeyReleased(), GetKeyPressedAmount().
    • Added io.ConfigInputTrickleEventQueue (defaulting to true) to disable input queue trickling.
    • Backward compatibility:
      • All backends updated to use new functions.
      • Old backends populating those arrays should still work!
      • Calling e.g. IsKeyPressed(MY_NATIVE_KEY_XXX) will still work! (for a while)
      • Those legacy arrays will only be disabled if #define IMGUI_DISABLE_OBSOLETE_KEYIO'is set in your imconfig. In a few versions, IMGUI_DISABLE_OBSOLETE_FUNCTIONS will automatically enable IMGUI_DISABLE_OBSOLETE_KEYIO, so this will be moved into the regular obsolescence path.
      • BREAKING: (unlikely) If your custom backend used ImGuiKey as mock native indices (e.g. io.KeyMap[ImGuiKey_A] = ImGuiKey_A`` this is a use case that will now assert and be breaking for your old backend. **- Transition guide:** **- IsKeyPressed(MY_NATIVE_KEY_XXX) -> useIsKeyPressed(ImGuiKey_XXX)`
      • IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -> use `IsKeyPressed(ImGuiKey_XXX)
      • Backend writing to io.KeyMap[],KeysDown[] -> backend should call io.AddKeyEvent(), if legacy indexing is desired, call io.SetKeyEventNativeData()**
      • Basically the trick we took advantage of is that we previously only supported native keycode from 0 to 511, so ImGuiKey values can still express a legacy native keycode, and new named keys are all >= 512.
    • This will enable a few things in the future:
      • Access to portable keys allows for backend-agnostic keyboard input code. Until now it was difficult to share code using keyboard across project because of this gap. (#2625, #3724)
      • Access to full key ranges will allow us to develop a proper keyboard shortcut system. (#456)
      • `io.SetKeyEventNativeData() include native keycode/scancode which may later be exposed. (#3141, #2959)
  • Reworked IO nav/gamepad input API and unifying inputs sources: (#4921, #4858, #787)
    • Added full range of ImGuiKey_GamepadXXXX enums (e.g. ImGuiKey_GamepadDpadUp, ImGuiKey_GamepadR2) to use with io.AddKeyEvent(), io.AddKeyAnalogEvent().
    • Added io.AddKeyAnalogEvent() function, obsoleting writing directly to io.NavInputs[] arrays.
  • Renamed ImGuiKey_KeyPadEnter to ImGuiKey_KeypadEnter to align with new symbols. Kept redirection enum. (#2625)
  • Removed support for legacy arithmetic operators (+,+-,*,/) when inputing text into a slider/drag. (#4917, #3184)
    This doesn't break any API/code but a feature that was accessible by end-users (which seemingly no one used). (Instead you may implement custom expression evaluators to provide a better version of this).
  • Backends: GLFW: backend now uses glfwSetCursorPosCallback().
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=true: nothing to do. is already done for you.
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=false: you WILL NEED to register the GLFW callback
      using glfwSetCursorPosCallback() and forward it to the backend function ImGui_ImplGlfw_CursorPosCallback().
  • Backends: SDL: Added SDL_Renderer* parameter to ImGui_ImplSDL2_InitForSDLRenderer(), so backend can call SDL_GetRendererOutputSize() to obtain framebuffer size valid for hi-dpi. (#4927) [@Clownacy]
  • Commented out redirecting functions/enums names that were marked obsolete in 1.69, 1.70, 1.71, 1.72 (March-July 2019)
    • ImGui::SetNextTreeNodeOpen() -> use ImGui::SetNextItemOpen()
    • ImGui::GetContentRegionAvailWidth() -> use ImGui::GetContentRegionAvail().x
    • ImGui::TreeAdvanceToLabelPos() -> use ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetTreeNodeToLabelSpacing());`
    • ImFontAtlas::CustomRect -> use ImFontAtlasCustomRect
    • ImGuiColorEditFlags_RGB/HSV/HEX -> use ImGuiColorEditFlags_DisplayRGB/HSV/Hex
  • Platform IME: Removed io.ImeSetInputScreenPosFn() in favor of more flexible io.SetPlatformImeDataFn() for IME support. Because this field was mostly only ever used by Dear ImGui internally, not by backends nor the vast majority of user code, this should only affect a very small fraction for users who are already very IME-aware.
  • Platform IME: Obsoleted void* io.ImeWindowHandle in favor of writing to void* ImGuiViewport::PlatformHandleRaw. This removes an incompatibility between 'master' and 'multi-viewports' backends and toward enabling better support for IME. Updated backends accordingly. Because the old field is set by existing backends, we are keeping it (marked as obsolete).

Other Changes

  • IO: Added event based input queue API, which now trickles events to support low framerates. Previously the most common issue case (button presses in low framerates) was handled by backend. This is now handled by core automatically for all kind of inputs. (#4858, #2787, #1992, #3383, #2525, #1320) [@thedmd, @ocornut]
    • New IO functions for keyboard/gamepad: io.AddKeyEvent(), io.AddKeyAnalogEvent().
    • New IO functions for mouse: io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent().
  • IO: Unified key enums allow using key functions on key mods and gamepad values.
  • Fixed CTRL+Tab into...
Read more

v1.86

22 Dec 15:08
Compare
Choose a tag to compare

Happy holidays!
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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌


Got visual glitches?

If you get visual glitches and incorrect dimming when using CTRL+Tab or Modal Windows:
image
It means your Rendering backend is not honoring the ImDrawCmd::IdxOffset field correctly. Update your standard backend or fix your custom one. See this link about how the e.g. OpenGL2 backend was fixed recently. The issue was not noticeable until now so it is possible your Rendering backend never used the IdxOffset field correctly.

image

Wrong code: during the rendering loop: draw call with idx_buffer, then idx_buffer += cmd->ElemCount after every command.
Correct code: during the rendering loop: draw call with idx_buffer + cmd->IdxOffset

Thank you!

Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid, @thedmd, for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

  • CTRL+Tab is now available enabled regardless of the ImGuiConfigFlags_NavEnableKeyboard config flag.
  • Fixed issues with window reappearing while a modal is open.
  • Fixes issues with menus and menubars in popups and modals.
  • Various fixes/improvements to gamepad/keyboard navigation.
  • Many improvements to ImGuiListClipper. Can now return non-contiguous ranges over multiple steps. Improvement for very large amount of contents. Fix drag and drop source being clipped when off scrolling.
  • Docking: Honor WindowBG color and borders better when docked + various fixes.
  • Backends: OpenGL3 now has a workaround for multi-viewport leaks when using (buggy?) Intel HD drivers on Windows.
    - Backends: OpenGL2, Allegro5: fixed mishandling of ImDrawCmd::IdxOffset field. If you get visual glitches when using CTRL+Tabs or Modal, update your backend to get the fix.
  • Backends: OSX: Add game controller and better keyboard support.
  • Many other fixes, features and improvements.

PS: previous release 1.85 added the incredibly useful STACK TOOL which we suggest you check out! (Demo>Tools>Stack Tool or via calling ShowStackToolWindow()).

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Removed CalcListClipping() function. Prefer using ImGuiListClipper which can return non-contiguous ranges. Please open an issue if you think you really need this function. (#3841)
  • Backends: OSX: Added NSView* parameter to ImGui_ImplOSX_Init(). (#4759) [@stuartcarnie]
  • Backends: Marmalade: Removed obsolete Marmalade backend (imgui_impl_marmalade.cpp) + example app. (#368, #375) Find last supported version at https://github.com/ocornut/imgui/wiki/Bindings

Other Changes

  • Added an assertion for the common user mistake of using "" as an identifier at the root level of a window instead of using "##something". Empty identifiers are valid and useful in a very small amount of cases, but 99.9% of the time if you need an empty label you should use "##something". (#1414, #2562, #2807, #4008, #4158, #4375, #4548, #4657, #4796). READ THE FAQ ABOUT HOW THE ID STACK WORKS > https://dearimgui.org/faq
  • Added GetMouseClickedCount() function, returning the number of successive clicks (so IsMouseDoubleClicked(ImGuiMouseButton_Left) is same as GetMouseClickedCount(ImGuiMouseButton_Left) == 2, but it allows testing for triple clicks and more). (#3229) [@kudaba]
  • Modals: fixed issue hovering popups inside a child inside a modal. (#4676, #4527)
  • Modals, Popups, Windows: changes how appearing windows are interrupting popups and modals. (#4317) [@rokups]
    • appearing windows created from within the begin stack of a popup/modal will no longer close it.
    • appearing windows created not within the begin stack of a modal will no longer close the modal, and automatically appear behind it.
  • Fixed IsWindowFocused()/IsWindowHovered() issues with child windows inside popups. (#4676)
  • Nav: Ctrl+tabbing to cycle through windows is now enabled regardless of using the ImGuiConfigFlags_NavEnableKeyboard configuration flag. This is part of an effort to generalize the use of keyboard inputs. (#4023, #787). Note that while this is active you can also moving windows (with arrow) and resize (shift+arrows).
  • Nav: tabbing now cycles through clipped items and scroll accordingly. (#4449)
  • Nav: pressing PageUp/PageDown/Home/End when in Menu layer automatically moves back to Main layer.
  • Nav: fixed resizing window from borders setting navigation to Menu layer.
  • Nav: prevent child from clipping items when using _NavFlattened and parent has a pending request.
  • Nav: pressing Esc to exit a child window reactivates the Nav highlight if it was disabled by mouse.
  • Nav: with ImGuiConfigFlags_NavEnableSetMousePos enabled: Fixed absolute mouse position when using Home/End leads to scrolling. Fixed not setting mouse position when a failed move request (e.g. when already at edge) reactivates the navigation highlight.
  • Menus: fixed closing a menu inside a popup/modal by clicking on the popup/modal. (#3496, #4797)
  • Menus: fixed closing a menu by clicking on its menu-bar item when inside a popup. (#3496, #4797) [@xndcn]
  • Menus: fixed menu inside a popup/modal not inhibiting hovering of items in the popup/modal. (#3496, #4797)
  • Menus: fixed sub-menu items inside a popups from closing the popup.
  • Menus: fixed top-level menu from not consistently using style.PopupRounding. (#4788)
  • InputText, Nav: fixed repeated calls to SetKeyboardFocusHere() preventing to use InputText(). (#4682)
  • Inputtext, Nav: fixed using SetKeyboardFocusHere() on InputTextMultiline(). (#4761)
  • InputText: made double-click select word, triple-line select line. Word delimitation logic differs slightly from the one used by CTRL+arrows. (#2244)
  • InputText: fixed ImGuiInputTextFlags_ReadOnly flag preventing callbacks from receiving the text buffer. (#4762) [@actondev]
  • InputText: fixed Shift+Delete from not cutting into clipboard. (#4818, #1541) [@corporateshark]
  • InputTextMultiline: fixed incorrect padding when FrameBorder > 0. (#3781, #4794)
  • InputTextMultiline: fixed vertical tracking with large values of FramePadding.y. (#3781, #4794)
  • Separator: fixed cover all columns while called inside a table. (#4787)
  • Clipper: currently focused item is automatically included in clipper range. Fixes issue where e.g. drag and dropping an item and scrolling ensure the item source location is still submitted. (#3841, #1725) [@GamingMinds-DanielC, @ocornut]
  • Clipper: added ForceDisplayRangeByIndices() to force a given item (or several) to be stepped out during a clipping operation. (#3841) [@@GamingMinds-DanielC]
  • Clipper: rework so gamepad/keyboard navigation doesn't create spikes in number of items requested by the clipper to display. (#3841)
  • Clipper: fixed content height declaration slightly mismatching the value of when not using a clipper (an additional ItemSpacing.y was declared, affecting scrollbar range).
  • Clipper: various and incomplete changes to tame down scrolling and precision issues on very large ranges. Passing an explicit height to the clipper now allows larger ranges. (#3609, #3962).
  • Clipper: fixed invalid state when number of frozen table row is smaller than ItemCount.
  • Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceAllowNullID doesn't lose tooltip when scrolling. (#143)
  • Fonts: fixed infinite loop in ImFontGlyphRangesBuilder::AddRanges() when passing UINT16_MAX or UINT32_MAX without the IMGUI_USE_WCHAR32 compile-time option. (#4802) [@SlavicPotato]
  • Metrics: Added a node showing windows in submission order and showing the Begin() stack.
  • Misc: Added missing ImGuiMouseCursor_NotAllowed cursor for software rendering (when the io.MouseDrawCursor configuration flag is enabled). (#4713) [@nobody-special666]
  • Misc: Fixed software mouse cursor being rendered multiple times if Render() is called more than once.
  • Misc: Fix MinGW DLL build issue (when IMGUI_API is defined). [@rokups]
  • CI: Add MinGW DLL build to test suite. [@rokups]
  • Backends: Vulkan: Call vkCmdSetScissor() at the end of render with a full viewport to reduce likeho...
Read more

v1.85

12 Oct 12:20
Compare
Choose a tag to compare

Hello!
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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌


Thank you!

Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid, @AidanSun05, @thedmd, for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

  • New Stack Tool to help debugging the source of ID. Access from Demo>Tools or Metrics>Tools.
  • SetKeyboardFocusHere() now works on clipped items (finally).
  • Nav: Plenty of fixes for gamepad/keyboard navigation.
  • Docking, Viewports: various fixes.
  • Menus: Fixed layout issue with MenuItem() calls inside a menu bar.
  • Added SDL_Renderer backend for upcoming SDL 2.0.18+ (yet unreleased). Note that using native GL/DX backends is generally recommended but this is now available for users of the SDL_Renderer features.
  • Dozens of other fixes and improvements.

stack_tool_03b

stack_tool_03

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Removed GetWindowContentRegionWidth() function. keep inline redirection helper. Can use GetWindowContentRegionMax().x - GetWindowContentRegionMin().x instead but it's not very useful in practice, and the only use of it in the demo was ill-fit. Using GetContentRegionAvail().x is generally a better choice.

Other Changes

  • Debug: Stack Tool: Added Stack Tool available in Demo->Tools->Stack Tool, Metrics->Tools, or by calling the ShowStackToolWindow() function. The tool run queries on hovered id to display details about individual components that were hashed to create an ID. It helps understanding the ID stack system and debugging potential ID collisions. (#4631) [@ocornut, @rokups]
  • Windows: Fixed background order of overlapping childs submitted sequentially. (#4493)
  • IsWindowFocused: Added ImGuiFocusedFlags_NoPopupHierarchy flag allowing to exclude child popups from the tested windows when combined with ImGuiFocusedFlags_ChildWindows.
  • IsWindowHovered: Added ImGuiHoveredFlags_NoPopupHierarchy flag allowing to exclude child popups from the tested windows when combined with ImGuiHoveredFlags__ChildWindows.
  • InputTextMultiline: Fixed label size not being included into window contents rect unless the whole widget is clipped.
  • InputText: Allow activating/cancelling/validating input with gamepad nav events. (#2321, #4552)
  • InputText: Fixed selection rectangle appearing one frame late when selecting all.
  • TextUnformatted: Accept null ranges including (NULL,NULL) without asserting, in order to conform to common idioms (e.g. passing .data(), .data() + .size() from a null string). (#3615)
  • Disabled: Added assert guard for mismatching BeginDisabled()/EndDisabled() blocks. (#211)
  • Nav: Fixed using SetKeyboardFocusHere() on non-visible/clipped items. It now works and will scroll toward the item. When called during a frame where the parent window is appearing, scrolling will aim to center the item in the window. When calling during a frame where the parent window is already visible, scrolling will aim to scroll as little as possible to make the item visible. We will later expose scroll functions and flags in public API to select those behaviors. (#343, #4079, #2352)
  • Nav: Fixed using SetKeyboardFocusHere() from activating a different item on the next frame if submitted items have changed during that frame. (#432)
  • Nav: Fixed toggling menu layer with Alt or exiting menu layer with Esc not moving mouse when the ImGuiConfigFlags_NavEnableSetMousePos config flag is set.
  • Nav: Fixed a few widgets from not setting reference keyboard/gamepad navigation ID when activated with mouse. More specifically: BeginTabItem(), the scrolling arrows of BeginTabBar(), the arrow section of TreeNode(), the +/- buttons of InputInt()/InputFloat(), Selectable() with ImGuiSelectableFlags_SelectOnRelease. More generally: any direct use of ButtonBehavior() with the PressedOnClick/PressedOnDoubleClick/PressedOnRelease button policy.
  • Nav: Fixed an issue with losing focus on docked windows when pressing Alt while keyboard navigation is disabled. (#4547, #4439) [@PathogenDavid]
  • Nav: Fixed vertical scoring offset when wrapping on Y in a decorated window.
  • Nav: Improve scrolling behavior when navigating to an item larger than view.
  • TreePush(): removed unnecessary/inconsistent legacy behavior where passing a NULL value to the TreePush(const char*) and TreePush(const void*) functions would use an hard-coded replacement. The only situation where that change would make a meaningful difference is TreePush((const char*)NULL) (explicitly casting a null pointer to const char*), which is unlikely and will now crash. You may replace it with anything else.
  • ColorEdit4: Fixed not being able to change hue when saturation is 0. (#4014) [@rokups]
  • ColorEdit4: Fixed hue resetting to 0 when it is set to 255. [@rokups]
  • ColorEdit4: Fixed hue value jitter when source color is stored as RGB in 32-bit integer and perform RGB<>HSV round trips every frames. [@rokups]
  • ColorPicker4: Fixed picker being unable to select exact 1.0f color when dragging toward the edges of the SV square (previously picked 0.999989986f). (#3517) [@rokups]
  • Menus: Fixed vertical alignments of MenuItem() calls within a menu bar (broken in 1.84). (#4538)
  • Menus: Improve closing logic when moving diagonally in empty between between parent and child menus to accommodate for varying font size and dpi.
  • Menus: Fixed crash when navigating left inside a child window inside a sub-menu. (#4510).
  • Menus: Fixed an assertion happening in some situations when closing nested menus (broken in 1.83). (#4640)
  • Drag and Drop: Fixed using BeginDragDropSource() inside a BeginChild() that returned false. (#4515)
  • PlotHistogram: Fixed zero-line position when manually specifying min<0 and max>0. (#4349) [@filippocrocchini]
  • Misc: Added asserts for missing PopItemFlag() calls.
  • Misc: Fixed printf-style format checks on Clang+MinGW. (#4626, #4183, #3592) [@guusw]
  • IO: Added io.WantCaptureMouseUnlessPopupClose alternative to io.WantCaptureMouse. (#4480) This allows apps to receive the click on void when that click is used to close popup (by default, clicking on a void when a popup is open will close the popup but not release io.WantCaptureMouse).
  • Fonts: imgui_freetype: Fixed crash when FT_Render_Glyph() fails to render a glyph and returns NULL (which apparently happens with Freetype 2.11). (#4394, #4145?).
  • Fonts: Fixed ImFontAtlas::ClearInputData() marking atlas as not built. (#4455, #3487)
  • Backends: Added more implicit asserts to detect invalid/redundant calls to Shutdown functions. (#4562)
  • Backends: OpenGL3: Fixed our custom GL loader conflicting with user using GL3W. (#4445) [@rokups]
  • Backends: WebGPU: Fixed for latest specs. (#4472, #4512) [@Kangz, @bfierz]
  • Backends: SDL_Renderer: Added SDL_Renderer backend compatible with upcoming SDL 2.0.18. (#3926) [@1bsyl]
  • Backends: Metal: Fixed a crash when clipping rect larger than framebuffer is submitted via a direct unclipped PushClipRect() call. (#4464)
  • Backends: OSX: Use mach_absolute_time as CFAbsoluteTimeGetCurrent can jump backwards. (#4557, #4563) [@lfnoise]
  • Backends: All renderers: Normalize clipping rect handling across backends. (#4464)
  • Examples: Added SDL + SDL_Renderer example in examples/example_sdl_sdlrenderer folder. (#3926) [@1bsyl]

Other branches & Beta features!

Also see previous release notes such as 1.80, 1.81, 1.80, 1.83, 1.84.

The docking (#2109) and multi-viewports (#1542) features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.

Some of changes from 1.84 to ...

Read more

v1.84.2

23 Aug 13:28
Compare
Choose a tag to compare

Apologies, 1.84.1 still had issue with nested BeginDisabled()/EndDisabled() calls. What a botched release! Issuing a fix for it.

See 1.84 release notes for the full list.

All changes:

  • Disabled: Fixed nested BeginDisabled()/EndDisabled() calls. (#211, #4452, #4453, #4462) [@Legulysse]
  • Backends: OpenGL3: OpenGL: Fixed ES 3.0 shader ("#version 300 es") to use normal precision floats. Avoid wobbly rendering at HD resolutions. (#4463) [@nicolasnoble]

v1.84.1

20 Aug 22:01
Compare
Choose a tag to compare

Apologies, 1.84 had an issue with BeginDisabled(false) (whereas BeginDisabled(true) worked correctly). Issuing a fix for it.

See 1.84 release notes for the full list.

v1.84

20 Aug 16:23
Compare
Choose a tag to compare

Hello!
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!


*EDIT* Grab 1.84.1 instead for the hotfix for BeginDisabled(false)


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌


Thank you!

Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests.
Special thanks to @PathogenDavid, @AidanSun05, @thedmd, for their continued contributions and helping with github answers.

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

  • BeginDisabled()/EndDisabled() groups *EDIT* Grab 1.84.1 instead for the hotfix for BeginDisabled(false)
  • Tables fixes and improvements
  • Backends refactored to store their state in current context
  • Backends are reporting mouse position even when host platform window is not focused (as long as mouse not captured by another app)
  • OpenGL backends now embeds its own GL loader (#4445)
  • Countless other fixes, improvements.... details below...

1 84

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Commented out redirecting functions/enums names that were marked obsolete in 1.67 and 1.69 (March 2019):
    • ImGui::GetOverlayDrawList() -> use ImGui::GetForegroundDrawList()
    • ImFont::GlyphRangesBuilder -> use ImFontGlyphRangesBuilder
  • Backends: OpenGL3: added a third source file imgui_impl_opengl3_loader.h. [@rokups]
  • Backends: GLFW: backend uses glfwSetCursorEnterCallback() + glfwSetWindowFocusCallback() (#3751, #4377, #2445, #4388)
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=true: this is already done for you.
    • If calling ImGui_ImplGlfw_InitXXX with install_callbacks=false: you WILL NEED to register the GLFW callbacks
      and forward them to the backend:
    • Register glfwSetCursorEnterCallback, forward events to ImGui_ImplGlfw_CursorEnterCallback().
    • Register glfwSetWindowFocusCallback, forward events to ImGui_ImplGlfw_WindowFocusCallback().
  • Backends: SDL2: removed unnecessary/duplicate SDL_Window* parameter from ImGui_ImplSDL2_NewFrame(). (#3244) [@funchal] Kept inline redirection function (will obsolete).
  • Backends: SDL2: backend needs to set SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1") in order to receive mouse clicks events on window focus, otherwise SDL doesn't emit the event. (#3751, #4377, #2445) This is unfortunately a global SDL setting, so enabling it might have a side-effect on your application. It is unlikely to make a difference, but if your app absolutely needs to ignore the initial on-focus click: you can ignore SDL_MOUSEBUTTONDOWN events coming right after a SDL_WINDOWEVENT_FOCUS_GAINED event).
  • Internals: (for custom widgets): because disabled items now sets HoveredID, if you want custom widgets to not react as hovered when disabled, in the majority of use cases it is preferable to check the "hovered" return value of ButtonBehavior() rather than HoveredId == id.

All Changes

  • IO: Added io.AddFocusEvent() api for backend to tell when host window has gained/lost focus. (#4388) [@thedmd]
    If you use a custom backend, consider adding support for this!
  • Disabled: added BeginDisabled()/EndDisabled() api to create a scope where interactions are disabled. (#211)
    • Added style.DisabledAlpha (default to 0.60f) and corresponding ImGuiStyleVar_DisabledAlpha enum. (#211)
    • Unlike the internal-and-undocumented-but-somehow-known PushItemFlag(ImGuiItemFlags_Disabled), this also alters
      visuals. Currently this is done by lowering alpha of all widgets. Future styling system may do that differently.
    • Disabled items set HoveredId, allowing e.g. HoveredIdTimer to run. (#211, #3419) [@rokups]
    • Disabled items more consistently release ActiveId if the active item got disabled. (#211)
    • Nav: Fixed disabled items from being candidate for default focus. (#211, #787)
    • Fixed Selectable() selection not showing when disabled. (#211)
    • Fixed IsItemHovered() returning true on disabled item when navigated to. (#211)
    • Fixed IsItemHovered() when popping disabled state after item, or when using Selectable_Disabled. (#211)
  • Windows: ImGuiWindowFlags_UnsavedDocument/ImGuiTabItemFlags_UnsavedDocument displays a dot instead of a '*' so it
    is independent from font style. When in a tab, the dot is displayed at the same position as the close button.
    Added extra comments to clarify the purpose of this flag in the context of docked windows.
  • Tables: Added ImGuiTableColumnFlags_Disabled acting a master disable over (hidden from user/context menu). (#3935)
  • Tables: Clarified that TableSetColumnEnabled() requires the table to use the ImGuiTableFlags_Hideable flag, because it manipulates the user-accessible show/hide state. (#3935)
  • Tables: Added ImGuiTableColumnFlags_NoHeaderLabel to request TableHeadersRow() to not submit label for a column.
    Convenient for some small columns. Name will still appear in context menu. (#4206).
  • Tables: Fixed columns order on TableSetupScrollFreeze() if previous data got frozen columns out of their section.
  • Tables: Fixed invalid data in TableGetSortSpecs() when SpecsDirty flag is unset. (#4233)
  • TabBar: Fixed using more than 32 KB-worth of tab names. (#4176)
  • InputInt/InputFloat: When used with Steps values and _ReadOnly flag, the step button look disabled. (#211)
  • InputText: Fixed named filtering flags disabling newline or tabs in multiline inputs (#4409, #4410) [@kfsone]
  • Drag and Drop: drop target highlight doesn't try to bypass host clipping rectangle. (#4281, #3272)
  • Drag and Drop: Fixed using AcceptDragDropPayload() with ImGuiDragDropFlags_AcceptNoPreviewTooltip. [@JeffM2501]
  • Menus: MenuItem() and BeginMenu() are not affected/overlapping when style.SelectableTextAlign is altered.
  • Menus: Fixed hovering a disabled menu or menu item not closing other menus. (#211)
  • Popups: Fixed BeginPopup()/OpenPopup() sequence failing when there are no focused windows. (#4308) [@rokups]
  • Nav: Alt doesn't toggle menu layer if other modifiers are held. (#4439)
  • Fixed printf-style format checks on non-MinGW flavors. (#4183, #3592)
  • Fonts: Functions with a float size_pixels parameter can accept zero if it is set in ImFontSize::SizePixels.
  • Fonts: Prefer using U+FFFD character for fallback instead of '?', if available. (#4269)
  • Fonts: Use U+FF0E dot character to construct an ellipsis if U+002E '.' is not available. (#4269)
  • Fonts: Added U+FFFD ("replacement character") to default Asian glyphs ranges. (#4269)
  • Fonts: Fixed calling ClearTexData() (clearing CPU side font data) triggering an assert in NewFrame(). (#3487)
  • DrawList: Fixed AddCircle()/AddCircleFilled() with auto-tesselation not using accelerated paths for small circles. Fixed AddCircle()/AddCircleFilled()` with 12 segments which had a broken edge. (#4419, #4421) [@thedmd]
  • Demo: Fixed requirement in 1.83 to link with imgui_demo.cpp if IMGUI_DISABLE_METRICS_WINDOW is not set. (#4171)
    Normally the right way to disable compiling the demo is to set IMGUI_DISABLE_DEMO_WINDOWS, but we want to avoid
    implying that the file is required.
  • Metrics: Fixed a crash when inspecting the individual draw command of a foreground drawlist. [@rokups]
  • Backends: Reorganized most backends (Win32, SDL, GLFW, OpenGL2/3, DX9/10/11/12, Vulkan, Allegro) to pull their
    data from a single structure stored inside the main Dear ImGui context. This facilitate/allow usage of standard
    backends with multiple-contexts BUT is only partially tested and not well supported. It is generally advised to
    instead use the multi-viewports feature of docking branch where a single Dear ImGui context can be used across
    multiple windows. (#586, #1851, #2004, #3012, #3934, #4141)
  • Backends: Win32: Rework to handle certain Windows 8.1/10 features without a manifest. (#4200, #4191)
    • ImGui_ImplWin32_GetDpiScaleForMonitor() will handle per-monitor DPI on Windows 10 without a manifest.
    • ImGui_ImplWin32_EnableDpiAwareness() will call SetProcessDpiAwareness() fallback on Windows 8.1 without a manifest.
  • Backends: Win32: IME functions are disabled by default for non-Visual Studio compilers (MinGW etc.). Enable with
    #define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS for those compilers. Undo change...
Read more

v1.83

24 May 15:56
Compare
Choose a tag to compare

Hello!
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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Extensions Gallery! 👌


Thank you!

Special thanks to @rokups for their continued work on e.g. regression tests.
Special thanks to @PathogenDavid for helping with github answers. For a treat read the amazing story that unfolded in #4029 !

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

  • This is a general maintenance release.
  • Various Keyboard/Gamepad Navigation fixes.
  • Various programmatic scrolling fixes.
  • Tables share more of their allocations.
  • Dozens of other additions, fixes and optimizations.

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Backends: Obsoleted direct access to ImDrawCmd::TextureId in favor of calling ImDrawCmd::GetTexID(). (#3761) [@thedmd]
    • If you are using official backends from the source tree: you have nothing to do.
    • If you copied old backend code or using your own: change access to draw_cmd->TextureId to draw_cmd->GetTexID().
  • Why are we doing this?
    • This change will be required in the future when adding support for incremental texture atlas updates.
    • Please note this won't break soon, but we are making the change ahead of time.

All Changes

  • Scrolling: Fix scroll tracking with e.g. SetScrollHereX()/SetScrollHereY() when WindowPadding < ItemSpacing.
  • Scrolling: Fix scroll snapping on edge of scroll region when both scrollbars are enabled.
  • Scrolling: Fix mouse wheel axis swap when using SHIFT on macOS (system already does it). (#4010)
  • Window: Fix IsWindowAppearing() from returning true twice in most cases. (#3982, #1497, #1061)
  • Nav: Fixed toggling menu layer while an InputText() is active not stealing active id. (#787)
  • Nav: Fixed pressing Escape to leave menu layer while in a popup or child window. (#787)
  • Nav, InputText: Fixed accidental menu toggling while typing non-ascii characters using AltGR. [@rokups] (#370)
  • Nav: Fixed using SetItemDefaultFocus() on windows with _NavFlattened flag. (#787)
  • Nav: Fixed Tabbing initial activation from skipping the first item if it is tabbable through. (#787)
  • Nav: Fixed fast CTRL+Tab (where keys are only held for one single frame) from properly enabling the menu layer of target window if it doesn't have other active layers.
  • Tables: Expose TableSetColumnEnabled() in public api. (#3935)
  • Tables: Better preserve widths when columns count changes. (#4046)
  • Tables: Sharing more memory buffers between tables, reducing general memory footprints. (#3740)
  • TabBar: Fixed mouse reordering with very fast movements (e.g. crossing multiple tabs in a single frame and then immediately standing still (would only affect automation/bots). [@rokups]
  • Menus: made MenuItem() in a menu bar reflect the 'selected' argument with a highlight. (#4128) [@mattelegende]
  • Drags, Sliders, Inputs: Specifying a NULL format to Float functions default them to "%.3f" to be consistent with the compile-time default. (#3922)
  • DragScalar: Add default value for v_speed argument to match higher-level functions. (#3922) [@eliasdaler]
  • ColorEdit4: Alpha default to 255 (instead of 0) when omitted in hex input. (#3973) [@squadack]
  • InputText: Do not filter private unicode codepoints (e.g. icons) when pasted from clipboard. (#4005) [@dougbinks]
  • InputText: Align caret/cursor to pixel coordinates. (#4080) [@elvissteinjr]
  • InputText: Fixed CTRL+Arrow or OSX double-click leaking the presence of spaces when ImGuiInputTextFlags_Password
    is used. (#4155, #4156) [@michael-swan]
  • LabelText: Fixed clipping of multi-line value text when label is single-line. (#4004)
  • LabelText: Fixed vertical alignment of single-line value text when label is multi-line. (#4004)
  • Combos: Changed the combo popup to use a different id to also using a context menu with the default item id. Fixed using BeginPopupContextItem() with no parameter after a combo. (#4167)
  • Popups: Added OpenPopup(ImGuiID id) overload to facilitate calling from nested stacks. (#3993, #331) [@zlash]
  • Tweak computation of io.Framerate so it is less biased toward high-values in the first 120 frames. (#4138)
  • Optimization: Disabling some of MSVC most aggressive Debug runtime checks for some simple/low-level functions
    (e.g. ImVec2, ImVector) leading to a 10-20% increase of performances with MSVC "default" Debug settings.
  • ImDrawList: Add and use SSE-enabled ImRsqrt() in place of 1.0f / ImSqrt(). (#4091) [@wolfpld]
  • ImDrawList: Fixed/improved thickness of thick strokes with sharp angles. (#4053, #3366, #2964, #2868, #2518, #2183) Effectively introduced a regression in 1.67 (Jan 2019), and a fix in 1.70 (Apr 2019) but the fix wasn't actually on par with original version. Now incorporating the correct revert.
  • ImDrawList: Fixed PathArcTo() regression from 1.82 preventing use of counter-clockwise angles. (#4030, #3491) [@thedmd]
  • Demo: Improved popups demo and comments.
  • Metrics: Added "Fonts" section with same information as available in "Style Editor">"Fonts".
  • Backends: SDL: Rework global mouse pos availability check listing supported platforms explicitly, effectively fixing mouse access on Raspberry Pi. (#2837, #3950) [@lethal-guitar, @hinxx]
  • Backends: Win32: Clearing keyboard down array when losing focus (WM_KILLFOCUS). (#2062, #3532, #3961)
    [@1025798851]
  • Backends: OSX: Fix keys remaining stuck when CMD-tabbing to a different application. (#3832) [@rokups]
  • Backends: DirectX9: calling IDirect3DStateBlock9::Capture() after CreateStateBlock() which appears to workaround/fix state restoring issues. Unknown exactly why so, bit of a cargo-cult fix. (#3857)
  • Backends: DirectX9: explicitly setting up more graphics states to increase compatibility with unusual non-default states. (#4063)
  • Backends: DirectX10, DirectX11: fixed a crash when backing/restoring state if nothing is bound when entering the rendering function. (#4045) [@Nemirtingas]
  • Backends: GLFW: Adding bound check in KeyCallback because GLFW appears to send -1 on some setups. [#4124]
  • Backends: Vulkan: Fix mapped memory Vulkan validation error when buffer sizes are not multiple of VkPhysicalDeviceLimits::nonCoherentAtomSize. (#3957) [@AgentX1994]
  • Backends: WebGPU: Update to latest specs (Chrome Canary 92 and Emscripten 2.0.20). (#4116, #3632) [@bfierz, @Kangz]
  • Backends: OpenGL3: Don't try to read GL_CLIP_ORIGIN unless we're OpenGL 4.5. (#3998, #2366, #2186) [@s7jones]
  • Examples: OpenGL: Add OpenGL ES 2.0 support to modern GL examples. (#2837, #3951) [@lethal-guitar, @hinxx]
  • Examples: Vulkan: Rebuild swapchain on VK_SUBOPTIMAL_KHR. (#3881)
  • Examples: Vulkan: Prefer using discrete GPU if there are more than one available. (#4012) [@rokups]
  • Examples: SDL2: Link with shell32.lib required by SDL2main.lib since SDL 2.0.12. [#3988]
  • Examples: Android: Make Android example build compatible with Gradle 7.0. (#3446)
  • Docs: Improvements to description of using colored glyphs/emojis. (#4169, #3369)
  • Docs: Improvements to minor mistakes in documentation comments (#3923) [@ANF-Studios]

Other branches & Beta features!

Also see previous release notes such as 1.80.

The docking (#2109) and multi-viewports (#1542) features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.

Some of changes from 1.82 to 1.83 related to the docking branch (multi-viewport and docking features) include:

  • [Breaking] Removed io.ConfigDockingWithShift config option. Behavior always equivalent to having the option set to false (dock/undock by default, hold shift to avoid docking). (#2109)
  • Docking: DockSpace() returns its node ID.
  • Docking: Dockspace() never draws a background. (#3924)
  • Docking: Undocking nodes/windows covering most of the monitor max their size down to 90% to ease manipulations.
  • Docking: Docking node tab bar honors ItemInnerSpacing.x before first tab. (#4130)
  • Docking: Tweak rendering and alignment of dock node menu marker. (#4130)
  • Docking: Fixed restoring of tab order within a dockspace or a split node.
  • Docking: Fixed reappearing docked windows with no close button showing a tab with extraneous space for one frame.
  • Docking: Fixed multiple simultaneously reappearing window from appearing undocked for one frame.
  • Viewports: Hotfix for crash in monitor array access, caused by 4b9bc49. (#3967)
  • Backends, Viewports: ...
Read more

v1.82

15 Mar 19:40
Compare
Choose a tag to compare

Hello!
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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Issues: https://github.com/ocornut/imgui/issues
Discussions: https://github.com/ocornut/imgui/discussions

Did you know? We have a Wiki!
It has sections such as this Useful Widgets gallery! 👌


Thank you!

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TL;DR;

  • This is a general maintenance release.
  • Arcs and rounded corners are now auto-tessellated, including the "fast" paths for rounded rectangles.
  • Improved/fixes old API technical debt, getting rid of more bools.
  • Fixes for various edge cases formatting features in Drags/Sliders.
  • Backends: Native Android backend + example.
  • Backends: Consistently fixed handling of framebuffer transparency in all backends.
  • Backends: DX9: Fix for colored glyphes.
  • Helper scripts for popular debuggers.
  • Dozens of other small additions and fixes.

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Removed redirecting functions/enums names that were marked obsolete in 1.66 (September 2018):
    • ImGui::SetScrollHere() --> use ImGui::SetScrollHereY()
  • ImDrawList: upgraded AddPolyline()/PathStroke()s bool closed parameter to use ImDrawFlags flags.
    • bool closed = false --> use ImDrawFlags_None, or 0
    • bool closed = true --> use ImDrawFlags_Closed (guaranteed to always stay == 1 in the future).
      Difference may not be noticeable for most but zealous type-checking tools may report a need to change.
  • ImDrawList: upgraded AddRect(), AddRectFilled(), PathRect() to use ImDrawFlags instead of ImDrawCornersFlags.
    • ImDrawCornerFlags_TopLeft --> use ImDrawFlags_RoundCornersTopLeft
    • ImDrawCornerFlags_BotRight --> use ImDrawFlags_RoundCornersBottomRight
    • ImDrawCornerFlags_None --> use ImDrawFlags_RoundCornersNone etc.
      Flags now sanely defaults to 0 instead of 0x0F, consistent with all other flags in the API.
      IMPORTANT: The default with rounding > 0.0f is now "round all corners" vs old implicit "round no corners":
    • rounding == 0.0f + flags == 0 --> meant no rounding --> unchanged (common use)
    • rounding > 0.0f + flags != 0 --> meant rounding --> unchanged (common use)
    • rounding == 0.0f + flags != 0 --> meant no rounding --> unchanged (unlikely use)
    • rounding > 0.0f + flags == 0 --> meant no rounding --> BREAKING (unlikely use)!
      • this ONLY matters for hardcoded use of 0 with rounding > 0.0f.
      • fix by using named ImDrawFlags_RoundCornersNone or rounding == 0.0f!
      • this is technically the only real breaking change which we can't solve automatically (it's also uncommon).
        The old ImDrawCornersFlags used awkward default values of ~0 or 0xF (4 lower bits set) to signify "round all corners" and we sometimes encouraged using them as shortcuts. As a result the legacy path still support use of hardcoded ~0 or any value from 0x1 or 0xF. They will behave the same with legacy paths enabled (will assert otherwise). Courtesy of legacy untangling commity: [@rokups, @ocornut, @thedmd]
  • ImDrawList: clarified that PathArcTo()/PathArcToFast() won't render with radius < 0.0f. Previously it sorts of accidentally worked but would lead to counter-clockwise paths which and have an effect on anti-aliasing.
  • InputText: renamed ImGuiInputTextFlags_AlwaysInsertMode to ImGuiInputTextFlags_AlwaysOverwrite, old name was an incorrect description of behavior. Was ostly used by memory editor. Kept inline redirection function. (#2863)
  • Moved misc/natvis/imgui.natvis to misc/debuggers/imgui.natvis as we will provide scripts for other debuggers.
  • Style: renamed rarely used style.CircleSegmentMaxError (old default = 1.60f) to style.CircleTessellationMaxError (new default = 0.30f) as its meaning changed. (#3808) [@thedmd]
  • Win32+MinGW: Re-enabled IME functions by default even under MinGW. In July 2016, issue #738 had me incorrectly disable those default functions for MinGW. MinGW users should: either link with -limm32, either set their imconfig file with '#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS'. (#2590, #738) [@actboy168]
  • Backends: Win32: Pragma linking with dwmapi.lib (Vista-era, ~9 kb). MinGW users will need to link with -ldwmapi.

All Changes

  • Window, Nav: Fixed crash when calling SetWindowFocus(NULL) at the same time a new window appears. (#3865) [@nem0]
  • Window: Shrink close button hit-testing region when it covers an abnormally high portion of the window visible area (e.g. when window is collapsed + moved in a corner) to facilitate moving the window away. (#3825)
  • Nav: Various fixes for losing gamepad/keyboard navigation reference point when a window reappears or when it appears while gamepad/keyboard are not being used. (#787)
  • Drags: Fixed crash when using DragScalar() directly (not via common wrapper like DragFloat() etc.) with ImGuiSliderFlags_AlwaysClamp + only one of either p_min or p_max set. (#3824) [@harry75369]
  • Drags, Sliders: Fixed a bug where editing value would use wrong number if there were digits right after format specifier (e.g. using "%f123" as a format string). [@rokups]
  • Drags, Sliders: Fixed a bug where using custom formatting flags (',$,_) supported by stb_sprintf.h would cause incorrect value to be displayed. (#3604) [@rokups]
  • Drags, Sliders: Support ImGuiSliderFlags_Logarithmic flag with integers. Because why not? (#3786)
  • Tables: Fixed unaligned accesses when using TableSetBgColor(ImGuiTableBgTarget_CellBg). (#3872)
  • IsItemHovered(): fixed return value false positive when used after EndChild(), EndGroup() or widgets using either of them, when the hovered location is located within a child window, e.g. InputTextMultiline(). This is intended to have no side effects, but brace yourself for the possible comeback.. (#3851, #1370)
  • Drag and Drop: can use BeginDragDropSource() for other than the left mouse button as long as the item has an ID (for ID-less items will add new functionalities later). (#1637, #3885)
  • Misc: Added GetAllocatorFunctions() to facilitate sharing allocators across DLL boundaries. (#3836)
  • ImFontAtlas: Added bool TexPixelsUseColors output to help backend decide of underlying texture format. (#3369) This can currently only ever be set by the Freetype renderer.
  • imgui_freetype: Added ImGuiFreeTypeBuilderFlags_Bitmap flag to request Freetype loading bitmap data. This may have an effect on size and must be called with correct size values. (#3879) [@metarutaiga]
  • ImDrawList: PathArcTo() now supports int num_segments = 0 (new default) and adaptively tessellate.
    The adaptive tessellation uses look up tables, tends to be faster than old PathArcTo() while maintaining quality for large arcs (tessellation quality derived from style.CircleTessellationMaxError) (#3491) [@thedmd]
  • ImDrawList: PathArcToFast() also adaptively tesselate efficiently. This means that large rounded corners in e.g. hi-dpi settings will generally look better. (#3491) [@thedmd]
  • ImDrawList: AddCircle, AddCircleFilled(): Tweaked default segment count calculation to honor MaxError with more accuracy. Made default segment count always even for better looking result. (#3808) [@thedmd]
  • Misc: Added debuggers/imgui.gdb and debuggers/imgui.natstepfilter (along with existing debuggers/imgui.natvis scripts to configure popular debuggers into skipping trivial functions when using StepInto. [@rokups]
  • Backends: Android: Added native Android backend. (#3446) [@duddel]
  • Backends: Win32: Added ImGui_ImplWin32_EnableAlphaCompositing() to facilitate experimenting with alpha compositing and transparent windows. (#2766, #3447 etc.).
  • Backends: OpenGL, Vulkan, DX9, DX10, DX11, DX12, Metal, WebGPU, Allegro: Rework blending equation to preserve alpha in output buffer (using SrcBlendAlpha = ONE, DstBlendAlpha = ONE_MINUS_SRC_ALPHA consistently across all backends), facilitating compositing of the output buffer with another buffer. (#2693, #2764, #2766, #2873, #3447, #3813, #3816) [@ocornut, @thedmd, @ShawnM427, @Ubpa, @aiekick]
  • Backends: DX9: Fix to support IMGUI_USE_BGRA_PACKED_COLOR. (#3844) [@Xiliusha]
  • Backends: DX9: Fix to support colored glyphs, using newly introduced 'TexPixelsUseColors' info. (#3844)
  • Examples: Android: Added Android + GL ES3 example. (#3446) [@duddel]
  • Examples: Reworked setup of clear color to be compatible with transparent values.
  • CI: Use a dedicated "scheduled" workflow to trigger scheduled builds. Forks may disable this workflow if scheduled buil...
Read more

v1.81

10 Feb 20:27
Compare
Choose a tag to compare

Hello!
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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc.
FAQ: https://www.dearimgui.org/faq/
Discord server: https://discord.dearimgui.org
Issues and support: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki!
It has sections such as this Useful Widgets gallery! 👌


Thank you!

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters!

Dear ImGui is funded by your contributions and needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

fruits

TL;DR;

  • Renamed the old and inconsistent flexible ListBox helpers to be in line with our typical API.
  • Simplified integration of imgui_freetype.
  • Added GetMainViewport() as a way to access Platform/Host Window information (and later Platform Monitor).
  • Added partial support for colored font glyph in imgui_freetype (courtesy of @pshurgal).
  • Fixed a Tables bug in 1.80 when using multi-components widgets.
  • Experimental WebGPU renderer backend (courtesy of @bfierz).
  • Win32 backends load XInput dynamically (courtesy of [@Demonese])
  • Docking and Viewports fixes.
  • Dozens of other additions and fixes.

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • ListBox helpers:
    • Renamed ListBoxHeader(const char* label, ImVec2 size) to BeginListBox().
    • Renamed ListBoxFooter() to EndListBox().
    • Removed ListBoxHeader(const char* label, int items_count, int height_in_items = -1) in favor of specifying size. In the redirection function, made vertical padding consistent regardless of items_count <= height_in_items or not.
    • Kept inline redirection function for all threes (will obsolete).
  • imgui_freetype:
    • We refactored some of imgui_freetype to make integration easier (a simple #define IMGUI_ENABLE_FREETYPE in your config file does the job for most users) and also to fix some inconsistencies. The majority of imgui_freetyoe users shouldn't be affected as the RasterizerFlags were rarely used.
    • Removed ImGuiFreeType::BuildFontAtlas(). Kept inline redirection function.
      Prefer using #define IMGUI_ENABLE_FREETYPE, but there's a runtime selection path available too.
    • The shared extra flags parameters (very rarely used) are now stored in ImFontAtlas::FontBuilderFlags.
    • Renamed ImFontConfig::RasterizerFlags (used by FreeType) to ImFontConfig::FontBuilderFlags.
    • Renamed ImGuiFreeType::XXX flags to ImGuiFreeTypeBuilderFlags_XXX for consistency with other API.

All Changes

  • Tables: Fixed PopItemWidth() or multi-components items not restoring per-colum ItemWidth correctly. (#3760)
  • Viewports Added ImGui::GetMainViewport() as a way to get the bounds and work area of the host display. (#3789, #1542)
    • In master branch or without multi-viewports feature enabled:
      • GetMainViewport()->Pos is always == (0,0)
      • GetMainViewport()->Size is always == io.DisplaySize
    • In docking branch and with the multi-viewports feature enabled:
      • GetMainViewport() will return information from your host Platform Window.
      • In the future, we will support a "no main viewport" mode and this may return bounds of your main monitor.
    • For forward compatibility with multi-viewports/multi-monitors:
      • Code using (0,0) as a way to signify "upper-left of the host window" should use GetMainViewport()->Pos.
      • Code using io.DisplaySize as a way to signify "size of the host window" should use GetMainViewport()->Size.
    • We are also exposing a work area in ImGuiViewport (WorkPos, WorkSize vs Pos, Size for full area):
      • For a Platform Window, the work area is generally the full area minus space used by menu-bars.
      • For a Platform Monitor, the work area is generally the full area minus space used by task-bars.
    • All of this has been the case in 'docking' branch for a long time. What we've done is merely merging
      a small chunk of the multi-viewport logic into 'master' to standardize some concepts ahead of time.
  • Window: Fixed minor title bar text clipping issue when FramePadding is small/zero and there are no close button in the window. (#3731)
  • SliderInt: Fixed click/drag when v_min==v_max from setting the value to zero. (#3774) [@erwincoumans] Would also repro with DragFloat() when using ImGuiSliderFlags_Logarithmic with v_min==v_max.
  • Menus: Fixed an issue with child-menu auto sizing (issue introduced in 1.80 on 2021/01/25) (#3779)
  • InputText: Fixed slightly off ScrollX tracking, noticeable with large values of FramePadding.x. (#3781)
  • InputText: Multiline: Fixed padding/cliprect not precisely matching single-line version. (#3781)
  • InputText: Multiline: Fixed FramePadding.y worth of vertical offset when aiming with mouse.
  • ListBox: Tweaked default height calculation.
  • Fonts: imgui_freetype: Facilitated using FreeType integration: [@Xipiryon, @ocornut]
    • Use #define IMGUI_ENABLE_FREETYPE in imconfig.h should make it work with no other modifications other than compiling misc/freetype/imgui_freetype.cpp and linking with FreeType.
    • Use #define IMGUI_ENABLE_STB_TRUETYPE if you somehow need the stb_truetype rasterizer to be compiled in along with the FreeType one, otherwise it is enabled by default.
  • Fonts: imgui_freetype: Added support for colored glyphs as supported by Freetype 2.10+ (for .ttf using CPAL/COLR
    tables only). Enable the ImGuiFreeTypeBuilderFlags_LoadColor on a given font. Atlas always output directly as RGBA8 in this situation. Likely to make sense with IMGUI_USE_WCHAR32. (#3369) [@pshurgal]
  • Fonts: Fixed CalcTextSize() width rounding so it behaves more like a ceil. This is in order for text wrapping to have enough space when provided width precisely calculated with CalcTextSize().x. (#3776). Note that the rounding of either positions and widths are technically undesirable (e.g. #3437, #791) but variety of code is currently on it so we are first fixing current behavior before we'll eventually change it.
  • Log/Capture: Fix various new line/spacing issue when logging widgets. [@Xipiryon, @ocornut]
  • Log/Capture: Improved the ASCII look of various widgets, making large dumps more easily human readable.
  • ImDrawList: Fixed AddCircle()/AddCircleFilled() with (rad > 0.0f && rad < 1.0f && num_segments == 0). (#3738) Would lead to a buffer read overflow.
  • ImDrawList: Clarified PathArcTo() need for a_min <= a_max with an assert.
  • ImDrawList: Fixed PathArcToFast() handling of a_min > a_max.
  • Metrics: Back-ported "Viewports" debug visualizer from docking branch.
  • Demo: Added Examples->Fullscreen Window demo using GetMainViewport() values. (#3789)
  • Demo: Simple Overlay demo now moves under main menu-bar (if any) using GetMainViewport()'s work area.
  • Backends: Win32: Dynamically loading XInput DLL instead of linking with it, facilitate compiling with old WindowSDK versions or running on Windows 7. (#3646, #3645, #3248, #2716) [@Demonese]
  • Backends: Vulkan: Add support for custom Vulkan function loader and VK_NO_PROTOTYPES. (#3759, #3227) [@Hossein-Noroozpour]. User needs to call ImGui_ImplVulkan_LoadFunctions() with their custom loader prior to other functions.
  • Backends: Metal: Fixed texture storage mode when building on Mac Catalyst. (#3748) [@Belinsky-L-V]
  • Backends: OSX: Fixed mouse position not being reported when mouse buttons other than left one are down. (#3762) [@rokups]
  • Backends: WebGPU: Added enderer backend for WebGPU support (imgui_impl_wgpu.cpp) (#3632) [@bfierz] Please note that WebGPU is currently experimental, will not run on non-beta browsers, and may break.
  • Examples: WebGPU: Added Emscripten+WebGPU example. (#3632) [@bfierz]
  • Backends: GLFW: Added ImGui_ImplGlfw_InitForOther() initialization call to use with non OpenGL API. (#3632)

Other branches & Beta features!

Also see previou release notes such as 1.80.

The docking (#2109) and multi-viewports (#1542) features are available in the docking branch, they are in beta but actively maintained and being used by many teams already. Your continuous feedback is always appreciated.

Some of changes from 1.80 to 1.81 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Fix losing docking information on closed windows for which the hosting node was split. (#3716) [@GamingMinds-DanielC]
  • Docking: Fix gap in hit test hole when using ImGuiDockNo...
Read more

v1.80

21 Jan 19:41
Compare
Choose a tag to compare

Reading the full 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!


Homepage: https://github.com/ocornut/imgui
Release notes: https://github.com/ocornut/imgui/releases
Wiki: https://github.com/ocornut/imgui/wiki for bindings, links, extensions etc.
FAQ: https://www.dearimgui.org/faq/
Discord server: https://discord.dearimgui.org
Issues and support: https://github.com/ocornut/imgui/issues

Did you know? We have a Wiki! It is a bit clunky but has sections such as this Useful Widgets gallery!


Thank you!

Ongoing work on Dear ImGui is currently financially supported by:

Huge thank you to all past and present supporters! Tables have been a LONG time in the making (since early 2019).

Dear ImGui is funded by your contributions and really needs them right now.
If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

TABLES

Finally Tables are merged in master!

Please note the Tables API is still in Beta. What it means is we are sliiiightly more likely than usual to make small changes to the API. If we do they'll be cautious, documented, with redirecting helpers, as usual. If you update to 1.80, consider updating (later) to 1.81 and 1.82 to make sure you catch up with those future changes sooner rather than later.
Important: If you used the Tables branch before 1.80, it is strongly suggested that you update today as we make several breaking changes to the API in the second half of 2020.

Absurdly tall screenshot:

capture_table_demo_0000_freetype

(using font: NotoSans-Regular.ttf at 16.0f size, rendered with imgui_freetype.

Breaking Changes

(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS in your imconfig.h file to make sure you are not using to-be-obsoleted symbols.)

  • Added imgui_tables.cpp file! Manually constructed project files will need the new file added! (#3740)
  • Backends: moved all backends files (imgui_impl_XXXX.cpp, imgui_impl_XXXX.h) from examples/ to backends/. (#3513)
  • Renamed ImDrawList::AddBezierCurve() to ImDrawList::AddBezierCubic(). Kept inline redirection function (will obsolete).
  • Renamed ImDrawList::PathBezierCurveTo() to ImDrawList::PathBezierCubicCurveTo(). Kept inline redirection function (will obsolete).
  • Removed redirecting functions/enums names that were marked obsolete in 1.60 (April 2018):
    • io.RenderDrawListsFn pointer -> use ImGui::GetDrawData() value and call the render function of your backend
    • ImGui::IsAnyWindowFocused() -> use ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow)
    • ImGui::IsAnyWindowHovered() -> use ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
    • ImGuiStyleVar_Count_ -> use ImGuiStyleVar_COUNT
    • ImGuiMouseCursor_Count_ -> use ImGuiMouseCursor_COUNT
  • Removed redirecting functions/enums names that were marked obsolete in 1.61 (May 2018):
    • InputFloat (... int decimal_precision ...) -> use InputFloat(... const char* format ...) with format = "%.Xf" where X was value for decimal_precision.
    • same for InputFloat2()/InputFloat3()/InputFloat4() variants taking a int decimal_precision parameter.
  • Removed redirecting functions/enums names that were marked obsolete in 1.63 (August 2018):
    • ImGui::IsItemDeactivatedAfterChange() -> use ImGui::IsItemDeactivatedAfterEdit()
    • ImGuiCol_ModalWindowDarkening -> use ImGuiCol_ModalWindowDimBg
    • ImGuiInputTextCallback -> use ImGuiTextEditCallback
    • ImGuiInputTextCallbackData -> use ImGuiTextEditCallbackData
  • Internals: Columns: renamed undocumented/internals ImGuiColumnsFlags_* to ImGuiOldColumnFlags_* to reduce confusion with Tables API. Keep redirection enums (will obsolete). (#125, #513, #913, #1204, #1444, #2142, #2707)
  • Renamed io.ConfigWindowsMemoryCompactTimer to io.ConfigMemoryCompactTimer as the feature now applies to other data structures. (#2636)

All Changes

  • Tables: added new Tables Beta API as a replacement for old Columns. (#3740, #2957, #125)
    Check out `Demo->Tables for many demos.
    Read API comments in imgui.h for details. Read extra commentary in imgui_tables.cpp.
    • Added 16 functions:
      • BeginTable(), EndTable()
      • TableNextRow(), TableNextColumn(), TableSetColumnIndex()
      • TableSetupColumn(), TableSetupScrollFreeze()
      • TableHeadersRow(), TableHeader()
      • TableGetRowIndex(), TableGetColumnCount(), TableGetColumnIndex(), TableGetColumnName(), TableGetColumnFlags()
      • TableGetSortSpecs(), TableSetBgColor()
    • Added 3 flags sets:
      • ImGuiTableFlags (29 flags for: features, decorations, sizing policies, padding, clipping, scrolling, sorting etc.)
      • ImGuiTableColumnFlags (24 flags for: width policies, default settings, sorting options, indentation options etc.)
      • ImGuiTableRowFlags (1 flag for: header row)
    • Added 2 structures: ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs
    • Added 2 enums: ImGuiSortDirection, ImGuiTableBgTarget
    • Added 1 style variable: ImGuiStyleVar_CellPadding
    • Added 5 style colors: ImGuiCol_TableHeaderBg, ImGuiCol_TableBorderStrong, ImGuiCol_TableBorderLight, ImGuiCol_TableRowBg, ImGuiCol_TableRowBgAlt.
  • Tab Bar: Made it possible to append to an existing tab bar by calling BeginTabBar()/EndTabBar() again.
  • Tab Bar: Fixed using more than 128 tabs in a tab bar (scrolling policy recommended).
  • Tab Bar: Do not display a tooltip if the name already fits over a given tab. (#3521)
  • Tab Bar: Fixed minor/unlikely bug skipping over a button when scrolling left with arrows.
  • Tab Bar: Requested ideal content size (for auto-fit) doesn't affect horizontal scrolling. (#3414)
  • Drag and Drop: Fix losing drop source Active ID (and often source tooltip) when opening a TreeNode() or CollapsingHeader() while dragging. (#1738)
  • Drag and Drop: Fix drag and drop to tie same-size drop targets by chosen the later one. Fixes dragging
    into a full-window-sized dockspace inside a zero-padded window. (#3519, #2717) [@Black-Cat]
  • Checkbox: Added CheckboxFlags() helper with int* type (internals have a template version, not exposed).
  • Clipper: Fixed incorrect end-list positioning when using ImGuiListClipper with 1 item (bug in 1.79). (#3663) [@nyorain]
  • InputText: Fixed updating cursor/selection position when a callback altered the buffer in a way where the byte count is unchanged but the decoded character count changes. (#3587) [@gqw]
  • InputText: Fixed switching from single to multi-line while preserving same ID.
  • Combo: Fixed using IsItemEdited() after Combo() not matching the return value from Combo(). (#2034)
  • DragFloat, DragInt: very slightly increased mouse drag threshold + expressing it as a factor of default value.
  • DragFloat, DragInt: added experimental io.ConfigDragClickToInputText feature to enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). (#3737)
  • Nav: Fixed IsItemFocused() from returning false when Nav highlight is hidden because mouse has moved. It's essentially been always the case but it doesn't make much sense. Instead we will aim at exposing feedback and control of keyboard/gamepad navigation highlight and mouse hover disable flag. (#787, #2048)
  • Metrics: Fixed mishandling of ImDrawCmd::VtxOffset in wireframe mesh renderer.
  • Metrics: Rebranded as "Dear ImGui Metrics/Debugger" to clarify its purpose.
  • ImDrawList: Added ImDrawList::AddQuadBezierCurve(), ImDrawList::PathQuadBezierCurveTo() quadratic bezier helpers. (#3127, #3664, #3665) [@aiekick]
  • Fonts: Updated GetGlyphRangesJapanese() to include a larger 2999 ideograms selection of Joyo/Jinmeiyo kanjis, from the previous 1946 ideograms selection. This will consume a some more memory but be generally much more fitting for Japanese display, until we switch to a more dynamic atlas. (#3627) [@vaiorabbit] <- Literally the best-ever pull-request created by mankind.
  • Log/Capture: fix capture to work on clipped child windows.
  • Misc: Made the ItemFlags stack shared, so effectively the ButtonRepeat/AllowKeyboardFocus states (and others exposed in internals such as PushItemFlag) are inherited by stacked Begin/End pairs, vs previously a non-child stacked Begin() would reset those flags back to zero for the stacked window.
  • Misc: Replaced UTF-8 decoder with one based on branchless one by Christopher Wellons. [@rokups] Super minor fix handling incomplete UTF-8 contents: if input does not contain enough bytes, decoder returns IM_UNICODE_CODEPOINT_INVALID and consume remaining bytes (vs old decoded consumed only 1 byte).
  • Misc: Fix format warnings when using gnu printf extensions in a setup that supports them (gcc/mingw). (#3592)
  • Misc: Made EndFrame() assertion for key modifiers being unchanged during the frame (added in 1.7...
Read more