Skip to content

Releases: ocornut/imgui

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

v1.79

08 Oct 14:10
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


Thank you!

Ongoing work on Dear ImGui is currently financially supported by:

We are transitioning toward a B2B model to sustain, maintain and grow this project. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.

Huge thank you to all past and present supporters!

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.)

  • Fonts: Removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. DisplayOffset was applied after scaling and not very meaningful/useful outside of being needed by the default ProggyClean font. It was also getting in the way of better font scaling, so let's get rid of it now! If you used DisplayOffset it was probably in association to rasterizing a font at a specific size, in which case the corresponding offset may be reported into GlyphOffset. If you scaled this value after calling AddFontDefault(), this is now done automatically. (#1619)
  • ImGuiListClipper: Renamed constructor parameters which created an ambiguous alternative to using the ImGuiListClipper::Begin() function, with misleading edge cases. Always use ImGuiListClipper::Begin()! Kept inline redirection function (will obsolete). Note: imgui_memory_editor in version 0.40 from imgui_club used this old clipper API. Update your copy if needed.
  • Style: Renamed style.TabMinWidthForUnselectedCloseButton to style.TabMinWidthForCloseButton.
  • Renamed ImGuiSliderFlags_ClampOnInput to ImGuiSliderFlags_AlwaysClamp. Kept redirection enum (will obsolete).
  • Renamed OpenPopupContextItem() back to OpenPopupOnItemClick(), REVERTED CHANGE FROM 1.77. For variety of reason this is more self-explanatory and less error-prone. Kept inline redirection function (will obsolete).
  • Removed return value from OpenPopupOnItemClick() - returned true on mouse release on item - because it is inconsistent with other popups API and makes others misleading. It's also and unnecessary: you can use IsWindowAppearing() after BeginPopup() for a similar result.

