Bloat-free Immediate Mode Graphical User interface for JVM with minimal dependencies (rewrite of dear imgui)
1.89.7-1 hotfix
#191
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!
Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out.
This is a followup to v1.89, v1.89.2, v1.89.3, v1.89.4, v1.89.5, v1.89.6. We are trying to make more frequent releases. Because: some people are relying on tagging and auto-generated bindings for other languages. And: it sets a beat and may encourage teams to update more frequently.
Omar has been stubbornly deferring tagging 1.90 for while because he wanted to include the range-select feature in it, but it's not done... But there are about 540 lines of changelog between 1.89 and 1.89.7.
io.hoverDelayShort/io.hoverDelayNormal
to style.hoverDelayShort/style.hoverDelayNormal
. As the fields were added in 1.89 and expected to be left unchanged by most users, or only tweaked once during app initialization, we are exceptionally accepting the breakage. Majority of users are likely to not even notice.setItemAllowOverlap()
: it didn't and couldn't work reliably since 1.89 (2022-11-15), and relied on ambiguously defined design. Use setNextItemAllowOverlap()
before item instead.setNextItemAllowOverlap()
(called before an item) as a replacement for using setItemAllowOverlap()
(called after an item). This is roughly equivalent to using the legacy setItemAllowOverlap()
call (public API) + ButtonFlag,AllowOverlap
(internal).to
TreeNodeFlag,AllowOverlap` for consistency.SelectableFlag.AllowItemOverlap
to SelectableFlag.AllowOverlap
for consistency.setItemTooltip()
and beginItemTooltip()
helper functions.isItemHovered()
.
setItemTooltip("Hello") == if (isItemHovered(HoveredFlag.Tooltip)) setTooltip("Hello")
beginItemTooltip() == isItemHovered(HoveredFlag.Tooltip) && beginTooltip()
The newly added HoveredFlag.Tooltip
is meant to facilitate standardizing mouse hovering delays and rules for a given application. The previously common idiom of using 'if (isItemHovered()) setTooltip(...)' won't use delay or stationary test.HoveredFlag.Stationary
to require mouse being stationary when hovering a new item. Added style.hoverStationaryDelay
(~0.15 sec). Once the mouse has been stationary once the state is preserved for same item. (https://github.com/ocornut/imgui/issues/1485)HoveredFlag.ForTooltip
as a shortcut for pulling flags from style.hoverFlagsForTooltipMouse
or style.hoverFlagsForTooltipNav
depending on active inputs. (https://github.com/ocornut/imgui/issues/1485)
style.hoverFlagsForTooltipMouse
defaults to HoveredFlag.Stationary | HoveredFlag.DelayShort
.style.hoverFlagsForTooltipNav
defaults to HoveredFlag.NoSharedDelay | HoveredFlag.DelayNormal
.style.hoverDelayNormal
from 0.30 to 0.40, Tweaked default value of style.hoverDelayShort
from 0.10 to 0.15. (https://github.com/ocornut/imgui/issues/1485)HoveredFlag.AllowWhenOverlappedByWindow
to ignore window-overlap only. Option HoveredFlag.AllowWhenOverlapped
now expand into a combination of both .AllowWhenOverlappedByWindow + .AllowWhenOverlappedByItem
, matching old behavior.setNextItemAllowOverlap()
. (https://github.com/ocornut/imgui/issues/6512, https://github.com/ocornut/imgui/issues/3909, https://github.com/ocornut/imgui/issues/517)HoveredFlag.AllowWhenOverlappedByItem
to opt-out. (https://github.com/ocornut/imgui/issues/6512, https://github.com/ocornut/imgui/issues/3909, https://github.com/ocornut/imgui/issues/517)SelectableFlag.AllowOverlap/TreeNodeFlag.AllowOverlap
and holding item held, overlapping widgets won't appear as hovered. (https://github.com/ocornut/imgui/issues/6512, https://github.com/ocornut/imgui/issues/3909)HoveredFlag.Stationary
..Framed+.Leaf
flags. (https://github.com/ocornut/imgui/issues/6549)InputTextFlag.EscapeClearsAll
flag. (https://github.com/ocornut/imgui/issues/5688, https://github.com/ocornut/imgui/issues/2620)InputTextCallbackData::insertChars
accept (null, null)
range, in order to conform to common idioms (e.g. passing .data(), .data() + .size() from a null string). (https://github.com/ocornut/imgui/issues/6565, https://github.com/ocornut/imgui/pull/6566, https://github.com/ocornut/imgui/issues/3615)drag
, slider
, input
, Plot widgets are fulfilling it. (Behavior doesn't apply when DragDropFlag.SourceNoDisableHover
is set).io.configDebugIniSettings
option to save .ini data with extra comments. Currently mainly for inspecting Docking .ini data, but makes saving slower.glBindSampler()
backup/restore on ES3. (https://github.com/ocornut/imgui/pull/6375, https://github.com/ocornut/imgui/issues/6508) [@jsm174]glGetIntegerv(GL_CONTEXT_PROFILE_MASK)
on contexts lower than 3.2. (https://github.com/ocornut/imgui/issues/6539, https://github.com/ocornut/imgui/pull/6333) [@krumelmonster]
Backends: GLFW: Accept
glfwGetTime()` not returning a monotonically increasing value. This seems to happens on some Windows setup when peripherals disconnect, and is likely to also happen on browser+Emscripten. Matches similar 1.89.4 fix in SDL backend. (https://github.com/ocornut/imgui/issues/6491)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!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4, v1.89.5. We are trying to make more frequent releases. Because it sets a beat and may encourage teams to update more frequently.
Omar has been stubbornly deferring tagging 1.90 for while because he wanted to include the range-select feature in it, but it's not done... But there are nearly 500 lines of changelog between 1.89 and 1.89.6.
Breaking Changes:
forceDisplayRangeByIndices()
to includeRangeByIndices()
, kept inline redirection function (introduced in 1.86 and rarely used). (https://github.com/ocornut/imgui/issues/6424, https://github.com/ocornut/imgui/pull/3841)Other Changes:
io.configWindowsMoveFromTitleBarOnly
is set. (https://github.com/ocornut/imgui/issues/6390)tableHeader()
leading to an empty tooltip showing when a sorting column has no visible name. (https://github.com/ocornut/imgui/pull/6342)io.wantTextInputNextFrame
during the deactivation frame. (https://github.com/ocornut/imgui/pull/6341)%
, CTRL+Click to input text will use the default format specifier for the type. Allow display/input of raw value when using "enums" patterns (display label instead of value) + allow using when value is hidden. (https://github.com/ocornut/imgui/issues/6405)_NavFlattened
flags erroneously initializing default nav layer to menu layer.io.configDebugIgnoreFocusLoss
option to disable io.addFocusEvent(false)
handling. May facilitate interactions with a debugger when focus loss leads to clearing inputs data. (https://github.com/ocornut/imgui/pull/4388, https://github.com/ocornut/imgui/issues/4921)io.backendFlags
on backend shutdown()
. (https://github.com/ocornut/imgui/pull/6334, https://github.com/ocornut/imgui/pull/6335]
Potentially this would facilitate switching runtime backend mid-session.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!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
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.
This is a followup to v1.89, v1.89.1, v1.89.2, v1.89.3, v1.89.4. We are trying to make more frequent releases. Because it sets a beat and may encourage teams to update more frequently.
All Changes:
isItemDeactivated()
returns true
, in order to allow usage without user retaining underlying data. While we don't really want to encourage user not retaining underlying data, in the absence of a "late commit" behavior/flag we understand it may be desirable to take advantage of this trick. (https://github.com/ocornut/imgui/issues/4714)TabBarFlag.FittingPolicyScroll
can be scrolled with horizontal mouse-wheel (or Shift + WheelY). (https://github.com/ocornut/imgui/issues/2702)ButtonFlag.AllowItemOverlap
policy. (https://github.com/ocornut/imgui/issues/2702, https://github.com/ocornut/imgui/issues/4921)
io.addMouseSourceEvent()
and MouseSource
enum. This is to allow backend to specify actual event source between Mouse/TouchScreen/Pen. (https://github.com/ocornut/imgui/issues/2702, https://github.com/ocornut/imgui/issues/2334, https://github.com/ocornut/imgui/issues/2372, https://github.com/ocornut/imgui/issues/3453, https://github.com/ocornut/imgui/issues/5693)io.addXXXX
functions from inactive context (wrongly advertised as supported in 1.89.4). (https://github.com/ocornut/imgui/issues/6199, https://github.com/ocornut/imgui/pull/6256, https://github.com/ocornut/imgui/pull/5856)GL_VERSION
returns null
. (https://github.com/ocornut/imgui/pull/6154, https://github.com/ocornut/imgui/issues/4445, https://github.com/ocornut/imgui/pull/3530)io.addMouseSourceEvent()
to discriminate Mouse/TouchScreen/Pen. (https://github.com/ocornut/imgui/issues/2334, https://github.com/ocornut/imgui/issues/2702)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!
📣 Click version number above to display full release note contents, sometimes randomly clipped by GitHub..
Dear ImGui is funded by your contributions and needs them right now. If your company uses Dear ImGui, consider reaching out.
Changes
This is a followup to v1.89, v1.89.1, v1.89.2 and v1.89.3. We are trying to make more frequent releases. Because it sets a beat and may encourage teams to update more frequently.
Breaking Changes:
pushAllowKeyboardFocus()
/popAllowKeyboardFocus()
to pushTabStop()
/popTabStop()
.Boolean
return value to beginTooltip()
for API consistency. Please only submit contents and call endTooltip()
if beginTooltip()
returns true
. In reality the function will currently always return true
, but further changes down the line may change this, best to clarify API sooner. Updated demo code accordingly.Other Changes:
ConfigFlag.NavEnableKeyboard
is set. (https://github.com/ocornut/imgui/issues/3092, https://github.com/ocornut/imgui/issues/5759, https://github.com/ocornut/imgui/issues/787)
While this was generally desired and requested by many, note that its addition means that some types of UI may become more fastidious to use TAB key with, if the navigation cursor cycles through too many items. You can mark items items as not tab-spottable:
pushTabStop(false)
/ popTabStop()
.pushItemFlag(temFlag.NoTabStop, true)
.ItemFlag.NoTabStop
to itemAdd()
for custom widgets.setItemDefaultFocus()
from not scrolling when item is partially visible. (https://github.com/ocornut/imgui/pull/2814, https://github.com/ocornut/imgui/issues/2812) [@DomGries]io.addEventXXX
functions from current context. (https://github.com/ocornut/imgui/issues/4921, https://github.com/ocornut/imgui/pull/5856, https://github.com/ocornut/imgui/issues/6199)io.configDebugBeginReturnValueOnce
/ io.configDebugBeginReturnValueLoop
options to simulate Begin/BeginChild returning false to facilitate debugging user behavior.beginTooltip()
.ConfigFlag.NavEnableKeyboard
and ConfigFlag.NavEnableGamepad
by default. (https://github.com/ocornut/imgui/issues/787)SeparatorText()
widget. (https://github.com/ocornut/imgui/issues/1643)
- Added to style: float SeparatorTextBorderSize
.
- Added to style: ImVec2 SeparatorTextAlign
, ImVec2 SeparatorTextPadding
.Special thanks to @kyay10 for his PRs (1 and 2).
This is a followup to v1.89 and v1.89.1.
All Changes:
ImGuiMod_Shortcut
to redirect to Ctrl/Super at runtime instead of compile-time, being consistent with our support for io.ConfigMacOSXBehaviors and making it easier for bindings generators to process that value. (https://github.com/ocornut/imgui/issues/5923, https://github.com/ocornut/imgui/issues/456)GetItemID()
in public API. It is not often expected that you would use this, but it is useful for Shortcut() and upcoming owner-aware input functions which wants to be implemented with public API.void* UserData
field in ImFontAtlas
, as a convenience for use by applications using multiple font atlases.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!
Font::displayOffset
in favor of FontConfig::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)ListClipper
: Renamed constructor parameters which created an ambiguous alternative to using the ListClipper::begin()
function, with misleading edge cases. Always use ListClipper::begin()
!style.tabMinWidthForUnselectedCloseButton
to style.tabMinWidthForCloseButton
.SliderFlag.ClampOnInput
to SliderFlag.AlwaysClamp
.openPopupContextItem()
back to openPopupOnItemClick()
, REVERTED CHANGE FROM 1.77. For variety of reason this is more self-explanatory and less error-prone.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
setNextWindowPos()
when the window is collapsed. (#3433)setScrollHere()
functions edge snapping when called during a frame where contentSize
is changing (issue introduced in 1.78). (#3452).inputTextMultiline()
. (#3430) [@Xipiryon]InputTextCallbackData()
.InputTextFlag.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).InputTextFlag.Password
with inputTextMultiline()
. It is a rather unusual or useless combination of features but no reason it shouldn't work! (#3427, #3428)inputTextMultiline()
.deleteChars()
function when cursor is inside the deleted block. (#3454)tabItemButton()
to submit tab that behave like a button. (#3291) [@Xipiryon]TabItemFlag.Leading
and TabItemFlag.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]TabItemFlag.NoReorder
flag to disable reordering a given tab.TabBarFlag.FittingPolicyScroll
) would generate an unnecessary extra draw call.dragFloat
, dragScalar
: Fixed SliderFlag.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]textColored()
/textWrapped()
/textDisabled()
helpers with a "%s"
format string. (#3466)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.)clipRect
being passed to renderer when using certain primitives inside of a fully clipped column. (#3475) [@szreder]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.inputText()
callbacks demo (aside from the more elaborate ones in Examples->Console).VK_LAYER_LUNARG_standard_validation
which is deprecated (#3459) [@FunMiles]Tab Bar: tabItemButton()
+ TabItemFlag.Trailing
checkboxFlags()
with visible tri-state (previously only in internals)
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!
(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)
float power=1f
parameter for those functions: [@ShironekoBen, @ocornut]
dragFloat()
, dragFloat2()
, dragFloat3()
, dragFloat4()
, dragFloatRange2()
, dragScalar()
, dragScalarN()
.sliderFloat()
, sliderFloat2()
, sliderFloat3()
, sliderFloat4()
, sliderScalar()
, sliderScalarN()
.vSliderFloat()
, vSliderScalar()
.float power=1f
argument with SliderFlags
flags defaulting to None
(aka 0, as with all our flags).
In short, when calling those functions, if you omitted the 'power' parameter (likely in C++), you are not affected.
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
io.wantCaptureKeyboard
flag being cleared accordingly. (bug introduced in 1.77 WIP on 2020/06/16) (#3344, #2880)SliderFlags
parameters.
- For float functions they replace the old trailing float power=1f
parameter. (See #3361 and the "Breaking Changes" block above for all details).
- Added SliderFlag.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 SliderFlag.ClampOnInput
flag to force clamping value when using CTRL+Click to type in a value manually. (#1829, #3209, #946, #413).
- Added SliderFlag.NoRoundToFormat
flag to disable rounding underlying value to match precision of the display format string. (#642)
- Added SliderFlag.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)DrawList::renderText()
call. ImGui-level functions such as textUnformatted()
are not affected. This is quite rare but it will be addressed later). (#3349)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.setTabItemClosed()
after a tab has been submitted (will process next frame).ButtonFlags
(previously in imgui_internal.h) and allowed to pass them to invisibleButton()
: ButtonFlag.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.FontConfig::glyphExtraSpacing
and FontConfig::pixelSnapH
settings being pulled from the merged/target font settings when merging fonts, instead of being pulled from the source font settings.io.antiAliasedLinesUseTex = false
to disable rendering using this method.
- Clear FontAtlasFlag.NoBakedLines
in FontAtlas::flags
to disable baking data in texture.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]addCircle()
with 12 segments would generate an extra vertex. (This bug was mistakenly marked as fixed in earlier 1.77 release). [@ShironekoBen]invisibleButton()
with multiple mouse buttons flags.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!
(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)
FontAtlas::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.openPopupOnItemClick()
to openPopupContextItem()
. Kept inline redirection function (will obsolete).beginPopupContextWindow(label: String, mouseButton: Int, alsoOverItems: Boolean)
in favor of beginPopupContextWindow(label: String, flags: PopupFlag)
with PopupFlag.NoOverItems
.calcItemRectClosestPoint()
entry point (has been asserting since December 2017).Other Changes
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()
with either _OpenOnDoubleClick
or _OpenOnArrow
would open the node. (#143)style.tabMinWidthForUnselectedCloseButton
settings:
Float.MAX_VALUE
to only display a close button when selected (merely hovering is not enough).TabItemFlag.NoTooltip
flag to disable the tooltip for individual tab item (vs TabBarFlag.NoTooltip
for entire tab bar). - [@Xipiryon]
Popups: All functions capable of opening popups (openPopup*
, beginPopupContext*
) now take a new PopupFlags
sets of flags instead of a mouse button index. The API is automatically backward compatible as PopupFlags
is guaranteed to hold mouse button index in the lower bits.PopupFlag.NoOpenOverExistingPopup
for openPopup*
/beginPopupContext*
functions to first test for the presence of another popup at the same level.PopupFlag.NoOpenOverItems
for beginPopupContextWindow()
- similar to testing for !isAnyItemHovered()
prior to doing an openPopup()
.PopupFlag.AnyPopupId
and PopupFlag.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.beginPopupContextVoid()
when clicking over the area made unavailable by a modal. (#1636)beginPopupModal()
doesn't set the WindowFlag.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, Cond.Appearing, Vec2(0.5f))
.beginMenu()
/endMenu()
or beginPopup()
/endPopup()
. (#3223, #1207) [@rokups]SourceNoPreviewTooltip
flags. (#3160) [@rokups]getGlyphRangesKorean()
end-range to end at 0xD7A3 (instead of 0xD79D). (#348, #3217) [@marukrap]addCircle()
with 12 segments would generate an extra unrequired vertex. [@ShironekoBen]glClipControl(GL_UPPER_LEFT)
by inverting the projection matrix top and bottom values. (#3143, #3146) [@u3shit]