imgui v1.74 Release Notes

Release Date: 2019-12-12 // about 2 months ago
  • ⚡️ Updates:

    • kotlin 1.3.61
    • lwjgl 3.2.3
    • gradle 6.0.1
    • shadow 5.2.0
    • 👕 kotlintest 3.4.2

    🔄 Changelogs:

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

    Thanks for the last help:

    👍 @Sylvyrfysh (support help and coding)
    👍 @exuvo (support help)
    @yuraj11 and @ebak for donating

    and all the others opening issues and help tracking down bugs


    • ✂ Removed redirecting functions/enums names which were marked obsolete in 1.52 (October 2017). (it doesnt affect our port, we never keep them)
    • 🛠 Quantity of fixes.
    • 👌 Improved readme, docs, links, wiki hub.
    • 👌 Improved our continuous integration and testing suite.

    💥 Breaking Changes:

    • 🛠 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.
      0️⃣ 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.
    • Fonts: FontAtlas::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.

    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 TreeNodeFlag.SpanFullWidth and TreeNodeFlag.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)
    • 📄 Docs: Improved and moved FAQ to docs/ 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 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.
    • 🏗 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]

Previous changes from v1.71

  • 🚀 Monthly release!

    🚀 This is a general release following 1.70, 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!


    • 👀 Made SetNextWindowContentSize() actually useful (see details below).
    • 🛠 Fixes for tree nodes, collapsing headers, tab bars, columns inside an horizontally scrolling region.
    • 🔀 Dozens of other fixes and small additions. Also synched the Docking branch accordingly.

    💥 Breaking Changes

    • IO: changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c).
    • 📇 Renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete).
    • 🏁 Window: rendering of child windows outer decorations (e.g. bg color, border, scrollbars) is now performed as part of their parent window, avoiding the creation of an extraneous draw commands. If you have overlapping child windows with decorations, and relied on their relative z-order to be mapped to submission their order, this will affect your rendering. The optimization is disabled if the parent window has no visual output because it appears to be the most common situation leading to the creation of overlapping child windows. Please reach out if you are affected by this change!

    Other Changes:

    • 🏁 Window: clarified behavior of SetNextWindowContentSize(). Content size is defined as the size available after removal of WindowPadding on each sides. So SetNextWindowContentSize(ImVec2(100,100)) + auto-resize will always allow submitting a 100x100 item without creating a scrollbar, regarding of the WindowPadding value. The exact meaning of ContentSize for decorated windows was previously ill-defined.
    • 🛠 Window: Fixed auto-resize with AlwaysVerticalScrollbar or AlwaysHorizontalScrollbar flags.
    • 🛠 Window: Fixed one case where auto-resize by double-clicking the resize grip would make either scrollbar appear for a single frame after the resize.
    • ⏪ Separator: Revert 1.70 "Declare its thickness (1.0f) to the layout" change. It's not incorrect but it breaks existing some layout patterns. Will return back to it when we expose Separator flags.
    • 🛠 Fixed InputScalar, InputScalarN, SliderScalarN, DragScalarN with non-visible label from inserting style.ItemInnerSpacing.x worth of trailing spacing.
    • 🛠 Fixed InputFloatX, SliderFloatX, DragFloatX functions erroneously reporting IsItemEdited() multiple times when the text input doesn't match the formatted output value (e.g. input "1" shows "1.000"). It wasn't much of a problem because we typically use the return value instead of IsItemEdited() here.
    • 🛠 Fixed uses of IsItemDeactivated(), IsItemDeactivatedAfterEdit() on multi-components widgets and after EndGroup(). (#2550, #1875)
    • 🛠 Fixed crash when appending with BeginMainMenuBar() more than once and no other window are showing. (#2567)
    • 🛠 ColorEdit: Fixed the color picker popup only displaying inputs as HSV instead of showing multiple options. (#2587, broken in 1.69 by #2384).
    • 👍 CollapsingHeader: Better clipping when a close button is enabled and it overlaps the label. (#600)
    • Scrollbar: Minor bounding box adjustment to cope with various border size.
    • 💅 Scrollbar, Style: Changed default style.ScrollbarSize from 16 to 14.
    • 🛠 Combo: Fixed rounding not applying with the ImGuiComboFlags_NoArrowButton flag. (#2607) [@DucaRii]
    • 🚚 Nav: Fixed gamepad/keyboard moving of window affecting contents size incorrectly, sometimes leading to -scrollbars appearing during the movement.
    • 🚀 Nav: Fixed rare crash when e.g. releasing Alt-key while focusing a window with a menu at the same frame as clearing the focus. This was in most noticeable in back-ends such as Glfw and SDL which emits key release events when focusing another viewport, leading to Alt+clicking on void on another viewport triggering the issue. (#2609)
    • 🛠 TreeNode, CollapsingHeader: Fixed highlight frame not covering horizontal area fully when using horizontal scrolling. (#2211, #2579)
    • 🛠 TabBar: Fixed BeginTabBar() within a window with horizontal scrolling from creating a feedback loop with the horizontal contents size.
    • 🛠 Columns: Fixed Columns() within a window with horizontal scrolling from not covering the full horizontal area (previously only worked with an explicit contents size). (#125)
    • 🛠 Columns: Fixed Separator() from creating an extraneous draw command. (#125)
    • 🛠 Columns: Fixed Selectable() with ImGuiSelectableFlags_SpanAllColumns from creating an extraneous draw command. (#125)
    • 💅 Style: Added style.WindowMenuButtonPosition (left/right, defaults to ImGuiDir_Left) to move the collapsing/docking button to the other side of the title bar.
    • 💅 Style: Made window close button cross slightly smaller.
    • 🛠 Log/Capture: Fixed BeginTabItem() label not being included in a text log/capture.
    • 👍 ImDrawList: Added ImDrawCmd::VtxOffset value to support large meshes (64k+ vertices) using 16-bits indices. The renderer back-end needs to set io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset to enable this, and honor the ImDrawCmd::VtxOffset field. Otherwise the value will always be zero. This has the advantage of preserving smaller index buffers and allowing to execute on hardware that do not support 32-bits indices. Most examples back-ends have been modified to support the VtxOffset field. (not on JVM)
    • ImDrawList: Added ImDrawCmd::IdxOffset value, equivalent to summing element count for each draw command. This is provided for convenience and consistency with VtxOffset.
    • ImDrawCallback: Allow to override the signature of ImDrawCallback by #define-ing it. This is meant to facilitate custom rendering back-ends passing local render-specific data to the draw callback.
    • ImFontAtlas: FreeType: Added RasterizerFlags::Monochrome flag to disable font anti-aliasing. Combine with RasterizerFlags::MonoHinting for best results. (#2545) [@HolyBlackCat]
    • 🛠 ImFontGlyphRangesBuilder: Fixed unnecessarily over-sized buffer, which incidentally was also not fully cleared. Fixed edge-case overflow when adding character 0xFFFF. (#2568). [@NIKE3500]
    • 🏁 Demo: Added full "Dear ImGui" prefix to the title of "Dear ImGui Demo" and "Dear ImGui Metrics" windows.
    • 👍 Examples/Backends: Don't filter characters under 0x10000 before calling io.AddInputCharacter(), the filtering is done in io.AddInputCharacter() itself. This is in prevision for fuller Unicode support. (#2538, #2541)