Skip to content

@ocornut ocornut released this Oct 8, 2020 · 64 commits to master since this release

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 TableNextRow() NOT enter into first column. (see #2957 (comment))
  • Tables: BREAKING CHANGE: Renamed TableAutoHeaders() to `TableHeadersRow().
  • Tables: BREAKING CHANGE: Added TableSetupScrollFreeze() api, remove ImGuiTableFlags_ScrollFreezeXXX flags. Avoid awkwardly named ScrollFreeze flags, raise limit over 3, and will allow for future API freezing bottom/right side. See #2957 (comment).
  • Tables: BREAKING CHANGE: Sorting: Made it users responsibility to clear SpecsDirty back to false, so TableGetSortSpecs() doesn't have side-effect any more. See #2957 (comment)
  • Tables: BREAKING CHANGE: Renamed ImGuiTableFlags_NoClipX to ImGuiTableFlags_NoClip, clarified purpose, moved lower in the list as it doesn't need to be so prominent.
  • Tables: Fixed clipper to support any number of frozen rows.
  • Tables: Fixed for calling TableSetBgColor(ImGuiTableBgTarget_CellBg) multiple times on the same cell.
  • Tables: Fixed ImGuiTableColumnFlags_WidthAlwaysAutoResize columns when clipped (which would be default behavior without _Resizable and when clipping/scrolling).
  • Tables: Extend outer-most clip limits to match those of host when merging draw calls. Generally clarify/simplify ClipRect extending/merging code in TableReorderDrawChannelsForMerge().
  • Tables: Added TableGetColumnCount().
  • Tables: Added ImGuiTableFlags_ContextMenuInBody flag.
  • Tables: Added ImGuiTableFlags_NoBordersInBody, ImGuiTableFlags_NoBordersInBodyUntilResize, removed ImGuiTableFlags_BordersFullHeightV.
  • Tables: Fixed lower clipping when using ImGuiTableFlags_NoHostExtendY.
  • Tables: Fixed a crash when using 8-level deep recursive table (was mistakenly holding on a pointer across resize/invalidation of the pool buffer).

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

  • Docking: DockSpace() emits ItemSize() properly (useful when not filling all space).
  • Docking: Fixed docking while hovering a child window. (#3420) broken by 85a661d. Improve metrics debugging.
  • Docking: Fix honoring payload filter with overlapping nodes. (we incorrectly over-relied on g.HoveredDockNode when making change for #3398)
  • Docking: Fix handling of WindowMenuButtonPosition == ImGuiDir_None in Docking Nodes. (#3499)
  • Viewports: Fixed a rare edge-case if the window targeted by CTRL+Tab stops being rendered.
  • Viewports, Backends: DX12: Make secondary viewport format match main viewport one (#3462) {@BeastLe9enD]
  • Viewports: Backends: Vulkan: Removed unused shader code. Fix leaks. Avoid unnecessary pipeline creation for main viewport. Amend 41e2aa2. (#3459) + Add ImGui_ImplVulkanH_CreateWindowSwapChain in ImGui_ImplVulkanH_CreateOrResizeWindow().
  • Viewports: Backends: DirectX9: Recover from D3DERR_DEVICELOST on secondary viewports. (#3424)
  • Viewports, Backends: Win32: Fix toggling of ImGuiViewportFlags_TopMost (#3477) [@Kodokuna]
  • Viewports: Backends: GLFW: Workaround for cases where glfwGetMonitorWorkarea fails (#3457) [@dougbinks]

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

Gallery

See Gallery threads for more pictures and to post yours!

@enci: "I use Dear ImGui a lot in my curriculum at Breda University of Applied Sciences. Here are two screenshots from student projects, posted with permission.". RTX real-time ray tracer by Viktor Zoutman
Demo_8nBDxUM0Qn

@Vitorbnc: "VVERSimulator is a VVER-440 Pressurized Water Reactor Simulator. It simulates the primary circuit of Unit 3 of the Paks Nuclear Power Plant in Hungary."
inicial_vver

@crash5band: "Glitter Studio is a WIP particle editor for Sonic Generations"
boost_2

@ongamex: "The welcome screen in my level editor"
ongamex

@tomasiser: __"Hello! A bit over 1 year ago, we finished our student project called Pepr3D for 3D printing. Even though the project is not maintained anymore, I wanted to showcase our usage of ImGui here."
pepr3d

World of Warcraft 8th extension technical blog post shows a game ui mockup of their "Adventures" feature:
https://worldofwarcraft.com/en-us/news/23507730/engineers-workshop-developing-for-mobile-and-pc
DGOJ1M1MTPAP1598308582505

Kanteran: "This is a code-block editor for education using dear imgui"
wmS59CabiP

@thedmd: " I'm developing more concrete blueprint example for node editor. This one does real job behind the nodes.
It will land on main branch as an example when I decide it is decent enough. You can look at the code right now on https://github.com/thedmd/imgui-node-editor/tree/develop branch. Code is in flux so a lot can change yet."

Flight Simulator 2020 is now released, with dev mode / SDK tools using Dear ImGui
7lkwhokhknh51

@dfranx SHADERed (a shader IDE) running in the browser
image

@epezent Amazing ImPlot still moving forward:
colors
legend utilities
plot stems
annotations
date-plot
drag lines and points

@d3cod3: __"here goes a project of mine in current development ( beta stage now ), called Mosaic, a livecoding programming/patching environment for creating real-time audio-visual compositions."
mosaic

Assets 2

@ocornut ocornut released this Aug 18, 2020 · 152 commits to master since this release

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 tables branch include:

  • Tables: Rename border V/H flags HInner -> InnerH.
  • Tables: non-resizable columns also submit their requested width for auto-fit.
  • Tables: Fix calculation of auto-fit (remove extraneous padding). Demo setting a width in columns setup + ImGuiTableFlags_NoKeepColumnsVisible.
  • Tables: Store submitted column width and avoid saving default default widths.
  • Tables: Simplified TableHeader() and not relying on Selectable(), fixed various padding issues. Added work-around for CellRect.Min.x offset by CellSpacing.x.
  • Tables: Fixed TableHeader() not declaring its height properly.
  • Tables: Fixed table settings not being saved inside a child window (#3367).
  • Tables: Fixed stacked popups incorrectly accessing g.CurrentTable of parent-in-stack windows.
  • Tables: Added TableSetBgColor() api with color for RowBg and CellBg colors.
  • Tables: Removed extra +1.0f pixels initially allocated to make right-most column visible, fix visible padding asymmetry. Tweaked debug code in demo.
  • Tables: Comments on Sizing Policies.

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

  • Docking: Made DockBuilderAddNode() automatically call DockBuilderRemoveNode(). (#3399, #2109)
  • Docking: Storing HoveredDockNode in context which can be useful for easily detecting e.g. hovering an empty node. (#3398)
  • Docking: Fixed docking overlay bits appearing at (0,0), because of 43bd80a. Most typically noticeable when disabling multi-viewport.
  • Docking: Workaround recovery for node created without the _DockSpace flags later becoming a DockSpace. (#3340)
  • Docking: Rework size allocations to recover when there's no enough room for nodes + do not hold on _WantLockSizeOnce forever (#3328)
  • Docking: Rework size allocation to allow user code to override node sizes. Not all edge cases will be properly handled but this is a step toward toolbar emitting size constraints.
  • Docking: Added experimental flags to perform more docking filtering and disable resize per axis. Designed for toolbar patterns.
  • Viewports, Backends, GLFW: Use GLFW_MOUSE_PASSTHROUGH when available.
  • Viewports, Backends: DX12: Fixed issue on shutdown when viewports are disabled. (#3347)

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 are interesting in helping!.
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

See Gallery threads for more pictures and to post yours!

League of Legends
league of legends

Clash of Clans video from 8m29
clash of clans

Some control UI for a robot by Boston Dynamics video
Capture

@Moneyl: "Working on a map viewer / modding tool for Red Faction Guerrilla. Right now it's rendering the bounding box of each zone object. Working on loading some of it's mesh formats next."
Project28_8FcRa21AJJ

@erickjung: "I'm glad to introduce Mockingbird, a tool designed to simplify software testing and development, helping with data inspection and manipulation. With a minimalist user interface, you can easily navigate through data, mock any HTTP(s)' system, and get insights."
https://github.com/Farfetch/mockingbird
Mockingbird

@pthom "ImGui Manual is an attempt to make an enjoyable and efficient manual for ImGui. The idea is to use the reference code in imgui_demo.cpp in order to make an interactive manual." https://github.com/pthom/imgui_manual
ImGui Manual

@JakeCoxon "I forked ImGui to make it look like windows98. Mainly for a bit of fun, learning the codebase and potentially make an app that looked like this style" https://github.com/JakeCoxon/imgui-win98
Win98

@tlbtlbtlb "Yoga Studio is an IDE for robotics, with tools for exploring the space of control parameters. Open source at https://gitlab.com/umbrellaresearch/yoga2/"
Yoga Studio

@JMS55 "Sandbox is a falling sand game like The Power Toy or Sandspiel. [...] I used imgui-rs, imgui-winit-support, and imgui-wgpu for the UI. Code is here https://github.com/JMS55/sandbox/blob/master/src/ui.rs."
Sandbox

Receiver 2 has a in-game debug UI (F12 key) https://store.steampowered.com/app/1129310/Receiver_2/
Receiver 2

Bizzarrus: "Some data track widgets I made a while ago for my company's internal tool"
image

xX_WhatsTheGeek_Xx: "Software Defined Radio software I'm working on. Uses default imgui widgets for the sidebar and a custom waterfall/fft widget"
image

moneyl: "A game / destruction sim thing I've been working on (never actually got to gameplay as usual lol). Going to adapt this code to make a 2d game instead to hopefully make things simpler. Using imgui for tools and may use it for game UI as well. Using this theme: #707 (comment) The icons are FontAwesome + this library https://github.com/juliettef/IconFontCppHeaders/"
image

Assets 2

@ocornut ocornut released this Jun 29, 2020 · 222 commits to master since this release

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 DefaultSort data from flags when loading settings that don't have them.
  • Tables: Not flagging whole column as SkipItems based on clipping visibility (would break layout).
  • Tables: Allow hot-reload of settings (merge policy), tidying up settings code.
  • Tables: Browse settings list in Metrics->Settings.
  • Tables: Demo: Custom per-popup popups, demonstrate TableGetHoveredColumn() and `ImGuiPopupFlags_NoOpenOverExistingPopup.
  • Tables: Added plenty of regression tests in imgui_dev private repository.

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

  • Viewports: Don't set ImGuiViewportFlags_NoRendererClear when ImGuiWindowFlags_NoBackground is set. (#3213)
  • Viewports: Report minimized viewports as zero DisplaySize to be consistent with main branch + comments (#1542)
  • Docking, Settings: Allow reload of settings data at runtime. (#2573)
  • Backends, GLFW: Fix windows resizing incorrectly on Linux due to GLFW firing window positioning callbacks on next frame after window is resized manually. (#2117)
  • Backends: DX12: Fix OBJECT_DELETED_WHILE_STILL_IN_USE on viewport resizing. (#3210)
  • Backends: DX12: Fix for crash caused by early resource release. (#3121)
  • Backends, Win32: Request monitor update when dpi awarness is enabled to make sure they have the correct dpi settings.

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 are interesting in helping!.
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

Impressive showcase in the Gallery for this release! See Gallery threads for more pictures and to post yours!

VX2 by Spectrals http://www.pouet.net/prod.php?which=85304
(won 1st place PC Demo at Revision 2020)
https://twitter.com/Speedoog/status/1249776515316944897
"Here's some screenshots of our edition tool with lots of dear imgui windows :)
You can see the sequencer, keyframable property editor, curves, math expressions, effect tester, debug etc ... Sequencer is based on a fork of ImSequencer by @skaven_ Thanks to you too "

vx2-04

(VR) Desktop+ https://github.com/elvissteinjr/DesktopPlus
A desktop mirroring overlay application for SteamVR
screenshot

(VR) BIMXplorer https://www.bimxplorer.com
BIMXPlorer

A new version of tooll.io written in ImGui / ImGui.net.
tooll.io

osp https://github.com/notnotme/osp
This is a chiptune player I do for the nintendo switch
Capture du 2020-04-22 14-04-17

python-concour https://github.com/potocpav/python-concur
"I made a UI library on top of ImGui in Python, geared towards scientific visualization & image processing. I have been using it at our company for quick, even throw-away GUIs, but also for more complex applications lately."

nesEmu https://github.com/Redcrafter/nesEmu
@Redcrafter: "I'm using ImGui for my nes emulator"
out

ImPlot https://github.com/epezent/implot
Some recent additions:

Queries:
Queries

Pie Charts:
Pie Charts

Heat Maps:
Heat

@jrdmellow: Simple input debugging overlay with some custom rendering for input axes.
image
Simple input debugging overlay with some custom rendering for input axes.

NetImGui https://github.com/sammyfreg/netImgui
by @sammyfreg: "NetImgui is a library to remotely display and control Dear ImGui menus with an associated netImgui server application. Designed to painlessly integrate into existing codebase with few changes required to the existing logic.
Initially created to assist game developers in debugging their game from a PC while it runs on console. However, its use can easily be extended to other fields."

NetImguiInput
NetImguiClutter

Assets 2

@ocornut ocornut released this Apr 12, 2020 · 334 commits to master since this release

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 are interesting in helping!.
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

Impressive showcase in the Gallery for this release! See Gallery threads for more pictures and to post yours!

@gboisse
"Working on some visual node graph editing, imgui has been amazing so far 🙂"
node_graph

@ketoo
"Working on the blueprint editor."
https://github.com/ketoo/NoahGameFrame
image

Parsec
https://parsecgaming.com/features/#features
"Our entire UI has been built with imgui and deployed on 7 platforms (including the web/emscripten), it's an amazing thing you've done!"
parsec2

Microsoft Flight Simulator SDK
https://www.youtube.com/watch?v=10P21oFOxAU&feature=youtu.be&t=481
flight simulator sdk

Star Citizen
https://youtu.be/V0AEp9vhgx0?t=367
obraz

@giladreich
"I wanted to show my progress on my personal game engine editor for the old game Knight Online, using ImGui's docking & tables branch." (more)
flags editor

Particubes
@aduermael: "We're using ImGui in Particubes, though it may not be easy to recognize it. 🙂 [...] In Particubes, you can script games, and that includes GUI of course. We worked on an auto layout system users will be able to use in Lua to display their own buttons, labels, etc. For games to look good on all screen factors and be enjoyable with mouse & keyboard or touch events."
particubes

@parbo
"I work at Spotify, and on my hackdays I've been making a Spotify client using Dear Imgui. I'm using the docking branch, and the new table API. It uses the same C++ library as our mobile and desktop clients use, and the UI is roughly 6000 lines of code." (more)
spotify

Plotting library by @epezent (see #3067)
1
4

NVIDIA Texture Tools Exporter
https://developer.nvidia.com/nvidia-texture-tools-exporter

Final Fantasy VII Remake
https://www.youtube.com/watch?time_continue=675&v=DliMpiemUy8&feature=emb_title
Inside FINAL FANTASY VII REMAKE – Episode 4 Music and Sound Effects (Closed Captions) 1 mp4_snapshot_11 18_ 2020 04 09_12 07 38

Tracy Profiler by @wolfpld
https://github.com/wolfpld/tracy
Tracy Profiler

Assets 2

@ocornut ocornut released this Feb 10, 2020 · 422 commits to master since this release

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. Your continuous feedback is always appreciated. Recent changes to the multi-viewport and docking features:

  • Docking + Nav: Fixed messed up Ctrl+Tab order with docked windows.
  • Docking + Nav: Fixed failing to restore NavId when refocusing a child within a docked window.
  • Docking + Nav: Fixed failing to restore NavId when refocusing due to missing nav window (when it stops being submitted).
  • Docking: Fixed a bug where the tab bar of a hidden dockspace would keep requesting focus. (#2960)
  • Docking: Added experimental DockNodeFlagsOverrideSet/DockNodeFlagsOverrideClear flags in ImGuiWindowClass (currently experimenting with toolbar idioms).
  • Viewports: Fix resizing viewport-owning windows when mouse pos is outside the InnerClipRect (can happen with OS decoration on).
  • Viewports: Preserve last known size for minimized main viewport to be consistent with secondary viewports. Amend 606175b, d8ab2c1.
  • Backends: SDL: Honor NoTaskBarIcon flag under non Win32 OS. (#2117)
  • Backends: GLFW, SDL: Platform monitors declared properly even if multi-viewport is not 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!

  • Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping!.
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

See Gallery threads for more pictures and to post yours!

Rainbow Six
https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui/

"Ubisoft has used Dear ImGui in the last two years on several AAA projects. Adopted by the Assassin’s Creed team in 2016, and then by Rainbow Six a year later, it has been described by team members as a great tool that enables fast iterations and the empowerment of programmers to create content creation tools and visualization.
“Dear ImGui is an elegant immediate mode GUI that fundamentally changes the way that production and debug tools are developed at Ubisoft. This productivity library is an amazingly efficient way to increase the quality of these tools,” says Nicolas Fleury, Technical Architect on Rainbow Six: Siege."

Screenshot_DearImGUI_1_SAFE

Screenshot_DearImGUI_2_SAFE_rs

tacit-texview, a texture viewer for game devs
by Tristan Grimmer (who made the ProggyClean font used as the fault dear imgui font!)
https://github.com/bluescan/tacit-texview

"This viewer is useful for game devs as it displays important information like the presence of an alpha channel and querying specific pixels for their colour." [..] "Support for viewing dds files is implemented -- you can view all mipmaps if they are present, and see cubemaps in a 'T' layout." [..] "Tacit-texview can be used to generate contact sheets for flip-book animation. "

Screenshot_Cubemap

Sculptron
https://render.otoy.com/forum/viewtopic.php?f=7&t=73278
Sculptron_Image

nCine game engine
https://ncine.github.io/
ncParticleEditor

@ggerganov "Just for lulz: Dear ImGui in a text terminal:" https://github.com/ggerganov/imtui
4370FJt

@AirGuanZ "I have been using Dear ImGui to make a scene editor for my off-line renderer"
editor

LightTracer
https://lighttracer.org/
"Public beta of the Light Tracer standalone version is open at http://lighttracer.org! [...] we were able to reuse both GUI and renderer code for web and desktop versions"
EPh5YfLWkAY8xiW

Assets 2

@ocornut ocornut released this Nov 25, 2019 · 515 commits to master since this release

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.

Help wanted!

  • Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping!.
  • One upcoming project will be to start writing a high quality "sample" game editor application to showcase how a fancy polished dear imgui application may look like (vs the standard demo which is constrained by nature of being embedded within the library).
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

Wire-frame view in Metrics: [@ShironekoBen]

image

See Gallery threads for more pictures and to post yours!

@jmorton06: "I've been using Dear Imgui to make a simple editor for my game engine."

"imGuIZMO.quat** a object manipulator / orientator widgets"
imGuIZMO

"Pluribus Poker Bot"
pluribus poker bot

"A more recent screenshot of the Tracy profiler (https://bitbucket.org/wolfpld/tracy)"
tracy

@mua "My experimental Vulkan game engine's editor. Docking is heavily used,"
Capture

@samdauve "BabylonCpp - a C++ port of Babylon.js - is a 3D game engine, still in under heavy development, whose GUI is based on Dear ImGui."

image

image

@kosua20 "I'm using ImGui in my OpenGL playground, Rendu. My use is pretty basic for now, but the ability to add arbitrary shapes to the draw list was super useful for the controller mapping editor."

Rendu

"From this Streets of Rage 4 dev diary: https://www.youtube.com/watch?v=tF-rMNY0fBk"
SOR4_snapshot_03 13_ 2019 11 13_15 22 06

@floooh "Using https://github.com/juliettef/imgui_markdown as help viewer for Visual6502 Remix with internal and external links:"

Nov-19-2019 21-54-17

Assets 2

@ocornut ocornut released this Sep 24, 2019 · 618 commits to master since this release

Fall celebration release!
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!


See https://github.com/ocornut/imgui for the project homepage.
See https://github.com/ocornut/imgui/releases for earlier release notes.
See https://github.com/ocornut/imgui/wiki for bindings, links, 3rd parties helpers/extensions, widgets etc.
Issues and support: https://github.com/ocornut/imgui/issues
Technical support for new users: https://discourse.dearimgui.org (also search in GitHub Issues)

Thank you!

Ongoing work on dear imgui is currently being sponsored by Blizzard Entertainment and Google (welcome Google!) + general & community work by many individual users, hobbyists and studios. 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.

Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping! (omarcornut at gmail)

TL;DR;

  • Nav: Home/End key support (was missing!).
  • Tabs/TabBar fixes.
  • ColorEdit workaround against HSV discontinuities when storing data as RGB.
  • DragScalar: fixes for dragging unsigned values on ARM cpus.
  • Tree: added flags to span available horizontal space or cover indentation area.
  • Font: improve drawing of ellipsis ("...") which we will start to make more use of.
  • Misc: release unused pools of vertex memory when windows become unused for a while.
  • Dozens of other fixes, tweaks and improvements.

Other Changes:

  • Nav, Scrolling: Added support for Home/End key. (#787)
  • ColorEdit: Disable Hue edit when Saturation==0 instead of letting Hue values jump around.
  • ColorEdit, ColorPicker: In HSV display of a RGB stored value, attempt to locally preserve Hue when Saturation==0, which reduces accidentally lossy interactions. (#2722, #2770) [@rokups]
  • ColorPicker: Made rendering aware of global style alpha of the picker can be faded out. (#2711). Note that some elements won't accurately fade down with the same intensity, and the color wheel when enabled will have small overlap glitches with (style.Alpha < 1.0).
  • TabBar: Fixed single-tab not shrinking their width down.
  • TabBar: Fixed clicking on a tab larger than tab-bar width creating a bouncing feedback loop.
  • TabBar: Feed desired width (sum of unclipped tabs width) into layout system to allow for auto-resize. (#2768) (before 1.71 tab bars fed the sum of current width which created feedback loops in certain situations).
  • TabBar: Improved shrinking for large number of tabs to avoid leaving extraneous space on the right side. Individuals tabs are given integer-rounded width and remainder is spread between tabs left-to-right.
  • Columns, Separator: Fixed a bug where non-visible separators within columns would alter the next row position differently than visible ones.
  • SliderScalar: Improved assert when using U32 or U64 types with a large v_max value. (#2765) [@loicmouton]
  • DragInt, DragFloat, DragScalar: Using (v_min > v_max) allows locking any edits to the value.
  • DragScalar: Fixed dragging of unsigned values on ARM cpu (float to uint cast is undefined). (#2780) [@dBagrat]
  • TreeNode: Added ImGuiTreeNodeFlags_SpanAvailWidth flag. This extends the hit-box to the right-most edge, even if the node is not framed. (Note: this is not the default in order to allow adding other items on the same line. In the future we will aim toward refactoring the hit-system to be front-to-back, allowing more natural overlapping of items, and then we will be able to make this the default.) . (#2451, #2438, #1897) [@Melix19, @PathogenDavid]
  • TreeNode: Added ImGuiTreeNodeFlags_SpanFullWidth flag. This extends the hit-box to both the left-most and right-most edge of the working area, bypassing indentation.
  • CollapsingHeader: Added support for ImGuiTreeNodeFlags_Bullet and ImGuiTreeNodeFlags_Leaf on framed nodes, mostly for consistency. (#2159, #2160) [@goran-w]
  • Selectable: Added ImGuiSelectableFlags_AllowItemOverlap flag in public api (was previously internal only).
  • Style: Allow style.WindowMenuButtonPosition to be set to ImGuiDir_None to hide the collapse button. (#2634, #2639)
  • Font: Better ellipsis ("...") drawing implementation. Instead of drawing three pixel-ey dots (which was glaringly unfitting with many types of fonts) we first attempt to find a standard ellipsis glyphs within the loaded set. Otherwise we render ellipsis using '.' from the font from where we trim excessive spacing to make it as narrow as possible. (#2775) [@rokups]
  • ImDrawList: Clarified the name of many parameters so reading the code is a little easier. (#2740)
  • ImDrawListSplitter: Fixed merging channels if the last submitted draw command used a different texture. (#2506)
  • Using offsetof() when available in C++11. Avoids Clang sanitizer complaining about old-style macros. (#94)
  • ImVector: Added find(), find_erase(), find_erase_unsorted() helpers.
  • Added a mechanism to compact/free the larger allocations of unused windows (buffers are compacted when a window is unused for 60 seconds, as per io.ConfigWindowsMemoryCompactTimer = 60.0f). Note that memory usage has never been reported as a problem, so this is merely a touch of overzealous luxury. (#2636)
  • Documentation: Various tweaks and improvements to the README page. [@ker0chan]
  • Backends: OpenGL3: Tweaked initialization code allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before ImGui_ImplOpenGL3_NewFrame(), which sometimes can be convenient.
  • Backends: OpenGL3: Attempt to automatically detect default GL loader by using __has_include. (#2798) [@o-micron]
  • Backends: DX11: Fixed GSGetShader() call not passing an initialized instance count, which would generally make the DX11 debug layer complain (bug added in 1.72).
  • Backends: Vulkan: Added support for specifying multisample count. Set ImGui_ImplVulkan_InitInfo::MSAASamples to one of the VkSampleCountFlagBits values to use, default is non-multisampled as before. (#2705, #2706) [@vilya]
  • Examples: OSX: Fix example_apple_opengl2/main.mm not forwarding mouse clicks and drags correctly. (#1961, #2710) [@intonarumori, @ElectricMagic]
  • Misc: Updated stb_rect_pack.h from 0.99 to 1.00 (fixes by @rygorous: off-by-1 bug in best-fit heuristic, fix handling of rectangles too large to fit inside texture). (#2762) [@tido64]

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: Fix BeginDocked() path that creates node so that SetNextWindowDockID() doesn't immediately discard the node. (#2109)
  • Docking: Fix for node created at the same time as windows that are still resizing (typically with io.ConfigDockingAlwaysTabBar) to not be zero/min sized. (#2109). The fix delays their visibility by one frame, which is not ideal but not very problematic as the .ini data gets populated after that.
  • Docking: Fix a crash that could occur with a malformed ini file (DockNode Parent value pointing to a missing node).
  • Viewport: Fix modal/popup window being stuck in unowned hidden viewport associated to fallback window without stealing it back. Fix modal reference viewport when opened outside of another window. (#1542)
  • Viewport: Modals don't need to set ImGuiViewportFlags_NoFocusOnClick, this also mitigate the issue described by #2445, which becomes particularly bad with unfocused modal. (#1542)
  • Viewport: better case case where host window gets moved and resized simultaneous (toggling maximized state). There's no perfect solution there, than using io.ConfigViewportsNoAutoMerge = false. (#1542)
  • Viewport, Docking: Fixed incorrect assignment of IsFallbackWindow which would tag dock node host windows created in NewFrame() as such, messing with popup viewport inheritance.
  • Viewport: Fixed issue where resize grip would display as hovered while mouse is still off the OS bounds so click would miss it and focus the OS window behind expected one. (#1542)
  • Viewport: Fix to allow multiple shutdown / calls to DestroyPlatformWindows(). (#2769)
  • Viewport: Backends: GLFW: Fix setting window size on macOS (#2767, #2117) [@rokups]
  • Viewport: Backends: GLFW+Linux: Fix window having incorrect size after uncollapse. (#2756, #2117) [@rokups]
  • Viewport: Backends: DirectX9: Workaround for windows not refreshing when main viewport has no draw call. (#2560)

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 nicer Visual Studio projects generated by premake.

Help wanted!

  • Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping!.
  • One upcoming project will be to start writing a high quality "sample" game editor application to showcase how a fancy polished dear imgui application may look like (vs the standard demo which is constrained by nature of being embedded within the library).
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • The DirectX12 renderer needs multi-viewports support.
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

See Gallery threads for more pictures and to post yours!

"An industrial application for inspecting water pipes using an ultrasonic scanner" by @soulthreads
Also see https://github.com/soulthreads/imgui-plot widget.
minipars

"Writing a Minecraft seed preview / NBT editor / possibly world editor" by @mnurzia
image

Micro Profiler from https://github.com/ConfettiFX/The-Forge by @zeux based on @jonasmr's microprofile
MP_Detailed_02

Assets 2

@ocornut ocornut released this Jul 31, 2019 · 678 commits to master since this release

See https://github.com/ocornut/imgui for the project homepage.
See https://github.com/ocornut/imgui/releases for earlier release notes.
See https://github.com/ocornut/imgui/wiki for language/framework bindings, links, 3rd parties helpers/extensions.
New users: go to https://discourse.dearimgui.org for technical support.

TL;DR;

Releasing this as a hot-fix as 1.71 and 1.72 have a regression with gamepad/keyboard controls, where scrolling didn't always correctly track the navigated item.

Changes

  • Nav, Scrolling: Fixed programmatic scroll leading to a slightly incorrect scroll offset when the window has decorations or a menu-bar (broken in 1.71). This was mostly noticeable when a keyboard/gamepad movement led to scrolling the view, or using e.g. SetScrollHereY() function.
  • Nav: Made hovering non-MenuItem Selectable not re-assign the source item for keyboard navigation.
  • Nav: Fixed an issue with ImGuiWindowFlags_NavFlattened (beta flag) where widgets not entirely fitting in child window (often selectables because of their protruding sides) would be not considered as entry points to to navigate toward the child window. (#787)
Assets 2

@ocornut ocornut released this Jul 28, 2019 · 687 commits to master since this release

Happy summer!
This is a general release following 1.71, 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!


See https://github.com/ocornut/imgui for the project homepage.
See https://github.com/ocornut/imgui/releases for earlier release notes.
See https://github.com/ocornut/imgui/wiki for language/framework bindings, links, 3rd parties helpers/extensions.
Issues and support: https://github.com/ocornut/imgui/issues
Technical support for new users: https://discourse.dearimgui.org (also search in GitHub Issues)

Thank you!

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

Welcoming Adrien Marchand (@LaMarche05) who started spending more time on Dear ImGui, currently contributing to ongoing work the automation/testing system (yet unreleased). Also check out his adventure game Edgar: Bokbok in Boulzac!

Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping! (omarcornut at gmail)

TL;DR;

  • Child windows don't get in the way of mouse wheel scrolling!
  • Easier to implement scrolling tracking. Various scrolling fixes.
  • Various columns fixes (maybe last ones until we switch to the wonderful upcoming Columns V2/Table system!).
  • InputText: Support for keypad Enter key (ah!).
  • Tools: Added Metrics>Tools>Item Picker which is convenient to easily break in debugger at the location an UI item is submitted. Particular useful in large or unknown codebases. (#2673)
  • Added SDL2+DirectX11 example application because clearly we don't have enough examples! (#2632, #2612, #2482) [@vincenthamm]
  • Dozens of other fixes and small additions. Also synched the Docking branch accordingly.

Breaking Changes

  • Removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017). 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.
    • ImGuiCol_Column*, ImGuiSetCond_* enums.
    • IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow() functions.
    • IMGUI_ONCE_UPON_A_FRAME macro.
  • Renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete).
  • Removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete). (#581, #324)

Please note that functions obsoleted in 1.53 will probably be removed by the end of the year. If your language binding is still on 1.53 please consider updating the bindings (newer bindings are mostly auto-generated, based on the metadata output by cimgui).

Other Changes:

  • Scrolling: Made mouse-wheel scrolling lock the underlying window until the mouse is moved again or until a short delay expires (~2 seconds). This allow uninterrupted scroll even if child windows are passing under the mouse cursor. (#2604)
  • Scrolling: Mouse wheel scrolling while hovering a child window is automatically forwarded to parent window if ScrollMax is zero on the scrolling axis. Also still the case if ImGuiWindowFlags_NoScrollWithMouse is set (not new), but previously the forwarding would be disabled if ImGuiWindowFlags_NoScrollbar was set on the child window, which is not the case any more. Forwarding can still be disabled by setting ImGuiWindowFlags_NoInputs. (amend #1502, #1380).
  • Scrolling: Made it possible for mouse wheel and navigation-triggered scrolling to override a call to
    SetScrollX()/SetScrollY(), making it possible to use a simpler stateless pattern for auto-scrolling:
// (Submit items..)
if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY())  // If scrolling at the already at the bottom..
    ImGui::SetScrollHereY(1.0f);                    // ..make last item fully visible
  • Scrolling: Added SetScrollHereX(), SetScrollFromPosX() for completeness. (#1580) [@kevreco]
  • Window: Fixed InnerClipRect right-most coordinates using wrong padding setting (introduced in 1.71).
  • Window: Fixed old SetWindowFontScale() api value from not being inherited by child window. Added comments about the right way to scale your UI (load a font at the right side, rebuild atlas, scale style).
  • Scrollbar: Avoid overlapping the opposite side when window (often a child window) is forcibly too small.
  • Combo: Hide arrow when there's not enough space even for the square button.
  • InputText: Testing for newly added ImGuiKey_KeyPadEnter key. (#2677, #2005) [@amc522]
  • TabBar: Fixed unfocused tab bar separator color (was using ImGuiCol_Tab, should use ImGuiCol_TabUnfocusedActive).
  • Columns: Fixed a regression from 1.71 where the right-side of the contents rectangle within each column
    would wrongly use a WindowPadding.x instead of ItemSpacing.x like it always did. (#125, #2666)
  • Columns: Made the right-most edge reaches up to the clipping rectangle (removing half of WindowPadding.x
    worth of asymmetrical/extraneous padding, note that there's another half that conservatively has to offset
    the right-most column, otherwise it's clipping width won't match the other columns). (#125, #2666)
  • Columns: Improved honoring alignment with various values of ItemSpacing.x and WindowPadding.x. (#125, #2666)
  • Columns: Made GetColumnOffset() and GetColumnWidth() behave when there's no column set, consistently with other column functions. (#2683)
  • InputTextMultiline: Fixed vertical scrolling tracking glitch.
  • Word-wrapping: Fixed overzealous word-wrapping when glyph edge lands exactly on the limit. Because
    of this, auto-fitting exactly unwrapped text would make it wrap. (fixes initial 1.15 commit, 78645a7).
  • Style: Attenuated default opacity of ImGuiCol_Separator in Classic and Light styles.
  • Style: Added style.ColorButtonPosition (left/right, defaults to ImGuiDir_Right) to move the color button
    of ColorEdit3/ColorEdit4 functions to either side of the inputs.
  • IO: Added ImGuiKey_KeyPadEnter and support in various back-ends (previously back-ends would need to specifically redirect key-pad keys to their regular counterpart). This is a temporary attenuating measure until we actually refactor and add whole sets of keys into the ImGuiKey enum. (#2677, #2005) [@amc522]
  • Misc: Made Button(), ColorButton() not trigger an "edited" event leading to IsItemDeactivatedAfterEdit()
    returning true. This also effectively make ColorEdit4() not incorrect trigger IsItemDeactivatedAfterEdit()
    when clicking the color button to open the picker popup. (#1875)
  • Misc: Added IMGUI_DISABLE_METRICS_WINDOW imconfig.h setting to explicitly compile out ShowMetricsWindow().
  • Debug, Metrics: Added Metrics>Tools>Item Picker tool which allow clicking on a widget to break in the debugger
    within the item code. The tool calls IM_DEBUG_BREAK() which can be redefined in imconfig.h if needed.
  • ImDrawList: Fixed CloneOutput() helper crashing. (#1860) [@gviot]
  • ImDrawListSplitter: (and ImDrawList::ChannelsSplit()): Fixed an issue with merging draw commands between channel 0 and 1. (#2624)
  • ImDrawListSplitter: Fixed memory leak when using low-level split api (was not affecting ImDrawList api, also this type was added in 1.71 and not advertised as a public-facing feature).
  • Fonts: binary_to_compressed_c.cpp: Display an error message if failing to open/read the input font file.
  • Demo: Log, Console: Using a simpler stateless pattern for auto-scrolling.
  • Demo: Widgets: Showing how to use the format parameter of Slider/Drag functions to display the name of an enum value instead of the underlying integer value.
  • Backends: DX10/DX11: Backup, clear and restore Geometry Shader is any is bound when calling renderer.
  • Backends: DX11: Clear Hull Shader, Domain Shader, Compute Shader before rendering. Not backing/restoring them.
  • Backends: OSX: Disabled default native Mac clipboard copy/paste implementation in core library (added in 1.71), because it needs application to be linked with -framework ApplicationServices. It can be explicitly enabled back by using #define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS in imconfig.h. Re-added equivalent using NSPasteboard api in the imgui_impl_osx.mm experimental back-end. (#2546)
  • Backends: SDL2: Added dummy ImGui_ImplSDL2_InitForD3D() function to make D3D support more visible. (#2482, #2632) [@josiahmanson]
  • Examples: Added SDL2+DirectX11 example application. (#2632, #2612, #2482) [@vincenthamm]

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: Making it possible to undock a node by clicking on the tab bar / title bar for the node. (#2645).
  • Docking: Explicitly inhibit constraint when docked for now. Fix clipping issue related to constraints. (#2690).
  • Docking: Fixed dragging/resizing from OS decoration not marking settings as dirty.
  • Docking: Renamed io.ConfigDockingTabBarOnSingleWindows to io.ConfigDockingAlwaysTabBar. ImGuiWindowClass::DockingAlwaysTabBar to set on individual windows.
  • Docking: Perform simple check: assert if Docking or Viewport are enabled exactly on frame 1 (instead of frame 0 or later), which is a common user error leading to loss of .ini data on load.
  • Docking: Fix so that an appearing window making a dock node reappear won't have a zero-size on its first frame.
  • Docking: Fixed using ImGuiDockNodeFlags_AutoHideTabBar with io.ConfigDockingTabBarOnSingleWindows.
  • Docking: Added ImGuiDockNode to .natvis file.
  • Docking: Fixed support for large meshes in GetBackgroundDrawList(), GetForegroundDrawList(). (#2638)
  • Viewport: Fix monitor dpi info not being copied to main viewport when multi-viewports are not enabled. (#2621, #1676)
  • Viewport: Refactored ImGuiWindowClass'sViewportFlagsOverrideMask+ViewportFlagsOverrideValue into ViewportFlagsOverrideSet+ViewportFlagsOverrideClear which appears easier to grasp. (#1542)
  • Viewport: Added ImGuiViewportFlags_NoAutoMerge to prevent merging into host viewport in a per-window basis via the ImGuiWindowClass override mechanism. (#1542)

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 nicer Visual Studio projects generated by premake.

Help wanted!

  • Dear ImGui is looking for a technical writer to help writing technical articles, tutorials and documentation. Please reach out if you are interesting in helping!.
  • One upcoming project will be to start writing a high quality "sample" game editor application to showcase how a fancy polished dear imgui application may look like (vs the standard demo which is constrained by nature of being embedded within the library).
  • Multi-viewports in particular needs help and bug-fixes on Linux and Mac. Specific workarounds for both SDL and GLFW are becoming highly desirable. I am myself not a Linux nor Mac users and those platforms have been lagging behind in term of multi-viewport supports. (#2117).
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • The DirectX12 renderer needs multi-viewports support.
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

See Gallery threads for more pictures and to post yours!

Light Tracer Render (https://lighttracer.org/)
Light Tracer screenshot

Karnaugh Studio (https://sevcikdaniel.github.io/karnaugh-studio/)
Karnaugh Studio screenshot

Azure Kinect Viewer (https://docs.microsoft.com/en-us/azure/kinect-dk/azure-kinect-viewer)
Azure Kinect Viewer

"An industrial application used dear-ImGUI,a scheduling system to control several robot and other devices,
so fast & cool, and from now on, say goodbye to MFC, thanks Dear-ImGUI." @haohuixin

"ImGui interface for my global illumination playground profiler. I made a custom widget to render task performance breakdown and legend for it, it was pretty enjoyable." @Raikiri

Polyscope (http://polyscope.run/)
Polyscope

nnview: neural network viewer (https://github.com/lighttransport/nnview)

RaysimLib (https://github.com/leggedrobotics/raisimLib)

Assets 2

@ocornut ocornut released this Jun 12, 2019 · 753 commits to master since this release

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!


See https://github.com/ocornut/imgui for the project homepage.
See https://github.com/ocornut/imgui/releases for earlier release notes.
See https://github.com/ocornut/imgui/wiki for language/framework bindings, links, 3rd parties helpers/extensions.
Issues and support: https://github.com/ocornut/imgui/issues
Technical support for new users: https://discourse.dearimgui.org (also search in GitHub Issues)

Thank you!

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

TL;DR;

  • Made it possible to support large meshes (64k+ vertices) while compiling with 16-bit indices, back-end need to set ImGuiBackendFlags_RendererHasVtxOffset and honor ImDrawCmd::VtxOffset. Added support for this in most back-ends.
  • Made SetNextWindowContentSize() actually useful (see details below).
  • Freetype: Support for Monochrome rasterizing which for some fonts can get you high-quality non-AA looking output.
  • 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.
  • 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.
  • Backends: Add native Mac clipboard copy/paste default implementation in core library to match what we are dealing with Win32, and to facilitate integration in custom engines. (#2546) [@andrewwillmott]
  • Backends: OSX: imgui_impl_osx: Added mouse cursor support. (#2585, #1873) [@actboy168]
  • Examples/Backends: DirectX9/10/11/12, Metal, Vulkan, OpenGL3 (Desktop GL only): Added support for large meshes (64k+ vertices) with 16-bits indices, enable 'ImGuiBackendFlags_RendererHasVtxOffset' in those back-ends.
  • 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)

Beta features!

The docking (#2109) and multi-viewport (#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. There's a CMake pull-request (#1713).

Future features!

A sneak peak at what I am currently working on..

Tables (multi-purpose replacement for columns)
Tables

Testing suite
Automation

Help wanted!

  • Multi-viewports in particular needs help on Linux and Mac, and specific workarounds for both SDL and GLFW are becoming highly desirable. (#2117),
  • The Vulkan renderer appears to have issues (see vulkan tag)
  • The DirectX12 renderer needs multi-viewports support.
  • Browsing issues and todo list you may find something something to contribute to!

Gallery

See Gallery threads for more pictures and to post yours!

OpenSage (https://github.com/OpenSAGE/OpenSAGE)
OpenSage

NVIDIA Omniverse viewer (https://developer.nvidia.com/nvidia-omniverse)
OpenSage in motion: https://twitter.com/NVBackchannel/status/1131712329446506497

Unnamed game by @Aarkham

pcsx-redux by @grumpycoders https://github.com/grumpycoders/pcsx-redux
pcsx-redux

Orbital (https://github.com/AlexAltea/orbital)
orbital

Assets 2
You can’t perform that action at this time.