Other Changes

  • Window: Fixed using non-zero pivot in SetNextWindowPos() when the window is collapsed. (#3433)
  • Nav: Fixed navigation resuming on first visible item when using gamepad. [@rokups]
  • Nav: Fixed using Alt to toggle the Menu layer when inside a Modal window. (#787)
  • Scrolling: Fixed SetScrollHere() functions edge snapping when called during a frame where ContentSize is changing (issue introduced in 1.78). (#3452).
  • InputText: Added support for Page Up/Down in InputTextMultiline(). (#3430) [@Xipiryon]
  • InputText: Added selection helpers in ImGuiInputTextCallbackData().
  • InputText: Added ImGuiInputTextFlags_CallbackEdit to modify internally owned buffer after an edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active).
  • InputText: Fixed using ImGuiInputTextFlags_Password with InputTextMultiline(). It is a rather unusual or useless combination of features but no reason it shouldn't work! (#3427, #3428)
  • InputText: Fixed minor scrolling glitch when erasing trailing lines in InputTextMultiline().
  • InputText: Fixed cursor being partially covered after using CTRL+End key.
  • InputText: Fixed callback's helper DeleteChars() function when cursor is inside the deleted block. (#3454)
  • InputText: Made pressing Down arrow on the last line when it doesn't have a carriage return not move to the end of the line (so it is consistent with Up arrow, and behave same as Notepad and Visual Studio. Note that some other text editors instead would move the cursor to the end of the line). [@Xipiryon]
  • Tab Bar: Added TabItemButton() to submit tab that behave like a button. (#3291) [@Xipiryon]
  • Tab Bar: Added ImGuiTabItemFlags_Leading and ImGuiTabItemFlags_Trailing flags to position tabs or button at either end of the tab bar. Those tabs won't be part of the scrolling region, and when reordering cannot be moving outside of their section. Most often used with TabItemButton(). (#3291) [@Xipiryon]
  • Tab Bar: Added ImGuiTabItemFlags_NoReorder flag to disable reordering a given tab.
  • Tab Bar: Keep tab item close button visible while dragging a tab (independent of hovering state).
  • Tab Bar: Fixed a small bug where closing a tab that is not selected would leave a tab hole for a frame.
  • Tab Bar: Fixed a small bug where scrolling buttons (with ImGuiTabBarFlags_FittingPolicyScroll) would generate an unnecessary extra draw call.
  • Tab Bar: Fixed a small bug where toggling a tab bar from Reorderable to not Reorderable would leave tabs reordered in the tab list popup. [@Xipiryon]
  • DragFloat, DragScalar: Fixed ImGuiSliderFlags_ClampOnInput not being honored in the special case where v_min == v_max. (#3361)
  • SliderInt, SliderScalar: Fixed reaching of maximum value with inverted integer min/max ranges, both with signed and unsigned types. Added reverse Sliders to Demo. (#3432, #3449) [@rokups]
  • Text: Bypass unnecessary formatting when using the TextColored()/TextWrapped()/TextDisabled() helpers with a "%s" format string. (#3466)
  • CheckboxFlags: Display mixed-value/tristate marker when passed flags that have multiple bits set and stored value matches neither zero neither the full set.
  • BeginMenuBar: Fixed minor bug where CursorPosMax gets pushed to CursorPos prior to calling BeginMenuBar() so e.g. calling the function at the end of a window would often add +ItemSpacing.y to scrolling range.
  • TreeNode, CollapsingHeader: Made clicking on arrow toggle toggle the open state on the Mouse Down event rather than the Mouse Down+Up sequence, even if the _OpenOnArrow flag isn't set. This is standard behavior and amends the change done in 1.76 which only affected cases were _OpenOnArrow flag was set. (This is also necessary to support full multi/range-select/drag and drop operations.)
  • Columns: Fix inverted ClipRect being passed to renderer when using certain primitives inside of a fully clipped column. (#3475) [@szreder]
  • Popups, Tooltips: Fix edge cases issues with positioning popups and tool-tips when they are larger than viewport on either or both axises. [@rokups]
  • Fonts: AddFontDefault() adjust its vertical offset based on floor(size/13) instead of always +1. Was previously done by altering DisplayOffset.y but wouldn't work for DPI scaled font.
  • Metrics: Various tweaks, listing windows front-to-back, greying inactive items when possible.
  • Demo: Add simple InputText() callbacks demo (aside from the more elaborate ones in Examples->Console).
  • Backends: OpenGL3: Fix to avoid compiling/calling glBindSampler() on ES or pre 3.3 contexts which have the defines set by a loader. (#3467, #1985) [@jjwebb]
  • Backends: Vulkan: Some internal refactor aimed at allowing multi-viewport feature to create their own render pass. (#3455, #3459) [@FunMiles]
  • Backends: DX12: Clarified that imgui_impl_dx12 can be compiled on 32-bit systems by redefining the ImTextureID to be 64-bit (e.g. '#define ImTextureID ImU64' in imconfig.h). (#301)
  • Backends: DX12: Fix debug layer warning when scissor rect is zero-sized. (#3472, #3462) [@StoneWolf]
  • Examples: Vulkan: Reworked buffer resize handling, fix for Linux/X11. (#3390, #2626) [@RoryO]
  • Examples: Vulkan: Switch validation layer to use VK_LAYER_KHRONOS_validation instead of VK_LAYER_LUNARG_standard_validation which is deprecated (#3459) [@FunMiles]
  • Examples: DX12: Enable breaking on any warning/error when debug interface is enabled.
  • Examples: DX12: Added #define ImTextureID ImU64 in project and build files to also allow building on 32-bit systems. Added project to default Visual Studio solution file. (#301)

Tab Bar: TabItemButton() + ImGuiTabItemFlags_Trailing
image

CheckboxFlags() with visible tri-state (previously only in internals)
image

Other branches & Beta features!

The Tables (#2957) features is still available for testing, it is expected to fully stabilize and be merged for 1.80. You are encouraged to use Tables and provide feedback today. Currently doing a few final aggressive changes before stabilizing the API.

Some user-visible changes from 1.78 in 1.79 related to the tables branch include:

  • Tables: BREAKING CHANGE: Renamed TableNextCell() to TableNextColumn(). (see #2957 (comment))
  • Tables: BREAKING CHANGE: Made TableN...
Read more

v1.78

18 Aug 15:58
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


Thank you!

Ongoing work on Dear ImGui is currently financially supported by:

We are transitioning toward a B2B model to grow project. If your company uses Dear ImGui, consider reaching out at contact at dearimgui.com to help us sustain and improve Dear ImGui.

Huge thank you to all past and present supporters!

Breaking Changes

(Read carefully, not as scary as it sounds. If you maintain a language binding for dear imgui, you may want to evaluate how this might impact users, depending on the language provide dynamic dispatch functions, or simply let the low-level code handle it)

  • Obsoleted use of the trailing float power=1.0f parameter for those functions: [@ShironekoBen, @ocornut]
    • DragFloat(), DragFloat2(), DragFloat3(), DragFloat4(), DragFloatRange2(), DragScalar(), DragScalarN().
    • SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4(), SliderScalar(), SliderScalarN().
    • VSliderFloat(), VSliderScalar().
  • Replaced the final float power=1.0f argument with ImGuiSliderFlags flags defaulting to 0 (as with all our flags).
    Worked out a backward-compatibility scheme so hopefully most C++ codebase should not be affected.
    In short, when calling those functions:
    • If you omitted the 'power' parameter (likely in C++), you are not affected.
    • If you set the 'power' parameter to 1.0f (same as previous default value):
      • Your compiler may warn on float>int conversion.
      • Everything else will work (but will assert if IMGUI_DISABLE_OBSOLETE_FUNCTIONS is defined).
      • You can replace the 1.0f value with 0 to fix the warning, and be technically correct.
    • If you set the 'power' parameter to >1.0f (to enable non-linear editing):
      • Your compiler may warn on float>int conversion.
      • Code will assert at runtime for IM_ASSERT(power == 1.0f) with the following assert description:
        "Call Drag function with ImGuiSliderFlags_Logarithmic instead of using the old 'float power' function!".
      • In case asserts are disabled, the code will not crash and enable the _Logarithmic flag.
      • You can replace the >1.0f value with ImGuiSliderFlags_Logarithmic to fix the warning/assert
        and get a similar effect as previous uses of power >1.0f.
        See #3361 for all details.
        Kept inline redirection functions (will obsolete) apart for: DragFloatRange2(), VSliderFloat(), VSliderScalar(). For those three the 'float power=1.0f' version was removed directly as they were most unlikely ever used.
  • DragInt, DragFloat, DragScalar: Obsoleted use of v_min > v_max to lock edits (introduced in 1.73, inconsistent, and was not demoed nor documented much, will be replaced a more generic ReadOnly feature).

Other Changes

  • Nav: Fixed clicking on void (behind any windows) from not clearing the focused window. This would be problematic e.g. in situation where the application relies on io.WantCaptureKeyboard flag being cleared accordingly. (bug introduced in 1.77 WIP on 2020/06/16) (#3344, #2880)
  • Window: Fixed clicking over an item which hovering has been disabled (e.g inhibited by a popup) from marking the window as moved.
  • Drag, Slider: Added ImGuiSliderFlags parameters.
    • For float functions they replace the old trailing float power=1.0 parameter. (See #3361 and the "Breaking Changes" block above for all details).
    • Added ImGuiSliderFlags_Logarithmic flag to enable logarithmic editing (generally more precision around zero), as a replacement to the old 'float power' parameter which was obsoleted. (#1823, #1316, #642) [@ShironekoBen, @AndrewBelt]
    • Added ImGuiSliderFlags_ClampOnInput flag to force clamping value when using CTRL+Click to type in a value manually. (#1829, #3209, #946, #413).
    • Added ImGuiSliderFlags_NoRoundToFormat flag to disable rounding underlying value to match precision of the display format string. (#642)
    • Added ImGuiSliderFlags_NoInput flag to disable turning widget into a text input with CTRL+Click or Nav Enter.- Nav, Slider: Fix using keyboard/gamepad controls with certain logarithmic sliders where pushing a direction near zero values would be cancelled out. [@ShironekoBen]
  • DragFloatRange2, DragIntRange2: Fixed an issue allowing to drag out of bounds when both min and max value are on the same value. (#1441)
  • InputText, ImDrawList: Fixed assert triggering when drawing single line of text with more than ~16 KB characters. (Note that current code is going to show corrupted display if after clipping, more than 16 KB characters are visible in the same low-level ImDrawList::RenderText() call. ImGui-level functions such as TextUnformatted() are not affected. This is quite rare but it will be addressed later). (#3349)
  • Selectable: Fixed highlight/hit extent when used with horizontal scrolling (in or outside columns). Also fixed related text clipping when used in a column after the first one. (#3187, #3386)
  • Scrolling: Avoid SetScroll(), SetScrollFromPos() functions from snapping on the edge of scroll limits when close-enough by (WindowPadding - ItemPadding), which was a tweak with too many side-effects. The behavior is still present in SetScrollHere() functions as they are more explicitly aiming at making widgets visible. May later be moved to a flag.
  • Tab Bar: Allow calling SetTabItemClosed() after a tab has been submitted (will process next frame).
  • InvisibleButton: Made public a small selection of ImGuiButtonFlags (previously in imgui_internal.h) and allowed to pass them to InvisibleButton(): ImGuiButtonFlags_MouseButtonLeft/Right/Middle. This is a small but rather important change because lots of multi-button behaviors could previously only be achieved using lower-level/internal API. Now also available via high-level InvisibleButton() with is a de-facto versatile building block to creating custom widgets with the public API.
  • Fonts: Fixed ImFontConfig::GlyphExtraSpacing and ImFontConfig::PixelSnapH settings being pulled from the merged/target font settings when merging fonts, instead of being pulled from the source font settings.
  • ImDrawList: Thick anti-aliased strokes (> 1.0f) with integer thickness now use a texture-based path, reducing the amount of vertices/indices and CPU/GPU usage. (#3245) [@ShironekoBen]
    • This change will facilitate the wider use of thick borders in future style changes.
    • Requires an extra bit of texture space (~64x64 by default), relies on GPU bilinear filtering.
    • Set io.AntiAliasedLinesUseTex = false to disable rendering using this method.
    • Clear ImFontAtlasFlags_NoBakedLines in ImFontAtlas::Flags to disable baking data in texture.
  • ImDrawList: changed AddCircle(), AddCircleFilled() default num_segments from 12 to 0, effectively enabling auto-tessellation by default. Tweak tessellation in Style Editor->Rendering section, or by modifying the style.CircleSegmentMaxError value. [@ShironekoBen]
  • ImDrawList: Fixed minor bug introduced in 1.75 where AddCircle() with 12 segments would generate an extra vertex. (This bug was mistakenly marked as fixed in earlier 1.77 release). [@ShironekoBen]
  • Demo: Improved "Custom Rendering"->"Canvas" demo with a grid, scrolling and context menu. Also showcase using InvisibleButton() with multiple mouse buttons flags.
  • Demo: Improved "Layout & Scrolling" -> "Clipping" section.
  • Demo: Improved "Layout & Scrolling" -> "Child Windows" section.
  • Style Editor: Added preview of circle auto-tessellation when editing the corresponding value.
  • Backends: OpenGL3: Added support for glad2 loader. (#3330) [@moritz-h]
  • Backends: Allegro 5: Fixed horizontal scrolling direction with mouse wheel / touch pads (it seems like Allegro 5 reports it differently from GLFW and SDL). (#3394, #2424, #1463) [@nobody-special666]
  • Examples: Vulkan: Fixed GLFW+Vulkan and SDL+Vulkan clear color not being set. (#3390) [@RoryO]
  • CI: Emscripten has stopped their support for their fastcomp backend, switching to latest sdk [@Xipiryon]

Demo
Demo

Other branches & Beta features!

Tables
Tables

The tables (#2957) features is still available for testing, it is expected to fully stabilize and be merged for 1.80. You are encourage to use Tables today and provide feedback.

Some user-visible changes from 1.77 in 1.78 related to the **t...

Read more

v1.77

29 Jun 15:17
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


Thank you!

Ongoing work on Dear ImGui is currently financially supported by:

We are transitioning toward a B2B model to grow and sustain the project (also see: "What happened in 2019?"). If your company uses Dear ImGui, consider reaching out at contact at dearimgui.com.

Huge thank you to all past and present supporters!

Breaking Changes

  • Removed ImFontAtlas::AddCustomRectRegular() unnecessary first argument ID. Please note that this is a Beta api and will likely be reworked in order to support multi-DPI across multiple monitor s.
  • Renamed OpenPopupOnItemClick() to OpenPopupContextItem(). Kept inline redirection function (will obsolete).
  • Removed BeginPopupContextWindow(const char*, int mouse_button, bool also_over_items) in favor of BeginPopupContextWindow(const char*, ImGuiPopupFlags flags) with ImGuiPopupFlags_NoOverItems. Kept inline redirection function (will obsolete).
  • Removed obsoleted CalcItemRectClosestPoint() entry point (has been asserting since December 2017).

Other Changes

  • TreeNode: Fixed bug where BeginDragDropSource() failed when the _OpenOnDoubleClick flag is enabled (bug introduced in 1.76, but pre-1.76 it would also fail unless the _OpenOnArrow flag was also set, and _OpenOnArrow is frequently set along with _OpenOnDoubleClick).
  • TreeNode: Fixed bug where dragging a payload over a TreeNode() with either _OpenOnDoubleClick or _OpenOnArrow would open the node. (#143)
  • Windows: Fix unintended feedback loops when resizing windows close to main viewport edges. [@rokups]
  • Tabs: Added style.TabMinWidthForUnselectedCloseButton settings:
    • Set to 0.0f (default) to always make a close button appear on hover (same as Chrome, VS).
    • Set to FLT_MAX to only display a close button when selected (merely hovering is not enough).
    • Set to an intermediary value to toggle behavior based on width (same as Firefox).
  • Tabs: Added a ImGuiTabItemFlags_NoTooltip flag to disable the tooltip for individual tab item (vs ImGuiTabBarFlags_NoTooltip for entire tab bar). [@Xipiryon]
  • Popups: All functions capable of opening popups (OpenPopup*, BeginPopupContext*) now take a new ImGuiPopupFlags sets of flags instead of a mouse button index. The API is automatically backward compatible as ImGuiPopupFlags is guaranteed to hold mouse button index in the lower bits.
  • Popups: Added ImGuiPopupFlags_NoOpenOverExistingPopup for OpenPopup*/BeginPopupContext* functions to first test for the presence of another popup at the same level.
  • Popups: Added ImGuiPopupFlags_NoOpenOverItems for BeginPopupContextWindow() - similar to testing for !IsAnyItemHovered() prior to doing an OpenPopup().
  • Popups: Added ImGuiPopupFlags_AnyPopupId and ImGuiPopupFlags_AnyPopupLevel flags for IsPopupOpen(), allowing to check if any popup is open at the current level, if a given popup is open at any popup level, if any popup is open at all.
  • Popups: Fix an edge case where programmatically closing a popup while clicking on its empty space would attempt to focus it and close other popups. (#2880)
  • Popups: Fix BeginPopupContextVoid() when clicking over the area made unavailable by a modal. (#1636)
  • Popups: Clarified some of the comments and function prototypes.
  • Modals: BeginPopupModal() doesn't set the ImGuiWindowFlags_NoSavedSettings flag anymore, and will not always be auto-centered. Note that modals are more similar to regular windows than they are to popups, so api and behavior may evolve further toward embracing this. (#915, #3091). Enforce centering using e.g. SetNextWindowPos(io.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f,0.5f)).
  • Metrics: Added a "Settings" section with some details about persistent ini settings.
  • Nav, Menus: Fix vertical wrap-around in menus or popups created with multiple appending calls to BeginMenu()/EndMenu() or BeginPopup()/EndPopup()`. (#3223, #1207) [@rokups]
  • Drag and Drop: Fixed unintended fallback "..." tooltip display during drag operation when
    drag source uses _SourceNoPreviewTooltip flags. (#3160) [@rokups]
  • Columns: Lower overhead on column switches and switching to background channel.
    Benefits Columns but was primarily made with Tables in mind!
  • Fonts: Fix GetGlyphRangesKorean() end-range to end at 0xD7A3 (instead of 0xD79D). (#348, #3217) [@marukrap]
  • ImDrawList: Fixed an issue where draw command merging or primitive unreserve while crossing the VtxOffset boundary would lead to draw commands with wrong VtxOffset. (#3129, #3163, #3232, #2591) [@thedmd, @ShironekoBen, @sergeyn, @ocornut]
  • ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where changing channels with different TextureId, VtxOffset would incorrectly apply new settings to draw channels. (#3129, #3163) [@ocornut, @thedmd, @ShironekoBen]
  • ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where starting a split when current VtxOffset was not zero would lead to draw commands with wrong VtxOffset. (#2591)
  • ImDrawList, ImDrawListSplitter, Columns: Fixed an issue where starting a split right after a callback draw command would incorrectly override the callback draw command.
  • ImDrawList: Fixed minor bug introduced in 1.75 where AddCircle() with 12 segments would generate an extra unrequired vertex. [@ShironekoBen]
  • Misc, Freetype: Fix for rare case where FT_Get_Char_Index() succeeds but FT_Load_Glyph() fails.
  • Docs: Improved and moved font documentation to docs/FONTS.md so it can be readable on the web. Updated various links/wiki accordingly. Added FAQ entry about DPI. (#2861) [@ButternCream, @ocornut]
  • CI: Added CI test to verify we're never accidentally dragging libstdc++ (on some compiler setups, static constructors for non-pod data seems to drag in libstdc++ due to thread-safety concerns). Fixed a static constructor which led to this dependency on some compiler setups.
  • Backends: Win32: Support for #define NOGDI, won't try to call GetDeviceCaps(). (#3137, #2327)
  • Backends: Win32: Fix _WIN32_WINNT < 0x0600 (MinGW defaults to 0x502 == Windows 2003). (#3183)
  • Backends: SDL: Report a zero display-size when window is minimized, consistent with other back-ends, making more render/clipping code use an early out path.
  • Backends: OpenGL: Fixed handling of GL 4.5+ glClipControl(GL_UPPER_LEFT) by inverting the projection matrix top and bottom values. (#3143, #3146) [@u3shit]
  • Backends: OpenGL: On OSX, if unspecified by app, made default GLSL version 150. (#3199) [@albertvaka]
  • Backends: OpenGL: Fixed loader auto-detection to not interfere with ES2/ES3 defines. (#3246) [@funchal]
  • Backends: Vulkan: Fixed error in if initial frame has no vertices. (#3177)
  • Backends: Vulkan: Fixed edge case where render callbacks wouldn't be called if the ImDrawData structure didn't have any vertices. (#2697) [@kudaba]
  • Backends: OSX: Added workaround to avoid fast mouse clicks. (#3261, #1992, #2525) [@nburrus]
  • Examples: GLFW+Vulkan, SDL+Vulkan: Fix for handling of minimized windows. (#3259)
  • Examples: Apple: Fixed example_apple_metal and example_apple_opengl2 using imgui_impl_osx.mm not forwarding right and center mouse clicks. (#3260) [@nburrus]

Other branches & Beta features!

The tables (#2957) features is still available for testing. When it stabilize we will merge it to master (expected to be part of 1.80).

Tables

Some user-visible changes from 1.76 in 1.77 related to the tables branch include:

  • Tables: Restore width/weight saving/loading code. Non-weighted width are font/DPI change friendly.
  • Tables: Resizing weighted column preserve sum of weights. Fix ResizedColumn init leading to undesirable TableSetColumnWidth() on first run.
  • Tables: Added TableGetHoveredColumn(), simplifying TableAutoHeaders() toward aim of it being a user-land function.
  • Tables: Made TableHeader() responsible for opening per-column context menu to move responsibility away from TableAutoHeaders().
  • Tables: Fix TableDrawMergeChannels() mistakenly merging unfrozen columns ClipRect with host ClipRect.
  • Tables: Fix assert/crash when a visible column is clipped in a multi clip group situation.
  • Tables: Fix sort specs sometimes incorrectly reporting sort spec count when table loses _MultiSortable flag during runtime.
  • Tables: Fixed a manual resize path not marking settings as dirty, TableSortSpecsSanitize() doesn't need to test table->IsInitializing
  • Tables: Try to report contents width to outer window, generally better auto-fit.
  • Tables: Fixed incorrect application of CursorMaxPos.x. (#3162)
  • Tables: Fixed ignoring DefaultHide or Defaul...
Read more

v1.76

12 Apr 18:25
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


Thank you!

Ongoing work on Dear ImGui is currently financially supported by Blizzard, Ubisoft, Nvidia, Google, along with Activision, Next Level Games, Supercell, Remedy and more. See sponsors page for details.

We are transitioning toward a B2B model to grow and sustain the project (also see: "What happened in 2019?"). If your company uses Dear ImGui, consider reaching out at contact at dearimgui.com.

Huge thank you to all past and present supporters!

All Changes

(No known API breaking changes)

  • Drag and Drop, Nav: Disabling navigation arrow keys when drag and drop is active. In the docking branch pressing arrow keys while dragging a window from a tab could trigger an assert. (#3025)
  • BeginMenu: Using same ID multiple times appends content to a menu. (#1207) [@rokups]
  • BeginMenu: Fixed a bug where SetNextWindowXXX data before a BeginMenu() would not be cleared when the menu is not open. (#3030)
  • InputText: Fixed password fields displaying ASCII spaces as blanks instead of using the '*' glyph. (#2149, #515)
  • Selectable: Fixed honoring style.SelectableTextAlign with unspecified size. (#2347, #2601)
  • Selectable: Allow using ImGuiSelectableFlags_SpanAllColumns in other columns than first. (#125)
  • TreeNode: Made clicking on arrow with _OpenOnArrow toggle the open state on the Mouse Down event rather than the Mouse Down+Up sequence (this is rather standard behavior).
  • ColorButton: Added ImGuiColorEditFlags_NoBorder flag to remove the border normally enforced by default for standalone ColorButton.
  • Nav: Fixed interactions with ImGuiListClipper, so e.g. Home/End result would not clip the landing item on the landing frame. (#787)
  • Nav: Internals: Fixed currently focused item from ever being clipped by ItemAdd(). (#787)
  • Scrolling: Fixed scrolling centering API leading to non-integer scrolling values and initial cursor position. This would often get fixed after the fix item submission, but using the ImGuiListClipper as the first thing after Begin() could largely break size calculations. (#3073)
  • Added optional support for Unicode plane 1-16 (#2538, #2541, #2815) [@cloudwu, @samhocevar]
    • Compile-time enable with #define IMGUI_USE_WCHAR32 in imconfig.h.
    • More onsistent handling of unsupported code points (0xFFFD).
    • Surrogate pairs are supported when submitting UTF-16 data via io.AddInputCharacterUTF16(), allowing for more complete CJK input.
    • sizeof(ImWchar) goes from 2 to 4. IM_UNICODE_CODEPOINT_MAX goes from 0xFFFF to 0x10FFFF.
    • Various structures such as ImFont, ImFontGlyphRangesBuilder will use more memory, this is currently not particularly efficient.
  • Columns: undid the change in 1.75 were Columns()/BeginColumns() were preemptively limited to 64 columns with an assert. (#3037, #125)
  • Window: Fixed a bug with child window inheriting ItemFlags from their parent when the child window also manipulate the ItemFlags stack. (#3024) [@Stanbroek]
  • Font: Fixed non-ASCII space occasionally creating unnecessary empty looking polygons.
  • Misc: Added an explicit compile-time test for non-scoped IM_ASSERT() macros to redirect users to a solution rather than encourage people to add braces in the codebase.
  • Misc: Added additional checks in EndFrame() to verify that io.KeyXXX values have not been tampered with between NewFrame() and EndFrame().
  • Misc: Made default clipboard handlers for Win32 and OSX use a buffer inside the main context instead of a static buffer, so it can be freed properly on Shutdown. (#3110)
  • Misc, Freetype: Fixed support for IMGUI_STB_RECT_PACK_FILENAME compile time directive in imgui_freetype.cpp (matching support in the regular code path). (#3062) [@DonKult]
  • Metrics: Made Tools section more prominent. Showing wire-frame mesh directly hovering the ImDrawCmd instead of requiring to open it. Added options to disable bounding box and mesh display. Added notes on inactive/gc-ed windows.
  • Demo: Added black and white and color gradients to Demo>Examples>Custom Rendering.
  • CI: Added more tests on the continuous-integration server: extra warnings for Clang/GCC, building SDL+Metal example, building imgui_freetype.cpp, more compile-time imconfig.h settings: disabling obsolete functions, enabling 32-bit ImDrawIdx, enabling 32-bit ImWchar, disabling demo. [@rokups]
  • Backends: OpenGL3: Fixed version check mistakenly testing for GL 4.0+ instead of 3.2+ to enable ImGuiBackendFlags_RendererHasVtxOffset, leaving 3.2 contexts without it. (#3119, #2866) [@wolfpld]
  • Backends: OpenGL3: Added include support for older glbinding 2.x loader. (#3061) [@DonKult]
  • Backends: Win32: Added ImGui_ImplWin32_EnableDpiAwareness(), ImGui_ImplWin32_GetDpiScaleForHwnd(), ImGui_ImplWin32_GetDpiScaleForMonitor() helpers functions (backported from the docking branch). Those functions makes it easier for example apps to support hi-dpi features without setting up a manifest.
  • Backends: Win32: Calling AddInputCharacterUTF16() from WM_CHAR message handler in order to support high-plane surrogate pairs. (#2815) [@cloudwu, @samhocevar]
  • Backends: SDL: Added ImGui_ImplSDL2_InitForMetal() for API consistency (even though the function currently does nothing).
  • Backends: SDL: Fixed mapping for ImGuiKey_KeyPadEnter. (#3031) [@Davido71]
  • Examples: Win32+DX12: Fixed resizing main window, enabled debug layer. (#3087, #3115) [@sergeyn]
  • Examples: SDL+DX11: Fixed resizing main window. (#3057) [@joeslay]
  • Examples: Added SDL+Metal example application. (#3017) [@coding-jackalope]

Stay safe (and sneeze in your elbow)!

Other branches & Beta features!

New! The tables (#2957) features is still available for testing. When it stabilize we will merge it to master (expected merge in Q2 2020).

Tables

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.75 in 1.76 related to the docking branch (multi-viewport and docking features) include:

  • Docking: Fixed assert preventing dockspace from being created instead a hidden tab. (#3101)
  • Viewports: Fixed secondary viewports accidentally merging into a minimized host viewport. (#3118)
  • Viewports, Docking: Added per-viewport work area system for e.g. menu-bars. Fixed DockspaceOverViewport() and demo code (overlay etc) accordingly. (#3035, #2889, #2474, #1542, #2109)
  • Viewports: Improve menu positioning in multi-monitor setups. [@rokups]
  • Viewports: Software mouse cursor is also scaled by current DpiScale. (amend #939)
  • Viewports: Avoid manually clipping resize grips and borders, which messes up with automation ability to locate those items. Also simpler and more standard.
  • Viewports: Fix for UWP in the imgui_impl_win32.cpp IME handler. (#2895, #2892).
  • Viewports: Bunch of extra of comments to facilitate setting up multi-viewports.
  • Viewports, GLFW: Avoid using window positioning workaround for GLFW 3.3+ versions that have it fixed. Amend 09780b8.

Some of the changes to 1.75 to 1.76 related to the tables branch include:

  • Tables: Fix sort direction arrow (#3023). Remove SortOrder from ImGuiTableSortSpecsColumn. Made sort arrow smaller.
  • Tables: Added TableSetColumnWidth() api variant aimed at becoming public facing.
  • Tables: Fixed advanced demo layout when clipped.
  • Tables: Fix scrolling freeze bug with more than 32 columns (#3058). Fix limit of 63 columms instead of 64.
  • Tables: Locking IndentX per-row so multiple columns with IndentEnabled don't get indent shearing.
  • Tables: Added per-column ImGuiTableColumnFlags_NoReorder flag.

Some of the changes to 1.75 to 1.76 related to the range_select branch (experimental multi-select/range-select API) include:

  • RangeSelect/MultiSelect: Fixed CTRL+A not testing focus scope id. Fixed CTRL+A not testing active id.
  • RangeSelect/MultiSelect: Added more demo code.
  • RangeSelect/MultiSelect: Fix Selectable() ambiguous return value, clarify need to use IsItemToggledSelection().
  • RangeSelect/MultiSelect; Fix a race condition where releasing a keyboard modifier on the frame after a keypress would erroneously ignore the key press.
  • Treenode fixes with multi-select api enabled.

There's a CMake pull-request (#1713) if you prefer a traditional CMake integration over registering imgui sources files in your own project. There's a premake5 branch if you prefer the saner and nicer Visual Studio projects generated by premake.

Help wanted!

  • If your company uses Dear ImGui, you can reach out to contact at dearimgui.com.
  • Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you a...
Read more

v1.75

10 Feb 13:06
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


Thank you!

Ongoing work on Dear ImGui is currently financially supported by Blizzard, Google, Ubisoft, Nvidia along with Remedy, Next Level Games. Supercell, Framefield, Mobigame, DotEmu, Media Molecule.

We are transitioning toward a B2B model to grow and sustain the project (also see: "What happened in 2019?"). If your company uses Dear ImGui and you would like to meet at GDC 2020, you can reach out to denis at dearimgui.com.

Huge thank you to all past and present supporters!

TL;DR;

  • Removed redirecting functions/enums names which were marked obsolete in 1.53 (December 2017).
  • Dozens of fixes, e.g. for Ctrl+Tab, InputText, ColorEdit, in backends etc. among other things.
  • Made the new Tables API public (#2957), it is now available for testing in a branch and will be merged to master once stabilized (hopefully by next release). Feedback welcome!
  • Added ImDrawList::AddNgon apis for explicit low-polygon count, in prevision for future version making all circles actually round. ImDrawList::AddCircle apis can now takes a zero segment count to use auto-tesselation.

Breaking Changes

  • Removed redirecting functions/enums names that were marked obsolete in 1.53 (December 2017):
    If you were still using the old names, while you are cleaning up, considering enabling IMGUI_DISABLE_OBSOLETE_FUNCTIONS in imconfig.h even temporarily to have a pass at finding and removing up old API calls, if any remaining.
    • ShowTestWindow() -> use ShowDemoWindow()
    • IsRootWindowFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow)
    • IsRootWindowOrAnyChildFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)
    • SetNextWindowContentWidth(w) -> use SetNextWindowContentSize(ImVec2(w, 0.0f)
    • GetItemsLineHeightWithSpacing() -> use GetFrameHeightWithSpacing()
    • ImGuiCol_ChildWindowBg -> use ImGuiCol_ChildBg
    • ImGuiStyleVar_ChildWindowRounding -> use ImGuiStyleVar_ChildRounding
    • ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap
    • IMGUI_DISABLE_TEST_WINDOWS -> use IMGUI_DISABLE_DEMO_WINDOWS
  • Removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent with other mouse functions (none of the other functions have it).
  • Obsoleted calling ImDrawList::PrimReserve() with a negative count (which was vaguely documented and rarely if ever used). Instead we added an explicit PrimUnreserve() API which can be implemented faster. Also clarified pre-existing constraints which weren't documented (can only unreserve from the last reserve call). If you suspect you ever used that feature before (very unlikely, but grep for call to PrimReserve in your code), you can #define IMGUI_DEBUG_PARANOID in imconfig.h to catch existing calls. [@ShironekoBen]
  • ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius.
  • Limiting Columns()/BeginColumns() api to 64 columns with an assert. While the current code technically supports it, future code may not so we're putting the restriction ahead.
  • imgui_internal.h: changed ImRect() default constructor initializes all fields to 0.0f instead of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by adding multiple points into it without an explicit initialization, you may need to fix your initial value.

Other Changes

  • Inputs: Added ImGuiMouseButton enum for convenience (e.g. ImGuiMouseButton_Right=1). We forever guarantee that the existing value will not changes so existing code is free to use 0/1/2.
  • Nav: Fixed a bug where the initial CTRL-Tab press while in a child window sometimes selected the current root window instead of always selecting the previous root window. (#787)
  • ColorEdit: Fix label alignment when using ImGuiColorEditFlags_NoInputs. (#2955) [@rokups]
  • ColorEdit: In HSV display of a RGB stored value, attempt to locally preserve Saturation when Value==0.0 (similar to changes done in 1.73 for Hue). Removed Hue editing lock since those improvements in 1.73 makes them unnecessary. (#2722, #2770). [@rokups]
  • ColorEdit: "Copy As" context-menu tool shows hex values with a '#' prefix instead of '0x'.
  • ColorEdit: "Copy As" content-menu tool shows hex values both with/without alpha when available.
  • InputText: Fix corruption or crash when executing undo after clearing input with ESC, as a byproduct we are allowing to later undo the revert with a CTRL+Z. (#3008).
  • InputText: Fix using a combination of _CallbackResize (e.g. for std::string binding), along with the _EnterReturnsTrue flag along with the rarely used property of using an InputText without persisting user-side storage. Previously if you had e.g. a local unsaved std::string and reading result back from the widget, the user string object wouldn't be resized when Enter key was pressed. (#3009)
  • MenuBar: Fix minor clipping issue where occasionally a menu text can overlap the right-most border.
  • Window: Fix SetNextWindowBgAlpha(1.0f) failing to override alpha component. (#3007) [@Albog]
  • Window: When testing for the presence of the ImGuiWindowFlags_NoBringToFrontOnFocus flag we test both the focused/clicked window (which could be a child window) and the root window.
  • ImDrawList: AddCircle(), AddCircleFilled() API can now auto-tessellate when provided a segment count of zero. Alter tessellation quality with style.CircleSegmentMaxError. [@ShironekoBen]
  • ImDrawList: Add AddNgon(), AddNgonFilled() API with a guarantee on the explicit segment count. In the current branch they are essentially the same as AddCircle(), AddCircleFilled() but as we will rework the circle rendering functions to use textures and automatic segment count selection, those new api can fill a gap. [@ShironekoBen]
  • Columns: ImDrawList::Channels* functions now work inside columns. Added extra comments to suggest using user-owned ImDrawListSplitter instead of ImDrawList functions. [@rokups]
  • Misc: Added ImGuiMouseCursor_NotAllowed enum so it can be used by more shared widgets. [@rokups]
  • Misc: Added IMGUI_DISABLE compile-time definition to make all headers and sources empty.
  • Misc: Disable format checks when using stb_printf, to allow using extra formats. Made IMGUI_USE_STB_SPRINTF a properly documented imconfig.h flag. (#2954) [@loicmolinari]
  • Misc: Added misc/single_file/imgui_single_file.h, We use this to validate compiling all *.cpp files in a same compilation unit. Actual users of that technique (also called "Unity builds") can generally provide this themselves, so we don't really recommend you use this. [@rokups]
  • CI: Added PVS-Studio static analysis on the continuous-integration server. [@rokups]
  • Backends: GLFW, SDL, Win32, OSX, Allegro: Added support for ImGuiMouseCursor_NotAllowed. [@rokups]
  • Backends: GLFW: Added support for the missing mouse cursors newly added in GLFW 3.4+. [@rokups]
  • Backends: SDL: Wayland: use SDL_GetMouseState (because there is no global mouse state available on Wayland). (#2800, #2802) [@NeroBurner]
  • Backends: GLFW, SDL: report Windows key (io.KeySuper) as always released. Neither GLFW nor SDL can correctly report the key release in every cases (e.g. when using Win+V) causing problems with some widgets. The next release of GLFW (3.4+) will have a fix for it. However since it is both difficult and discouraged to make use of this key for Windows application anyway, we just hide it. (#2976)
  • Backends: Win32: Added support for #define IMGUI_IMPL_WIN32_DISABLE_GAMEPAD to disable all XInput using code, and IMGUI_IMPL_WIN32_DISABLE_LINKING_XINPUT to disable linking with XInput,the later may be problematic if compiling with recent Windows SDK and you want your app to run on Windows 7. You can instead try linking with Xinput9_1_0.lib instead. (#2716)
  • Backends: Glut: Improved FreeGLUT support for MinGW. (#3004) [@podsvirov]
  • Backends: Emscripten: Avoid forcefully setting IMGUI_DISABLE_FILE_FUNCTIONS. (#3005) [@podsvirov]
  • Examples: OpenGL: Explicitly adding -DIMGUI_IMPL_OPENGL_LOADER_GL3W to Makefile to match linking settings (otherwise if another loader such as Glew is accessible, the OpenGL3 backend might automatically use it). (#2919, #2798)
  • Examples: OpenGL: Added support for glbindings OpenGL loader. (#2870) [@rokups]
  • Examples: Emscripten: Demonstrating embedding fonts in Makefile and code. (#2953) [@Oipo]
  • Examples: Metal: Wrapped main loop in @autoreleasepool block to ensure allocations get freed even if underlying system event loop gets paused due to app nap. (#2910, #2917) [@bear24rw]

Beta features!

New! The tables (#2957) features is now available for testing. When it stabilize we will merge it to master.

Tables

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. Yo...

Read more

v1.74

25 Nov 18:12
Compare
Choose a tag to compare

This is a general release, keeping with the rhythm of having more frequent, smaller releases.

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/
Issues and support: https://github.com/ocornut/imgui/issues
Discord server: https://discord.dearimgui.org


Thank you!

Ongoing work on dear imgui is currently being sponsored by Blizzard Entertainment and Google + general & community work by many individual users, hobbyists and studios (recent supporting studios include Remedy Entertainment and Next Level Games). See the readme for details. Huge thank you to all of you, past and present supporters! You help is very meaningful.

A lot of my time recently has been working on way to scale the team and increase velocity of Dear ImGui development. This is translating into contributions from more developers already visible in this version (with more to come!). Upcoming sponsors and donations will help fund an increasing amount of other developers.

Welcoming @rokups who recently joined the team!

Among the already visible things he contributed (with many more in the work), he has expanded our continous integration suite to test a large variety of the examples on many platforms. Linux/Mac support for the multi-viewports feature has improved. Ongoing work on the upcoming testing/automation framework has also progressed a lot, with more regression tests, and we are working on automated capturing tools which we will use to create documentations.

Much of our current work is happening on the Tables feature, which should open in public-beta very soon, and the Automation/Regression testing framework.

TL;DR;

  • Removed redirecting functions/enums names which were marked obsolete in 1.52 (October 2017).
  • Quantity of fixes.
  • Improved readme, docs, links, wiki hub.
  • Improved our continuous integration and testing suite.

Breaking Changes:

We are hitting the line where we will remove old functions names which were obsoleted 2 years ago (~1.52) resulting in a bunch of small cleanups. Other than that, we have a couple of obsoleted symbols but they should only affected a small portion of advanced users.

  • Removed redirecting functions/enums names which were marked obsolete in 1.52 (October 2017):
    • Begin() [old 5 args version] -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed
    • IsRootWindowOrAnyChildHovered() -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows)
    • AlignFirstTextHeightToWidgets() -> use AlignTextToFramePadding()
    • SetNextWindowPosCenter() -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f)
    • ImFont::Glyph -> use ImFontGlyph
      If you were still using the old names, read "API Breaking Changes" section of imgui.cpp to find out the new names or equivalent features, or see how they were implemented until 1.73.
  • Inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used
    by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function.
    If you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can
    add +io.KeyRepeatDelay to it to compensate for the fix.
    The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0).
    Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay).
    Fixed the code and altered default io.KeyRepeatRate,Delay from 0.250,0.050 to 0.300,0.050 to compensate.
    If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you.
  • Misc: Renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS. (#1038)
  • Misc: Renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS.
  • Fonts: ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to
    conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert.
  • Backends: DX12: Added extra ID3D12DescriptorHeap parameter to ImGui_ImplDX12_Init() function.
    The value is unused in master branch but will be used by the multi-viewport feature. (#2851) [@obfuscate]

Other Changes:

  • InputText, Nav: Fixed Home/End key broken when activating Keyboard Navigation. (#787)
  • InputText: Filter out ASCII 127 (DEL) emitted by low-level OSX layer, as we are using the Key value. (#2578)
  • Layout: Fixed a couple of subtle bounding box vertical positioning issues relating to the handling of text baseline alignment. The issue would generally manifest when laying out multiple items on a same line, with varying heights and text baseline offsets. Some specific examples, e.g. a button with regular frame padding followed by another item with a multi-line label and no frame padding, such as: multi-line text, small button, tree node item, etc. The second item was correctly offset to match text baseline, and would interact/display correctly, but it wouldn't push the contents area boundary low enough.
  • Scrollbar: Fixed an issue where scrollbars wouldn't display on the frame following a frame where all child window contents would be culled.
  • ColorPicker: Fixed SV triangle gradient to block (broken in 1.73). (#2864, #2711). [@lewa-j]
  • TreeNode: Fixed combination of ImGuiTreeNodeFlags_SpanFullWidth and ImGuiTreeNodeFlags_OpenOnArrow incorrectly locating the arrow hit position to the left of the frame. (#2451, #2438, #1897)
  • TreeNode: The collapsing arrow accepts click even if modifier keys are being held, facilitating interactions with custom multi-selections patterns. (#2886, #1896, #1861)
  • TreeNode: Added IsItemToggledOpen() to explicitly query if item was just open/closed, facilitating interactions with custom multi-selections patterns. (#1896, #1861)
  • DragScalar, SliderScalar, InputScalar: Added p_ prefix to parameter that are pointers to the data to clarify how they are used, and more comments redirecting to the demo code. (#2844)
  • Error handling: Assert if user mistakenly calls End() instead of EndChild() on a child window. (#1651)
  • Misc: Optimized storage of window settings data (reducing allocation count).
  • Misc: Windows: Do not use _wfopen() if IMGUI_DISABLE_WIN32_FUNCTIONS is defined. (#2815)
  • Misc: Windows: Disabled win32 function by default when building with UWP. (#2892, #2895)
  • Misc: Using static_assert() when using C++11, instead of our own construct (avoid zealous Clang warnings).
  • Misc: Added IMGUI_DISABLE_FILE_FUNCTIONS/IMGUI_DISABLE_DEFAULT_FILE_FUNCTION to nullify or disable
    default implementation of ImFileXXX functions linking with fopen/fclose/fread/fwrite. (#2734)
  • Docs: Improved and moved FAQ to docs/FAQ.md so it can be readable on the web. [@ButternCream, @ocornut]
  • Docs: Moved misc/fonts/README.txt to docs/FONTS.txt.
  • Docs: Added permanent redirect from https://www.dearimgui.org/faq to FAQ page.
  • Demo: Added simple item reordering demo in Widgets -> Drag and Drop section. (#2823, #143) [@rokups]
  • Metrics: Show wire-frame mesh and approximate surface area when hovering ImDrawCmd. [@ShironekoBen]
  • Metrics: Expose basic details of each window key/value state storage.
  • Examples: DX12: Using IDXGIDebug1::ReportLiveObjects() when DX12_ENABLE_DEBUG_LAYER is enabled.
  • Examples: Emscripten: Removed BINARYEN_TRAP_MODE=clamp from Makefile which was removed in Emscripten 1.39.0 but required prior to 1.39.0, making life easier for absolutely no-one. (#2877, #2878) [@podsvirov]
  • Backends: OpenGL3: Fix building with pre-3.2 GL loaders which do not expose glDrawElementsBaseVertex(), using runtime GL version to decide if we set ImGuiBackendFlags_RendererHasVtxOffset. (#2866, #2852) [@dpilawa]
  • Backends: OSX: Fix using Backspace key. (#2578, #2817, #2818) [@DiligentGraphics]
  • Backends: GLFW: Previously installed user callbacks are now restored on shutdown. (#2836) [@malte-v]
  • CI: Set up a bunch of continuous-integration tests using GitHub Actions. We now compile many of the example applications on Windows, Linux, MacOS, iOS, Emscripten. Removed Travis integration. (#2865) [@rokups]

Beta features!

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. Recent changes to the multi-viewport and docking features:

  • Docking: Can undock from the small triangle button. (#2109,. #2645)
  • Docking: Fixed node->HasCloseButton not honoring ImGuiDockNodeFlags_NoCloseButton in a floating node, leading to empty space at the right of tab-bars with those flags. (#2109)
  • Docking: Made docked windows not use style.ChildRounding.
  • Multi-viewports: Added multi-viewport support in the DX12 back-end. (#2851) [@obfuscate]

There's a CMake pull-request (#1713) if you prefer a traditional CMake integration over registering imgui sources files in your own project. There's a premake5 branch if you prefer the saner and nicer Visual Studio projects generated by premake.

##...

Read more