v1.84
版本发布时间: 2021-08-21 00:23:03
ocornut/imgui最新发布版本:v1.91.3(2024-10-04 21:48:34)
Hello! Reading the changelog is a good way to keep up to date with the things Dear ImGui has to offer, and maybe will give you ideas of some features that you've been ignoring until now!
*EDIT* Grab 1.84.1 instead for the hotfix for BeginDisabled(false)
Homepage: https://github.com/ocornut/imgui Release notes: https://github.com/ocornut/imgui/releases Wiki: https://github.com/ocornut/imgui/wiki for bindings, extensions, links, etc. FAQ: https://www.dearimgui.org/faq/ Issues: https://github.com/ocornut/imgui/issues
Did you know? We have a Wiki! It has sections such as this Useful Extensions Gallery! 👌
Thank you!
Special thanks to @rokups for their continued work on stuff that are still not visible e.g. regression tests. Special thanks to @PathogenDavid, @AidanSun05, @thedmd, for their continued contributions and helping with github answers.
Ongoing work on Dear ImGui is currently financially supported by:
Huge thank you to all past and present supporters!
Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.
TL;DR;
-
BeginDisabled()
/EndDisabled()
groups *EDIT* Grab 1.84.1 instead for the hotfix forBeginDisabled(false)
- Tables fixes and improvements
- Backends refactored to store their state in current context
- Backends are reporting mouse position even when host platform window is not focused (as long as mouse not captured by another app)
- OpenGL backends now embeds its own GL loader (#4445)
- Countless other fixes, improvements.... details below...
Breaking Changes
(Suggestion: once in a while, add #define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
in your imconfig.h
file to make sure you are not using to-be-obsoleted symbols.)
- Commented out redirecting functions/enums names that were marked obsolete in 1.67 and 1.69 (March 2019):
-
ImGui::GetOverlayDrawList()
-> useImGui::GetForegroundDrawList()
-
ImFont::GlyphRangesBuilder
-> useImFontGlyphRangesBuilder
-
- Backends: OpenGL3: added a third source file
imgui_impl_opengl3_loader.h
. [@rokups] - Backends: GLFW: backend uses
glfwSetCursorEnterCallback()
+glfwSetWindowFocusCallback()
(#3751, #4377, #2445, #4388)- If calling ImGui_ImplGlfw_InitXXX with install_callbacks=true: this is already done for you.
- If calling ImGui_ImplGlfw_InitXXX with install_callbacks=false: you WILL NEED to register the GLFW callbacks and forward them to the backend:
- Register
glfwSetCursorEnterCallback
, forward events toImGui_ImplGlfw_CursorEnterCallback()
. - Register
glfwSetWindowFocusCallback
, forward events toImGui_ImplGlfw_WindowFocusCallback()
.
- Backends: SDL2: removed unnecessary/duplicate
SDL_Window*
parameter fromImGui_ImplSDL2_NewFrame()
. (#3244) [@funchal] Kept inline redirection function (will obsolete). - Backends: SDL2: backend needs to set
SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1")
in order to receive mouse clicks events on window focus, otherwise SDL doesn't emit the event. (#3751, #4377, #2445) This is unfortunately a global SDL setting, so enabling it might have a side-effect on your application. It is unlikely to make a difference, but if your app absolutely needs to ignore the initial on-focus click: you can ignoreSDL_MOUSEBUTTONDOWN
events coming right after aSDL_WINDOWEVENT_FOCUS_GAINED
event). - Internals: (for custom widgets): because disabled items now sets HoveredID, if you want custom widgets to not react as hovered when disabled, in the majority of use cases it is preferable to check the "hovered" return value of
ButtonBehavior()
rather thanHoveredId == id
.
All Changes
- IO: Added
io.AddFocusEvent()
api for backend to tell when host window has gained/lost focus. (#4388) [@thedmd] If you use a custom backend, consider adding support for this! - Disabled: added
BeginDisabled()
/EndDisabled()
api to create a scope where interactions are disabled. (#211)- Added
style.DisabledAlpha
(default to 0.60f) and correspondingImGuiStyleVar_DisabledAlpha
enum. (#211) - Unlike the internal-and-undocumented-but-somehow-known PushItemFlag(ImGuiItemFlags_Disabled), this also alters visuals. Currently this is done by lowering alpha of all widgets. Future styling system may do that differently.
- Disabled items set HoveredId, allowing e.g. HoveredIdTimer to run. (#211, #3419) [@rokups]
- Disabled items more consistently release ActiveId if the active item got disabled. (#211)
- Nav: Fixed disabled items from being candidate for default focus. (#211, #787)
- Fixed Selectable() selection not showing when disabled. (#211)
- Fixed
IsItemHovered()
returning true on disabled item when navigated to. (#211) - Fixed
IsItemHovered()
when popping disabled state after item, or when using Selectable_Disabled. (#211)
- Added
- Windows:
ImGuiWindowFlags_UnsavedDocument
/ImGuiTabItemFlags_UnsavedDocument
displays a dot instead of a '*' so it is independent from font style. When in a tab, the dot is displayed at the same position as the close button. Added extra comments to clarify the purpose of this flag in the context of docked windows. - Tables: Added
ImGuiTableColumnFlags_Disabled
acting a master disable over (hidden from user/context menu). (#3935) - Tables: Clarified that
TableSetColumnEnabled()
requires the table to use theImGuiTableFlags_Hideable
flag, because it manipulates the user-accessible show/hide state. (#3935) - Tables: Added
ImGuiTableColumnFlags_NoHeaderLabel
to requestTableHeadersRow()
to not submit label for a column. Convenient for some small columns. Name will still appear in context menu. (#4206). - Tables: Fixed columns order on
TableSetupScrollFreeze()
if previous data got frozen columns out of their section. - Tables: Fixed invalid data in
TableGetSortSpecs()
when SpecsDirty flag is unset. (#4233) - TabBar: Fixed using more than 32 KB-worth of tab names. (#4176)
- InputInt/InputFloat: When used with Steps values and
_ReadOnly
flag, the step button look disabled. (#211) - InputText: Fixed named filtering flags disabling newline or tabs in multiline inputs (#4409, #4410) [@kfsone]
- Drag and Drop: drop target highlight doesn't try to bypass host clipping rectangle. (#4281, #3272)
- Drag and Drop: Fixed using
AcceptDragDropPayload()
withImGuiDragDropFlags_AcceptNoPreviewTooltip
. [@JeffM2501] - Menus:
MenuItem()
andBeginMenu()
are not affected/overlapping whenstyle.SelectableTextAlign
is altered. - Menus: Fixed hovering a disabled menu or menu item not closing other menus. (#211)
- Popups: Fixed
BeginPopup()
/OpenPopup()
sequence failing when there are no focused windows. (#4308) [@rokups] - Nav: Alt doesn't toggle menu layer if other modifiers are held. (#4439)
- Fixed printf-style format checks on non-MinGW flavors. (#4183, #3592)
- Fonts: Functions with a
float size_pixels
parameter can accept zero if it is set inImFontSize::SizePixels
. - Fonts: Prefer using
U+FFFD
character for fallback instead of '?', if available. (#4269) - Fonts: Use
U+FF0E
dot character to construct an ellipsis ifU+002E
'.' is not available. (#4269) - Fonts: Added
U+FFFD
("replacement character") to default Asian glyphs ranges. (#4269) - Fonts: Fixed calling ClearTexData() (clearing CPU side font data) triggering an assert in NewFrame(). (#3487)
- DrawList: Fixed
AddCircle()
/AddCircleFilled() with auto-tesselation not using accelerated paths for small circles. Fixed
AddCircle()/
AddCircleFilled()` with 12 segments which had a broken edge. (#4419, #4421) [@thedmd] - Demo: Fixed requirement in 1.83 to link with imgui_demo.cpp if
IMGUI_DISABLE_METRICS_WINDOW
is not set. (#4171) Normally the right way to disable compiling the demo is to setIMGUI_DISABLE_DEMO_WINDOWS
, but we want to avoid implying that the file is required. - Metrics: Fixed a crash when inspecting the individual draw command of a foreground drawlist. [@rokups]
- Backends: Reorganized most backends (Win32, SDL, GLFW, OpenGL2/3, DX9/10/11/12, Vulkan, Allegro) to pull their data from a single structure stored inside the main Dear ImGui context. This facilitate/allow usage of standard backends with multiple-contexts BUT is only partially tested and not well supported. It is generally advised to instead use the multi-viewports feature of docking branch where a single Dear ImGui context can be used across multiple windows. (#586, #1851, #2004, #3012, #3934, #4141)
- Backends: Win32: Rework to handle certain Windows 8.1/10 features without a manifest. (#4200, #4191)
-
ImGui_ImplWin32_GetDpiScaleForMonitor()
will handle per-monitor DPI on Windows 10 without a manifest. -
ImGui_ImplWin32_EnableDpiAwareness()
will callSetProcessDpiAwareness()
fallback on Windows 8.1 without a manifest.
-
- Backends: Win32: IME functions are disabled by default for non-Visual Studio compilers (MinGW etc.). Enable with
#define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS
for those compilers. Undo change from 1.82. (#2590, #738, #4185, #4301) - Backends: Win32: Mouse position is correctly reported when the host window is hovered but not focused. (#2445, #2696, #3751, #4377)
- Backends: Win32, SDL2, GLFW, OSX, Allegro: now calling
io.AddFocusEvent()
on focus gain/loss. (#4388) [@thedmd] This allow us to ignore certain inputs on focus loss (previously relied on mouse loss but backends are now reporting mouse even when host window is unfocused, as per #2445, #2696, #3751, #4377) - Backends: Fixed keyboard modifiers being reported when host window doesn't have focus. (#2622)
- Backends: GLFW: Mouse position is correctly reported when the host window is hovered but not focused. (#3751, #4377, #2445)
(backend now uses
glfwSetCursorEnterCallback()
. If you called ImGui_ImplGlfw_InitXXX with install_callbacks=false, you will need to install this callback and forward the data to the backend viaImGui_ImplGlfw_CursorEnterCallback)
. - Backends: SDL2: Mouse position is correctly reported when the host window is hovered but not focused. (#3751, #4377, #2445)
(enabled with SDL 2.0.5+ as
SDL_GetMouseFocus()
is only usable withSDL_HINT_MOUSE_FOCUS_CLICKTHROUGH
). - Backends: DX9: Explicitly disable texture state stages after >= 1. (#4268) [@NZJenkins]
- Backends: DX12: Fix texture casting crash on 32-bit systems (introduced on 2021/05/19 and v1.83) + added comments about building on 32-bit systems. (#4225) [@kingofthebongo2008]
- Backends: OpenGL3: Embed our own minimal GL headers/loader (imgui_impl_opengl3_loader.h) based on gl3w. Reduces the frequent issues and confusion coming from having to support multiple loaders and requiring users to use and initialize the same loader as the backend. [@rokups] Removed support for gl3w, glew, glad, glad2, glbinding2, glbinding3 (all now unnecessary).
- Backends: OpenGL3: Handle
GL_CLIP_ORIGIN
on <4.5 contexts ifGL_ARB_clip_control
extension is detected. (#4170, #3998) - Backends: OpenGL3: Destroy vertex/fragment shader objects right after they are linked into main shader. (#4244) [@Crowbarous]
- Backends: OpenGL3: Use
OES_vertex_array
extension on Emscripten + backup/restore current state. (#4266, #4267) [@harry75369] - Backends: GLFW: Installing and exposed
ImGui_ImplGlfw_MonitorCallback()
for forward compatibility with docking branch. - Backends: OSX: Added a fix for shortcuts using CTRL key instead of CMD key. (#4253) [@rokups]
- Examples: DX12: Fixed handling of Alt+Enter in example app (using swapchain's
ResizeBuffers
). (#4346) [@PathogenDavid] - Examples: DX12: Removed unnecessary recreation of backend-owned device objects when window is resized. (#4347) [@PathogenDavid]
- Examples: OpenGL3+GLFW,SDL: Remove include cruft to support variety of GL loaders (no longer necessary). [@rokups]
- Examples: OSX+OpenGL2: Fix event forwarding (fix key remaining stuck when using shortcuts with Cmd/Super key). Other OSX examples were not affected. (#4253, #1873) [@rokups]
- Examples: Updated all .vcxproj to VS2015 (toolset v140) to facilitate usage with vcpkg.
- Examples: SDL2: Accommodate for vcpkg install having headers in SDL2/SDL.h vs SDL.h.
Other branches & Beta features!
Also see previous release notes such as 1.80, 1.81, 1.80, 1.83.
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.83 to 1.84 related to the docking branch (multi-viewport and docking features) include:
- Docking: Clicking on the right-most close button of a docking node closes all windows. (#4186)
- Nav, Drag and Drop, Docking: fixed two issues leading nav result to conflict with moving a window. (#4211, #3025)
- Docking: Fix IsWindowAppearing() unnecessarily returning true twice in a row. (#4177, #3982, #1497, #1061). (apparently there's still an issue tho)
- Docking: Fix
IsWindowAppearing()
and ImGuiCond_Appearing on docked windows. (#4177, #3982, #1497, #1061) - Docking: Reworked node flags saving/inheritance. (#4292, #3834, #3633, #3521, #3492, #3335, #2999, #2648)
- Docking: Fixed crash when a dock node gets re-qualified as dockspace>floating>dockspace.. (#3203, #4295)
- Docking: Fixed crash issues using DockBuilderRemoveNode() in some situations. (#3111, #3179, #3203, #4295)
- Docking: Removed
DockNodeFlagsOverrideClear
flags fromImGuiWindowClass
. (#2999, #3521, #3633) - Docking: Added ImGuiDockNodeFlags_NoDockingOverEmpty. Breaking definition of
ImGuiDockNodeFlags_NoDockingOverOther
which now means "non empty node". (#3492, #2648, #4292) - Viewports: Fix popup/tooltip created without a parent window from being given a ParentViewportId value of the implicit/fallback window. (#4236, #2409)
- Viewports, Backends: Vulkan: Fix the use of the incorrect fence in wait for fence. (#4208)
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 Visual Studio projects generated by premake.
Gallery
Below a selection of screenshots from Gallery threads...
@flamendless: CodeNect is a visual programming software for beginners! https://github.com/flamendless/CodeNect-VPS, https://brbl.itch.io/codenect Thanks to @rokups' ImNodes for the nodes ui lib
Codeperfect 95: A Blazing Fast IDE for Go https://codeperfect95.com "A toolkit that understands Go as a first language."
Overwatch 2 https://playoverwatch.com/en-us/news/23674944/
@LunaTheFoxGirl "I'm working on inochi2d & rigging tool for 2D puppets, mainly aimed at VTubing but also for games (like visual novels)" "Rigging tool uses ImGui and our binding bindbc-imgui, which in turn uses cimgui"
@dfeneyrou Palanteer, a new visual profiler for C++ and Python (for the moment), lean and with high performance. https://github.com/dfeneyrou/palanteer
@jeffreyspaan <CoolName>: a dataflow simulator. using DearPyGui (built with Dear ImGui) https://github.com/jeffreyspaan/coolname
@stephenfewer "I developed a commercial Windows allocation profiler called WonderLeak using the ImGui docking branch for the interface."
@0lru _"C++& Python layer for ImGui & ImPlot. The library itself is written in C++ and already usable in Python via Pybind11. For the layout, I'm trying to implement a subset of the CSS-Flexbox-idea. It aims at fast prototyping small applications where performance does also matter. https://github.com/0lru/p3ui
@MartinBspheroid _"Prototype of music thingy. And yes, it's running on phone."
@drhelius "These are my Game Boy and Master System / Game Gear emulators. I migrated from Qt to ImGui and it was the best decision ever!" https://github.com/drhelius/Gearboy https://github.com/drhelius/Gearsystem
@noizebox "I've seen a few audio processing plugins (VST) posted here, so here is another one :) I wrote it for KVRs semi-annual Developers Challenge. It's loosely based on an old guitar pedal that was given to me by my dad. It's both a fuzzbox and a compressor that can pump like crazy with the right settings. Try it on drums and other dynamic material with the amount up all the way and tweak the speed and gain knobs for some grainy pumping ;) You can find some audio examples and download the binary (windows and linux) here https://www.kvraudio.com/product/nb01---distortion-sustainer-by-noizebox-industries " "The UI is all Dear ImGui with custom widgets for the knobs and level meters, and a modified GLFW as platform backend. It uses thread-local ImGui contexts and one drawing thread per instance to provide multiple, separate editor instances."
@blueskythlikesclouds HedgeGI is a tool that bakes global illumination and light field data for Sonic games that utilize Hedgehog Engine. https://github.com/blueskythlikesclouds/HedgeGI
PS: Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out. See Sponsors page for details.