From 33ab5a1d843fbd4ebdb741147d9707c5a976a0a5 Mon Sep 17 00:00:00 2001 From: 4DBug <4DBug@github.com> Date: Thu, 15 Oct 2026 03:03:10 -0500 Subject: [PATCH] Fix: InputTextMultiline crashed when drawn (InputTextLineIndexBuild/line offsets 0-based like upstream, inverted buf_display_end), InputText LiveEdit flag check; Shortcut()/IsKeyChordPressed() upstream defaults; FrameCount starts at 0 (IsWindowAppearing on first frame); missing ImGuiIO config fields with upstream defaults (+ ConfigDebugBeginReturnValueOnce/Loop); ColorButton drag source + ColorEdit4 drop target, IMGUI_PAYLOAD_TYPE_COLOR_3F/4F; t_fixes covers them --- .github/workflows/release.yml | 2 +- build/ImGui.linemap.json | 2 +- build/ImGui.luau | 230 ++++--- build/imgui_love.linemap.json | 2 +- build/imgui_love.lua | 230 ++++--- docs/PORT_STATUS.txt | 1102 +++++++++++++++---------------- imgui.lua | 50 +- imgui_demo.lua | 19 +- imgui_h.lua | 34 + imgui_internal.lua | 9 +- imgui_widgets.lua | 116 ++-- tools/test/check_all.sh | 2 +- tools/test/scripts/t_fixes.luau | 60 +- 13 files changed, 1068 insertions(+), 790 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 57127d0..759083e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -63,7 +63,7 @@ jobs: grep -q "CACHED OK" /tmp/c.txt MINIFY=1 python3 tools/test/run.py --main tools/test/scripts/t_readme.luau --frames 30 --quiet --roblox --timeout 300 | tee /tmp/rm.txt grep -q "README OK" /tmp/rm.txt - python3 tools/test/run.py --main tools/test/scripts/t_fixes.luau --frames 25 --quiet --roblox --timeout 300 | tee /tmp/f.txt + python3 tools/test/run.py --main tools/test/scripts/t_fixes.luau --frames 55 --quiet --roblox --timeout 300 | tee /tmp/f.txt grep -q "FIXES OK" /tmp/f.txt python3 tools/bundle.py --target love >/dev/null luajit tools/test/love/t_drawhash.lua 60 Widgets,Basic | tee /tmp/h.txt diff --git a/build/ImGui.linemap.json b/build/ImGui.linemap.json index df80c81..e6c0ae5 100644 --- a/build/ImGui.linemap.json +++ b/build/ImGui.linemap.json @@ -1 +1 @@ -[[46, "imgui.lua"], [21395, "imgui_demo.lua"], [31828, "imgui_draw.lua"], [37771, "imgui_h.lua"], [40464, "imgui_impl_roblox.lua"], [42112, "imgui_impl_roblox_fonts.lua"], [48515, "imgui_internal.lua"], [51984, "imgui_tables.lua"], [57043, "imgui_widgets.lua"], [67683, "imstb_rectpack.lua"], [68347, "imstb_textedit.lua"], [69889, "imstb_truetype.lua"], [72677, "imstd_minstdio.lua"]] \ No newline at end of file +[[46, "imgui.lua"], [21413, "imgui_demo.lua"], [31841, "imgui_draw.lua"], [37784, "imgui_h.lua"], [40511, "imgui_impl_roblox.lua"], [42159, "imgui_impl_roblox_fonts.lua"], [48562, "imgui_internal.lua"], [52034, "imgui_tables.lua"], [57093, "imgui_widgets.lua"], [67757, "imstb_rectpack.lua"], [68421, "imstb_textedit.lua"], [69963, "imstb_truetype.lua"], [72751, "imstd_minstdio.lua"]] \ No newline at end of file diff --git a/build/ImGui.luau b/build/ImGui.luau index edcbea0..f072ed4 100644 --- a/build/ImGui.luau +++ b/build/ImGui.luau @@ -1,7 +1,7 @@ --!optimize 2 -- GENERATED by tools/bundle.py from *.lua, backends/, fonts/ - do not edit -local ImGui, ImVec2, ImVec4, ImRect, HelpMarker, ImVec2_Copy, IMGUI_DEMO_MARKER, ImGuiTableFlags, ImStd, ImVector, ImGuiInputFlags, ImRect_Copy, ImGuiDataType, ImStb, IM_TRUNC, ImGuiKey, ImGuiStyleVarInfo, ImVec2_CopyV, IM_ASSERT_USER_ERROR, ImGuiHoveredFlags, ImFormatString, ImHashStr, ImS32, IM_ASSERT_USER_ERROR_RET, ImGuiColorEditFlags, ImDrawFlags, ImIsPowerOfTwo, ImVec4_Copy, ExampleAppConsoleMT, IM_ROUND, ImGuiTableColumnFlags, ImGuiTreeNodeFlags, PopStyleCompact, PushStyleCompact, ImU16, ImAbs, ImGuiWindowFlags, ImGuiItemFlags, ImGui_ImplRoblox_GetBackendData, stbte, ImGuiButtonFlags, ImGuiDebugLogFlags, ImGuiLocKey, ImU32, ImColor, ImCos, ImS16, ImGuiTabBarFlags, ImSin, ImUpperPowerOfTwo, ImVec2_MulVX, IM_F32_TO_INT8_SAT, ImCeil, ImFontAtlasPackGetRect, DockSettingsRenameNodeReferences, IM_ASSERT_PARANOID, ImGuiCol, ImGuiListClipper, ImLengthSqr, ImS8, ImU8, _PathArcToFastExXY, ExampleAppPropertyEditorMT, ImFabs, ImGuiChildFlags, ImGuiLastItemData_Copy, ImGuiScrollFlags, ImLog, ImMemchr, ImStrByte, IMGUI_DEBUG_LOG_VIEWPORT, ImGuiInputEvent, ImGuiTextBuffer, ImPow, CustomConstraints, ExampleAppLogMT, IMGUI_DEBUG_LOG_FONT, ImAddClampOverflow, ImFontAtlasBuildInit, ImFontCalcWordWrapPositionEx, ImGuiComboFlags, ImGuiLastItemData, ImGuiPayload_IsDataType, ImGuiPopupFlags, ImGuiSliderFlags, ImGuiTextFilter, ImRotate, ImSubClampOverflow, ImTextClassifierSetCharClass, ImVec2_AddVA, ImVec2_SubVA, MyDocument, ShowExampleMenuFile, CalcNextScrollFromScrollTargetAndClamp, IMGUI_PAYLOAD_TYPE_WINDOW, IMGUI_VERSION, ImCharIsSeparatorW, ImFmod, ImFontAtlasBakedAddFontGlyph, ImFontAtlasPackAddRect, ImFontBaked_BuildLoadGlyph, ImGuiInputTextFlags, ImGuiNavMoveFlags, ImGuiStyle_Copy, ImHashData, ImVec1_Copy, ExampleMemberInfo, ExampleTree_CreateNode, IM_F32_TO_INT8_UNBOUND, IM_PI, ImCharIsBlankA, ImCharIsBlankW, ImFontAtlasBuildRenderBitmapFromString, ImFontAtlasFontDestroyOutput, ImFontAtlasFontDiscardBakes, ImFontAtlasFontSourceAddToFont, ImFontAtlasFontSourceInit, ImFontAtlasRectId_GetIndex, ImFontAtlasTextureAdd, ImFontAtlasTextureBlockQueueUpload, ImFontAtlasTextureGrow, ImFontBaked_BuildGrowIndex, ImFontConfig, ImFontGlyph, ImGuiTableColumn, ImGuiWindowClass, ImGui_ImplRoblox_RenderDrawData, ImParseFormatFindStart, ImRect_CopyFromV4, ImTextureRect, ImTextureRef, ImTrunc64, MyItem_s_current_sort_specs, stb_textedit_key, stbtt_GetGlyphBitmapBoxSubpixel, DockSettingsHandler_ClearAll, EditTableSizingFlags, IMGUI_DEBUG_LOG_TABLE, IMGUI_PAYLOAD_TYPE_COLOR_4F, IM_FREE, ImDrawListSplitter, ImFontAtlasBakedDiscard, ImFontAtlasBuildDestroy, ImFontAtlasBuildNotifySetFont, ImFontAtlasBuildSetTexture, ImFontAtlasBuildSetupFontBakedFallback, ImFontAtlasFontDestroySourceData, ImFontAtlasPackInit, ImFontAtlasTextureBlockCopy, ImFontAtlasTextureGetSizeEstimate, ImFontAtlasUpdateDrawListsSharedData, ImFontBaked_BuildLoadGlyphAdvanceX, ImFontCalcTextSizeEx, ImFontCalcWordWrapPositionEx_Uncached, ImGuiDragDropFlags, ImGuiFocusScopeData, ImGuiFocusedFlags, ImGuiInputTextCallbackData, ImGuiSettingsHandler, ImGuiStyleMod +local ImGui, ImVec2, ImVec4, ImRect, HelpMarker, ImVec2_Copy, IMGUI_DEMO_MARKER, ImGuiTableFlags, ImStd, ImVector, ImGuiInputFlags, ImRect_Copy, ImGuiDataType, ImStb, IM_TRUNC, ImGuiKey, ImGuiStyleVarInfo, ImVec2_CopyV, IM_ASSERT_USER_ERROR, ImGuiHoveredFlags, ImFormatString, ImHashStr, ImS32, IM_ASSERT_USER_ERROR_RET, ImGuiColorEditFlags, ImDrawFlags, ImIsPowerOfTwo, ImVec4_Copy, ExampleAppConsoleMT, IM_ROUND, ImGuiTableColumnFlags, ImGuiTreeNodeFlags, PopStyleCompact, PushStyleCompact, ImU16, ImAbs, ImGuiWindowFlags, ImGuiItemFlags, ImGui_ImplRoblox_GetBackendData, stbte, ImGuiButtonFlags, ImGuiDebugLogFlags, ImGuiLocKey, ImU32, ImColor, ImCos, ImS16, ImGuiTabBarFlags, ImSin, ImUpperPowerOfTwo, ImVec2_MulVX, IM_F32_TO_INT8_SAT, ImFontAtlasPackGetRect, DockSettingsRenameNodeReferences, IM_ASSERT_PARANOID, ImCeil, ImGuiCol, ImGuiListClipper, ImLengthSqr, ImS8, ImU8, _PathArcToFastExXY, ExampleAppPropertyEditorMT, ImFabs, ImGuiChildFlags, ImGuiLastItemData_Copy, ImGuiScrollFlags, ImLog, ImMemchr, ImStrByte, IMGUI_DEBUG_LOG_VIEWPORT, ImGuiInputEvent, ImGuiTextBuffer, ImPow, CustomConstraints, ExampleAppLogMT, IMGUI_DEBUG_LOG_FONT, ImAddClampOverflow, ImFontAtlasBuildInit, ImFontCalcWordWrapPositionEx, ImGuiComboFlags, ImGuiLastItemData, ImGuiPayload_IsDataType, ImGuiPopupFlags, ImGuiSliderFlags, ImGuiTextFilter, ImRotate, ImSubClampOverflow, ImTextClassifierSetCharClass, ImVec2_AddVA, ImVec2_SubVA, MyDocument, ShowExampleMenuFile, CalcNextScrollFromScrollTargetAndClamp, IMGUI_PAYLOAD_TYPE_WINDOW, IMGUI_VERSION, ImCharIsSeparatorW, ImFmod, ImFontAtlasBakedAddFontGlyph, ImFontAtlasPackAddRect, ImFontBaked_BuildLoadGlyph, ImGuiInputTextFlags, ImGuiNavMoveFlags, ImGuiStyle_Copy, ImHashData, ImVec1_Copy, ExampleMemberInfo, ExampleTree_CreateNode, IMGUI_PAYLOAD_TYPE_COLOR_4F, IM_F32_TO_INT8_UNBOUND, IM_PI, ImCharIsBlankA, ImCharIsBlankW, ImFontAtlasBuildRenderBitmapFromString, ImFontAtlasFontDestroyOutput, ImFontAtlasFontDiscardBakes, ImFontAtlasFontSourceAddToFont, ImFontAtlasFontSourceInit, ImFontAtlasRectId_GetIndex, ImFontAtlasTextureAdd, ImFontAtlasTextureBlockQueueUpload, ImFontAtlasTextureGrow, ImFontBaked_BuildGrowIndex, ImFontConfig, ImFontGlyph, ImGuiTableColumn, ImGuiWindowClass, ImGui_ImplRoblox_RenderDrawData, ImParseFormatFindStart, ImRect_CopyFromV4, ImTextureRect, ImTextureRef, ImTrunc64, MyItem_s_current_sort_specs, stb_textedit_key, stbtt_GetGlyphBitmapBoxSubpixel, DockSettingsHandler_ClearAll, EditTableSizingFlags, IMGUI_DEBUG_LOG_TABLE, IMGUI_PAYLOAD_TYPE_COLOR_3F, IM_FREE, ImDrawListSplitter, ImFontAtlasBakedDiscard, ImFontAtlasBuildDestroy, ImFontAtlasBuildNotifySetFont, ImFontAtlasBuildSetTexture, ImFontAtlasBuildSetupFontBakedFallback, ImFontAtlasFontDestroySourceData, ImFontAtlasPackInit, ImFontAtlasTextureBlockCopy, ImFontAtlasTextureGetSizeEstimate, ImFontAtlasUpdateDrawListsSharedData, ImFontBaked_BuildLoadGlyphAdvanceX, ImFontCalcTextSizeEx, ImFontCalcWordWrapPositionEx_Uncached, ImGuiDragDropFlags, ImGuiFocusScopeData, ImGuiFocusedFlags, ImGuiInputTextCallbackData, ImGuiSettingsHandler local type, mathMin, mathMax, mathFloor, mathCeil, bitOr, bitLShift = type, math.min, math.max, math.floor, math.ceil, bit32.bor, bit32.lshift local function IM_COL32(R, G, B, A) return (bitOr(bitLShift(A, 24 --[[IM_COL32_A_SHIFT]]), bitLShift(B, 16 --[[IM_COL32_B_SHIFT]]), bitLShift(G, 8 --[[IM_COL32_G_SHIFT]]), bitLShift(R, 0 --[[IM_COL32_R_SHIFT]]))) end @native @@ -9527,10 +9527,13 @@ function ImGui.SetItemKeyOwner(key, flags) end -- This is equivalent to comparing KeyMods + doing a IsKeyPressed() +-- [Port] public overload IsKeyChordPressed(key_chord) == IsKeyChordPressed(key_chord, ImGuiInputFlags_None, ImGuiKeyOwner_Any) --- @param key_chord ImGuiKeyChord ---- @param flags ImGuiInputFlags ---- @param owner_id ImGuiID +--- @param flags? ImGuiInputFlags +--- @param owner_id? ImGuiID function ImGui.IsKeyChordPressed(key_chord, flags, owner_id) + if flags == nil then flags = 0 --[[ImGuiInputFlags.None]] end + if owner_id == nil then owner_id = 0 --[[ImGuiKeyOwner_Any]] end local g = GImGui key_chord = ImGui.FixupKeyChord(key_chord) local mods = bit32.band(key_chord, 61440 --[[ImGuiMod_Mask_]]) @@ -9560,10 +9563,13 @@ function ImGui.SetNextItemShortcut(key_chord, flags) g.NextItemData.ShortcutFlags = flags end +-- [Port] public overload Shortcut(key_chord, flags = 0) == Shortcut(key_chord, flags, ImGuiKeyOwner_Any) --- @param key_chord ImGuiKeyChord ---- @param flags ImGuiInputFlags ---- @param owner_id ImGuiID +--- @param flags? ImGuiInputFlags +--- @param owner_id? ImGuiID function ImGui.Shortcut(key_chord, flags, owner_id) + if flags == nil then flags = 0 end + if owner_id == nil then owner_id = 0 --[[ImGuiKeyOwner_Any]] end local g = GImGui -- IMGUI_DEBUG_LOG("Shortcut(%s, flags=%X, owner_id=0x%08X)\n", ImGui.GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), flags, owner_id) @@ -12790,6 +12796,17 @@ function ImGui.Begin(name, open, flags) end if open == nil then open = true end + + -- [DEBUG] io.ConfigDebugBeginReturnValue override return value to test Begin/End and BeginChild/EndChild behaviors. + -- (The implicit fallback window is NOT automatically ended allowing it to always be able to receive commands without crashing) + if not window.IsFallbackWindow then + if (g.IO.ConfigDebugBeginReturnValueOnce and window_just_created) or (g.IO.ConfigDebugBeginReturnValueLoop and g.DebugBeginReturnValueCullDepth == g.CurrentWindowStack.Size) then + if window.AutoFitFramesX > 0 then window.AutoFitFramesX = window.AutoFitFramesX + 1 end + if window.AutoFitFramesY > 0 then window.AutoFitFramesY = window.AutoFitFramesY + 1 end + return open, false + end + end + return open, not window.SkipItems end @@ -14075,6 +14092,14 @@ function ImGui.NewFrame() g.ErrorCountCurrentFrame = 0 g.StackSizesInNewFrame = g.StackSizesInNewFrame or ImGuiErrorRecoveryState() ImGui.ErrorRecoveryStoreState(g.StackSizesInNewFrame) + + -- [DEBUG] When io.ConfigDebugBeginReturnValue is set, we make Begin()/BeginChild() return false at different level of the window-stack, + -- allowing to validate correct Begin/End behavior in user code. + if g.IO.ConfigDebugBeginReturnValueLoop then + g.DebugBeginReturnValueCullDepth = (g.DebugBeginReturnValueCullDepth == -1) and 0 or ((g.DebugBeginReturnValueCullDepth + (((g.FrameCount % 4) == 0) and 1 or 0)) % 10) + else + g.DebugBeginReturnValueCullDepth = -1 + end end -- This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. @@ -14495,9 +14520,10 @@ end --- @param pos ImVec2 --- @param items_height float function ImGui.CalcClipRectVisibleItemsY(clip_rect, pos, items_height) - local visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) - local visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), visible_start) - return visible_start + 1, visible_end + 1 + -- [Port] returns (out_visible_start, out_visible_end), 0-based like upstream + local out_visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) + local out_visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), out_visible_start) + return out_visible_start, out_visible_end end ------------------------------------------------------------------------------- @@ -19787,14 +19813,6 @@ function MT.ImGuiListClipper:Step() return ret end --- Generic helper, equivalent to old ImGui.CalcListClipping() but stateless --- Returns (out_visible_start, out_visible_end) -function ImGui.CalcClipRectVisibleItemsY(clip_rect, pos, items_height) - local out_visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) - local out_visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), out_visible_start) - return out_visible_start, out_visible_end -end - ------------------------------------------------------------------------------- -- [SECTION] ERROR CHECKING, STATE RECOVERY ------------------------------------------------------------------------------- @@ -21109,7 +21127,7 @@ function ImGui.ShowMetricsWindow(p_open) _, g.DebugShowGroupRects = ImGui.Checkbox("Show groups rectangles", g.DebugShowGroupRects == true) -- Storing in context as this is used by group code and prefers to be in hot-data ImGui.SeparatorText("Validate") - _, io.ConfigDebugBeginReturnValueLoop = ImGui.Checkbox("Debug Begin/BeginChild return value", io.ConfigDebugBeginReturnValueLoop == true) + _, io.ConfigDebugBeginReturnValueLoop = ImGui.Checkbox("Debug Begin/BeginChild return value", io.ConfigDebugBeginReturnValueLoop) ImGui.SameLine(); MetricsHelpMarker("Some calls to Begin()/BeginChild() will return false.\n\nWill cycle through window depths then repeat. Windows should be flickering while running.") _, cfg.ShowTextEncodingViewer = ImGui.Checkbox("UTF-8 Encoding viewer", cfg.ShowTextEncodingViewer == true) ImGui.SameLine(); MetricsHelpMarker("You can also call ImGui::DebugTextEncoding() from your code with a given string to test that your UTF-8 encoding settings are correct.") @@ -22582,10 +22600,6 @@ end -- [SECTION] DemoWindowWidgetsColorAndPickers() ------------------------------------------------------------------------------- --- [Port] the library does not define the standard color payload types (ColorButton drag source is not ported yet) -IMGUI_PAYLOAD_TYPE_COLOR_3F = IMGUI_PAYLOAD_TYPE_COLOR_3F or "_COL3F" -IMGUI_PAYLOAD_TYPE_COLOR_4F = IMGUI_PAYLOAD_TYPE_COLOR_4F or "_COL4F" - S.DemoWindowWidgetsColorAndPickers = { color = ImVec4(114.0 / 255.0, 144.0 / 255.0, 154.0 / 255.0, 200.0 / 255.0), base_flags = ImGuiColorEditFlags.None, @@ -22695,7 +22709,7 @@ function DemoWindowWidgetsColorAndPickers() if ImGui.BeginDragDropTarget() then local payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F) if payload then - local d = payload.Data -- [Port] memcpy -> copy components (Data is a 1-based float array or ImVec4) + local d = payload.Data -- [Port] memcpy -> copy components (Data is a 1-based float array) saved_palette[n + 1].x, saved_palette[n + 1].y, saved_palette[n + 1].z = d[1], d[2], d[3] end payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F) @@ -28709,9 +28723,8 @@ function DemoWindowInputs() local line_height = ImGui.GetTextLineHeightWithSpacing() local key_chord = bit32.bor(4096 --[[ImGuiMod_Ctrl]], 546 --[[ImGuiKey.A]]) - -- [Port] ImGui.Shortcut() has no owner_id default (upstream public overload passes ImGuiKeyOwner_Any): pass it explicitly. ImGui.Text("Ctrl+A") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") ImGui.PushStyleColor(3 --[[ImGuiCol.ChildBg]], ImVec4(1.0, 0.0, 1.0, 0.1)) @@ -28721,7 +28734,7 @@ function DemoWindowInputs() -- 1: Window polling for Ctrl+A ImGui.Text("(in WindowA)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") -- 2: InputText also polling for Ctrl+A: it always uses _RouteFocused internally (gets priority when active) -- (Commented because the owner-aware version of Shortcut() is still in imgui_internal.h) @@ -28741,7 +28754,7 @@ function DemoWindowInputs() -- 4: Child window polling for Ctrl+A. It is deeper than WindowA and gets priority when focused. ImGui.BeginChild("ChildE", ImVec2(-1.1754943508223e-38 --[[FLT_MIN]], line_height * 4), true) ImGui.Text("(in ChildE: using same Shortcut)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") ImGui.EndChild() -- 5: In a popup @@ -28750,7 +28763,7 @@ function DemoWindowInputs() end if ImGui.BeginPopup("PopupF") then ImGui.Text("(in PopupF)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") -- (Commented because the owner-aware version of Shortcut() is still in imgui_internal.h) --ImGui.InputText("InputTextG", str, IM_COUNTOF(str), ImGuiInputTextFlags.ReadOnly); --ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused(), ImGui.Shortcut(key_chord, flags, ImGui.GetItemID()) ? "PRESSED" : "..."); @@ -29129,7 +29142,7 @@ function ImGui.ShowStyleEditor(ref) end ImGui.SameLine(0.0, 0.0); ImGui.Text(" (out %.2f)", ImGui.GetFontSize()) style.FontScaleMain = ImGui.DragFloat("FontScaleMain", style.FontScaleMain, 0.02, 0.5, 4.0) - ImGui.BeginDisabled(ImGui.GetIO().ConfigDpiScaleFonts == true) -- [Port] field is nil in the port's ImGuiIO (nil would mean "disabled") + ImGui.BeginDisabled(ImGui.GetIO().ConfigDpiScaleFonts) style.FontScaleDpi = ImGui.DragFloat("FontScaleDpi", style.FontScaleDpi, 0.02, 0.5, 4.0) ImGui.SetItemTooltip("When io.ConfigDpiScaleFonts is set, this value is automatically overwritten.") ImGui.EndDisabled() @@ -29381,7 +29394,7 @@ function ImGui.ShowStyleEditor(ref) _, style.AntiAliasedFill = ImGui.Checkbox("Anti-aliased fill", style.AntiAliasedFill) local io = ImGui.GetIO() - _, io.ConfigDebugDrawListDefaultsToStrokeLegacy = ImGui.Checkbox("Debug: DrawList Defaults to _StrokeLegacy", io.ConfigDebugDrawListDefaultsToStrokeLegacy == true) -- [Port] field not declared in the port's ImGuiIO + _, io.ConfigDebugDrawListDefaultsToStrokeLegacy = ImGui.Checkbox("Debug: DrawList Defaults to _StrokeLegacy", io.ConfigDebugDrawListDefaultsToStrokeLegacy) ImGui.PushItemWidth(ImGui.GetFontSize() * 8) -- [Port] the library still stores the older style.CurveTessellationTol (== MaxError * MaxError) instead of style.CurveTessellationMaxError @@ -38968,6 +38981,9 @@ function ImGuiIO() DisplayFramebufferScale = ImVec2(1.0, 1.0), -- = (1, 1) -- Main display density. For retina display where window coordinates are different from framebuffer coordinates. This will affect font density + will end up in ImDrawData::FramebufferScale. + -- Font system + FontAllowUserScaling = false, -- = false -- Allow user scaling text of individual window with Ctrl+Wheel. + -- Main Input State -- (this block used to be written by backend, since 1.87 it is best to NOT write to those directly, call the AddXXX functions above instead) -- (reading from those variables is fair game, as they are extremely unlikely to be moving anywhere) @@ -38999,6 +39015,25 @@ function ImGuiIO() ConfigDebugIniSettings = false, -- = false -- Save .ini data with extra comments (particularly helpful for Docking, but makes saving slower) ConfigWindowsCopyContentsWithCtrlC = false, -- = false -- [EXPERIMENTAL] Ctrl+C copy the contents of focused window into the clipboard. Experimental because: (1) has known issues with nested Begin/End pairs (2) text output quality varies (3) text output is in submission order rather than spatial order. ConfigWindowsMoveFromTitleBarOnly = false, -- = false -- Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar. + ConfigScrollbarScrollByPage = true, -- = true -- Enable scrolling page by page when clicking outside the scrollbar grab. When disabled, always scroll to clicked location. When enabled, Shift+Click scrolls to clicked location. + ConfigInputTextCursorBlink = true, -- = true -- Enable blinking cursor (optional as some users consider it to be distracting). + ConfigInputTextEnterKeepActive = false, -- = false -- [BETA] Pressing Enter will reactivate item and select all text (single-line only). Ctrl+Enter or Shift+Enter will deactivate normally. + ConfigDragClickToInputText = false, -- = false -- [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard. + + -- Keyboard/Gamepad Navigation options + ConfigNavSwapGamepadButtons = false, -- = false -- Swap Activate<>Cancel (A<>B) buttons, matching typical "Nintendo/Japanese style" gamepad layout. + ConfigNavMoveSetMousePos = false, -- = false -- Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult. Will update io.MousePos and set io.WantSetMousePos=true. + ConfigNavCaptureKeyboard = true, -- = true -- Sets io.WantCaptureKeyboard when io.NavActive is set. + ConfigNavEscapeClearFocusItem = true, -- = true -- Pressing Escape can clear focused item + navigation id/highlight. Set to false if you want to always keep highlight on. + ConfigNavEscapeClearFocusWindow = false, -- = false -- Pressing Escape can clear focused window as well (super set of io.ConfigNavEscapeClearFocusItem). + + -- DPI/Scaling options + ConfigDpiScaleFonts = false, -- = false -- [EXPERIMENTAL] Automatically overwrite style.FontScaleDpi when Monitor DPI changes. This will scale fonts but _NOT_ scale sizes/padding for now. + ConfigDpiScaleViewports = false, -- = false -- [EXPERIMENTAL] Scale Dear ImGui and Platform Windows when Monitor DPI changes. + + -- Ini Settings options + ConfigIniSettingsSaveLastUsedDate = true, -- = true -- Enable loading/saving last used day (YYYYMMDD) in some .ini struct, making things easier to audit and allowing custom tools to cleanup old data. + ConfigIniSettingsAutoDiscardMonths = 0, -- = 0 -- [BETA] Set number of months after which unused .ini entries are discarded on load. Require platform_io.Platform_SessionDate to be set. For systems supporting the feature, .ini entries without a LastUsed field will always be discarded! Please report if you are using this. -- Options to configure Error Handling and how we handle recoverable errors [EXPERIMENTAL] -- - Error recovery is provided as a way to facilitate: -- - Recovery after a programming error (native code or scripting language - the latter tends to facilitate iterating on code while running). @@ -39023,6 +39058,14 @@ function ImGuiIO() -- - See FAQ https://github.com/ocornut/imgui/blob/master/docs/FAQ.md#q-about-the-id-stack-system ConfigDebugHighlightIdConflicts = false, -- Highlight and show an error message popup when multiple items have conflicting identifiers. ConfigDebugHighlightIdConflictsShowItemPicker = true, -- =true -- Show "Item Picker" button in aforementioned popup. + ConfigDebugIsDebuggerPresent = false, -- = false -- Enable various tools calling IM_DEBUG_BREAK(). + -- Tools to test correct Begin/End and BeginChild/EndChild behaviors. + ConfigDebugBeginReturnValueOnce = false, -- = false -- First-time calls to Begin()/BeginChild() will return false. NEEDS TO BE SET AT APPLICATION BOOT TIME if you don't want to miss windows. + ConfigDebugBeginReturnValueLoop = false, -- = false -- Some calls to Begin()/BeginChild() will return false. Will cycle through window depths then repeat. Suggested use: add "io.ConfigDebugBeginReturnValue = io.KeyShift" in your main loop then occasionally press SHIFT. Windows should be flickering while running. + -- Option to deactivate io.AddFocusEvent(false) handling. + ConfigDebugIgnoreFocusLoss = false, -- = false -- Ignore io.AddFocusEvent(false), consequently not calling io.ClearInputKeys()/io.ClearInputMouse() in input processing. + -- Option to default all ImDrawList to ImDrawListFlags_StrokeLegacy mode. + ConfigDebugDrawListDefaultsToStrokeLegacy = false, -- false -- Default all ImDrawList to ImDrawList_StrokeLegacy mode, mimicking pre-1.93.0 rendering. [Port] the 1.93 stroke rendering is not ported yet: no effect. IniFilename = "imgui.ini", -- Roblox: no disk access, only used as a flag (nil disables .ini handling) IniSavingRate = 5.0, -- = 5.0f -- Minimum time between saving positions/sizes to .ini file, in seconds. @@ -39889,6 +39932,10 @@ ImGuiDragDropFlags = { ImGuiDragDropFlags.AcceptPeekOnly = bitOr(ImGuiDragDropFlags.AcceptBeforeDelivery, ImGuiDragDropFlags.AcceptNoDrawDefaultRect) -- For peeking ahead and inspecting the payload before delivery. +-- Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui. +IMGUI_PAYLOAD_TYPE_COLOR_3F = "_COL3F" -- float[3]: Standard type for colors, without alpha. User code may use this type. [Port] payload.Data = { r, g, b } (1-based) +IMGUI_PAYLOAD_TYPE_COLOR_4F = "_COL4F" -- float[4]: Standard type for colors. User code may use this type. [Port] payload.Data = { r, g, b, a } (1-based) + -- Helpers macros to generate 32-bit encoded colors IM_COL32_R_SHIFT = 0 IM_COL32_G_SHIFT = 8 @@ -50271,12 +50318,14 @@ IMGUI_TEXT_INDEX.__index = IMGUI_TEXT_INDEX function IMGUI_TEXT_INDEX:clear() self.Offsets:clear(); self.EndOffset = 0; end +function IMGUI_TEXT_INDEX:size() return self.Offsets.Size end +-- [Port] 'n' is a 0-based line number like upstream (Offsets.Data is 1-based), 'base' the 1-based position of the buffer start; returns 1-based positions function IMGUI_TEXT_INDEX:get_line_begin(base, n) - return base + (self.Offsets.Size ~= 0 and self.Offsets[n] or 0) + return base + (self.Offsets.Size ~= 0 and self.Offsets.Data[n + 1] or 0) end function IMGUI_TEXT_INDEX:get_line_end(base, n) - return base + ((n + 1 < self.Offsets.Size) and (self.Offsets[n + 1] - 1) or self.EndOffset) + return base + ((n + 1 < self.Offsets.Size) and (self.Offsets.Data[n + 2] - 1) or self.EndOffset) end --- @return ImGuiTextIndex @@ -50680,7 +50729,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct NavActivateId = 0, NavActivateDownId = 0, NavActivatePressedId = 0, -- ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey.Space) || IsKeyDown(ImGuiKey.Enter) || IsKeyPressed(ImGuiKey.NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItemByID() NavActivateFlags = 0 --[[ImGuiActivateFlags.None]], - FrameCount = -1, + FrameCount = 0, FrameCountEnded = -1, FrameCountPlatformEnded = -1, @@ -50853,6 +50902,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct DebugLogFlags = bitOr(1 --[[ImGuiDebugLogFlags.EventError]], 1048576 --[[ImGuiDebugLogFlags.OutputToTTY]]), DebugFlashStyleColorIdx = nil, + DebugBeginReturnValueCullDepth = -1, -- Cycle between 0..9 then wrap around. DebugMetricsConfig = ImGuiMetricsConfig(), DebugHookIdInfoId = 0, -- Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool @@ -62151,34 +62201,37 @@ end --- @param flags ImGuiInputTextFlags --- @param line_index ImGuiTextIndex --- @param buf char[] ---- @param buf_end int +--- @param buf_end? int # nil: inactive multi-line path, end found with strchr() --- @param wrap_width float --- @param max_output_buffer_size int +--- @param want_out_buf_end boolean --- @return int size ---- @return int? out_buf_end -local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_width, max_output_buffer_size) +--- @return int? out_buf_end # [Port] 'const char** out_buf_end' output parameter becomes a 2nd return value (nil when not requested) +local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_width, max_output_buffer_size, want_out_buf_end) local g = GImGui local size = 0 - local s = 1 + local s local trailing_line_already_counted = false + -- [Port] 's' is a 1-based position in 'buf' (C++ s == buf + (s - 1)), Offsets store 0-based offsets like upstream. if bit32.band(flags, 16777216 --[[ImGuiInputTextFlags.WordWrap]]) ~= 0 then + s = 1 while s < buf_end do if size <= max_output_buffer_size then line_index.Offsets:push_back(s - 1) end size = size + 1 s = ImFontCalcWordWrapPositionEx(g.Font, g.FontSize, buf, s, buf_end, wrap_width, 2 --[[ImDrawTextFlags.WrapKeepBlanks]]) - if buf[s] == 10 then s = s + 1 end end elseif buf_end ~= nil then + s = 1 while s < buf_end do if size <= max_output_buffer_size then line_index.Offsets:push_back(s - 1) end size = size + 1 - s = ImMemchr(buf, 10, s) --[[@as int]] -- FIXME: - + s = ImMemchr(buf, 10, s) + if s ~= nil and s >= buf_end then s = nil end -- [Port] ImMemchr() stops at the zero-terminator, not at buf_end if s then s = s + 1 else s = buf_end end end else @@ -62190,20 +62243,17 @@ local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_wid line_index.Offsets:push_back(s - 1) end size = size + 1 - s_eol = ImMemchr(buf, 10, s) if s_eol == nil then - s = s + ImStd.ImStrlen(buf) - s -- FIXME: + s = s + ImStd.ImStrlen(buf, s) trailing_line_already_counted = true break end - s = s_eol + 1 end end - - local out_buf_end - if out_buf_end ~= nil then + local out_buf_end = nil + if want_out_buf_end then out_buf_end = s buf_end = s end @@ -62211,11 +62261,11 @@ local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_wid line_index.Offsets:push_back(0) size = size + 1 end - if s > 1 and buf[s - 1] == 10 and not trailing_line_already_counted then + if buf_end > 1 and buf[buf_end - 1] == 10 and not trailing_line_already_counted then local old_size = size size = size + 1 if old_size <= max_output_buffer_size then - line_index.Offsets:push_back(s - 1) + line_index.Offsets:push_back(buf_end - 1) end end return size, out_buf_end @@ -62254,24 +62304,24 @@ end --- @param cursor_n int --- @return ImVec2 local function InputTextLineIndexGetPosOffset(g, state, line_index, buf, buf_end, cursor_n) + -- [Port] 'cursor_n' is a 1-based position (Stb.cursor) == C++ cursor_ptr; Offsets hold 0-based offsets, compare with cursor_n - 1. local cursor_ptr = cursor_n - - local it = ImLowerBound(line_index.Offsets, 1, line_index.Offsets.Size + 1, cursor_ptr) - - if it > 1 then - if it > line_index.Offsets.Size or line_index.Offsets[it] ~= cursor_ptr or (state ~= nil and state.WrapWidth > 0.0 and state.LastMoveDirectionLR == 1 --[[ImGuiDir.Right]] and - buf[cursor_ptr - 1] ~= 10 and buf[cursor_ptr - 1] ~= 0) then + local cursor_off = cursor_n - 1 + local offsets = line_index.Offsets + local it_begin = 1 + local it_end = offsets.Size + 1 + local it = ImLowerBound(offsets.Data, it_begin, it_end, cursor_off) + if it > it_begin then + if it == it_end or offsets.Data[it] ~= cursor_off or (state ~= nil and state.WrapWidth > 0.0 and state.LastMoveDirectionLR == 1 --[[ImGuiDir.Right]] and buf[cursor_ptr - 1] ~= 10 and buf[cursor_ptr - 1] ~= 0) then it = it - 1 end end - local line_no = it - local line_start = (line_no == 1) and 1 or line_index.Offsets[line_no] + 1 - + local line_no = (it == it_begin) and 0 or (it - 1) -- 0-based (index_from_ptr) + local line_start = line_index:get_line_begin(1, line_no) local offset = ImVec2() offset.x = InputTextCalcTextSize(g, buf, line_start, cursor_ptr, buf_end, nil, 2 --[[ImDrawTextFlags.WrapKeepBlanks]]).x - offset.y = line_no * g.FontSize - + offset.y = (line_no + 1) * g.FontSize return offset end @@ -63002,7 +63052,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- Write back result string if modified. -- FIXME-OPT: Could mark dirty state from the stb_textedit callbacks if not is_readonly then - if bit32.band(g.LastItemData.ItemFlags, 256 --[[ImGuiItemFlags.LiveEditOnInputScalar]]) ~= 0 then + if bit32.band(g.LastItemData.ItemFlags, 128 --[[ImGuiItemFlags.LiveEditOnInputText]]) ~= 0 then -- Apply when modified if (ImStd.strcmp(state.TextSrc, buf) ~= 0) then apply_new_text = state.TextSrc @@ -63121,7 +63171,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback end -- Calculate visibility - local line_visible_n0, line_visible_n1 = 1, 2 + local line_visible_n0, line_visible_n1 = 0, 1 -- 0-based like upstream if is_multiline then line_visible_n0, line_visible_n1 = ImGui.CalcClipRectVisibleItemsY(clip_rect, draw_pos, g.FontSize) end @@ -63134,15 +63184,15 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- If scrolling is expected to change build full index. -- FIXME-OPT: Could append to index when new value of line_visible_n1 becomes bigger, see second call to CalcClipRectVisibleItemsY() below. local will_scroll_y = state and ((state.CursorFollow and render_cursor) or (state.CursorCenterY and (render_cursor or render_selection))) - --- @cast buf_display_end int local out_buf_end - line_count, out_buf_end = InputTextLineIndexBuild(flags, line_index, buf_display, buf_display_end, wrap_width, will_scroll_y and 2147483647 --[[INT_MAX]] or (line_visible_n1 + 1)) - if buf_display_end then + line_count, out_buf_end = InputTextLineIndexBuild(flags, line_index, buf_display, buf_display_end, wrap_width, will_scroll_y and 2147483647 --[[INT_MAX]] or (line_visible_n1 + 1), buf_display_end == nil) + if buf_display_end == nil then buf_display_end = out_buf_end end end + --- @cast buf_display_end int line_index.EndOffset = buf_display_end - 1 - line_visible_n1 = ImMin(line_visible_n1, line_count + 1) + line_visible_n1 = ImMin(line_visible_n1, line_count) -- Store text height (we don't need width) local text_size_y = line_count * g.FontSize @@ -63243,7 +63293,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback local rect = ImRect() rect.Min.x = draw_pos.x - draw_scroll.x + ImGui.CalcTextSizeEx(buf_display, p, line_selected_begin).x - rect.Min.y = draw_pos.y - draw_scroll.y + (line_n - 1) * g.FontSize + rect.Min.y = draw_pos.y - draw_scroll.y + line_n * g.FontSize rect.Max.x = rect.Min.x + rect_width rect.Max.y = rect.Min.y + bg_offy_dn + g.FontSize rect.Min.y = rect.Min.y + bg_offy_up @@ -63264,7 +63314,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- Render text if (is_multiline or (buf_display_end - 1) < buf_display_max_length) and bit32.band(text_col, 4278190080 --[[IM_COL32_A_MASK]]) ~= 0 and line_visible_n0 < line_visible_n1 then g.Font:RenderText(draw_window.DrawList, g.FontSize, - draw_pos - draw_scroll + ImVec2(0.0, (line_visible_n0 - 1) * g.FontSize), + draw_pos - draw_scroll + ImVec2(0.0, line_visible_n0 * g.FontSize), text_col, clip_rect:AsVec4(), buf_display, line_index:get_line_begin(1, line_visible_n0), @@ -63682,7 +63732,28 @@ function ImGui.ColorEdit4(label, col, flags) ImGui.EndGroup() -- Drag and Drop Target - -- TODO: + -- NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test. + if bit32.band(g.LastItemData.StatusFlags, 1 --[[ImGuiItemStatusFlags.HoveredRect]]) ~= 0 and bit32.band(g.LastItemData.ItemFlags, 2048 --[[ImGuiItemFlags.ReadOnly]]) == 0 and bit32.band(flags, 512 --[[ImGuiColorEditFlags.NoDragDrop]]) == 0 and ImGui.BeginDragDropTarget() then + local accepted_drag_drop = false + local payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F) + if payload then + local d = payload.Data + col[1], col[2], col[3] = d[1], d[2], d[3] -- Preserve alpha if any + value_changed = true; accepted_drag_drop = true + end + payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F) + if payload then + local d = payload.Data + for i = 1, components do col[i] = d[i] end + value_changed = true; accepted_drag_drop = true + end + + -- Drag-drop payloads are always RGB + if accepted_drag_drop and bit32.band(flags, 536870912 --[[ImGuiColorEditFlags.InputHSV]]) ~= 0 then + col[1], col[2], col[3] = ImGui.ColorConvertRGBtoHSV(col[1], col[2], col[3]) + end + ImGui.EndDragDropTarget() + end -- When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4(). if picker_active_window and g.ActiveId ~= 0 and g.ActiveIdWindow == picker_active_window then @@ -64251,17 +64322,20 @@ function ImGui.ColorButton(desc_id, col, flags, size_arg) -- Drag and Drop Source -- NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test. - -- if g.ActiveId == id and bit32.band(flags, ImGuiColorEditFlags.NoDragDrop) == 0 and ImGui.BeginDragDropSource() then - -- if bit32.band(flags, ImGuiColorEditFlags.NoAlpha) ~= 0 then - -- ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, col_rgb, ImGuiCond.Once) - -- else - -- ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, col_rgb, ImGuiCond.Once) - -- end - -- ImGui.ColorButton(desc_id, col, flags) - -- ImGui.SameLine() - -- ImGui.TextEx("Color") - -- ImGui.EndDragDropSource() - -- end + -- [Port] payload.Data is a 1-based float array copy { r, g, b [, a] } (C++ memcpy of float[3]/float[4]) + if g.ActiveId == id and bit32.band(flags, 512 --[[ImGuiColorEditFlags.NoDragDrop]]) == 0 and ImGui.BeginDragDropSource() then + if bit32.band(flags, 2 --[[ImGuiColorEditFlags.NoAlpha]]) ~= 0 then + ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, { col_rgb.x, col_rgb.y, col_rgb.z }, 3, 2 --[[ImGuiCond.Once]]) + else + ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, { col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.w }, 4, 2 --[[ImGuiCond.Once]]) + end + ImGui.PushItemFlag(4096 --[[ImGuiItemFlags.MixedValue]], false) + ImGui.ColorButton(desc_id, col, flags) + ImGui.PopItemFlag() + ImGui.SameLine() + ImGui.TextEx("Color") + ImGui.EndDragDropSource() + end -- Tooltip if bit32.band(flags, 64 --[[ImGuiColorEditFlags.NoTooltip]]) == 0 and hovered and ImGui.IsItemHovered(4096 --[[ImGuiHoveredFlags.ForTooltip]]) then diff --git a/build/imgui_love.linemap.json b/build/imgui_love.linemap.json index 4522254..c02da20 100644 --- a/build/imgui_love.linemap.json +++ b/build/imgui_love.linemap.json @@ -1 +1 @@ -[[183, "imgui.lua"], [21532, "imgui_demo.lua"], [31965, "imgui_draw.lua"], [37908, "imgui_h.lua"], [40601, "imgui_impl_love.lua"], [41141, "imgui_internal.lua"], [44610, "imgui_tables.lua"], [49669, "imgui_widgets.lua"], [60309, "imstb_rectpack.lua"], [60973, "imstb_textedit.lua"], [62515, "imstb_truetype.lua"], [65303, "imstd_minstdio.lua"]] \ No newline at end of file +[[183, "imgui.lua"], [21550, "imgui_demo.lua"], [31978, "imgui_draw.lua"], [37921, "imgui_h.lua"], [40648, "imgui_impl_love.lua"], [41188, "imgui_internal.lua"], [44660, "imgui_tables.lua"], [49719, "imgui_widgets.lua"], [60383, "imstb_rectpack.lua"], [61047, "imstb_textedit.lua"], [62589, "imstb_truetype.lua"], [65377, "imstd_minstdio.lua"]] \ No newline at end of file diff --git a/build/imgui_love.lua b/build/imgui_love.lua index b500f3f..d30dbdd 100644 --- a/build/imgui_love.lua +++ b/build/imgui_love.lua @@ -138,7 +138,7 @@ if not utf8 then end -local ImGui, ImVec2, ImVec4, ImRect, HelpMarker, ImVec2_Copy, IMGUI_DEMO_MARKER, ImGuiTableFlags, ImStd, ImVector, ImGuiKey, ImGuiInputFlags, ImRect_Copy, ImGuiDataType, ImStb, IM_TRUNC, ImGuiStyleVarInfo, ImVec2_CopyV, IM_ASSERT_USER_ERROR, ImGuiHoveredFlags, ImFormatString, ImHashStr, ImS32, IM_ASSERT_USER_ERROR_RET, ImGuiColorEditFlags, ImDrawFlags, ImIsPowerOfTwo, ImVec4_Copy, ExampleAppConsoleMT, IM_ROUND, ImGuiTableColumnFlags, ImGuiTreeNodeFlags, PopStyleCompact, PushStyleCompact, ImU16, ImAbs, ImGuiWindowFlags, ImGuiItemFlags, stbte, ImGuiButtonFlags, ImGuiDebugLogFlags, ImGuiLocKey, ImU32, ImColor, ImCos, ImS16, ImGuiTabBarFlags, ImSin, ImUpperPowerOfTwo, ImVec2_MulVX, IM_F32_TO_INT8_SAT, ImCeil, ImFontAtlasPackGetRect, ImGuiMouseCursor, DockSettingsRenameNodeReferences, IM_ASSERT_PARANOID, ImGuiCol, ImGuiListClipper, ImLengthSqr, ImS8, ImU8, _PathArcToFastExXY, ExampleAppPropertyEditorMT, ImFabs, ImGuiScrollFlags, ImGui_ImplLOVE_GetBackendData, ImLog, ImPow, CustomConstraints, ExampleAppLogMT, IMGUI_DEBUG_LOG_FONT, ImFontAtlasBuildInit, ImFontCalcWordWrapPositionEx, ImGuiComboFlags, ImGuiPopupFlags, ImGuiSliderFlags, ImTextClassifierSetCharClass, ImVec2_AddVA, ImVec2_SubVA, MyDocument, ShowExampleMenuFile, ImFontAtlasBakedAddFontGlyph, ImFontAtlasPackAddRect, ImFontBaked_BuildLoadGlyph, ImGuiInputTextFlags, ImGuiStyle_Copy, ExampleMemberInfo, ExampleTree_CreateNode, ImFontAtlasBuildRenderBitmapFromString, ImFontAtlasFontDestroyOutput, ImFontAtlasFontSourceAddToFont, ImFontAtlasFontSourceInit, ImGuiTableColumn, MyItem_s_current_sort_specs, stb_textedit_key, stbtt_GetGlyphBitmapBoxSubpixel, EditTableSizingFlags, IMGUI_PAYLOAD_TYPE_COLOR_4F, IM_FREE, ImDrawListSplitter, ImGuiDragDropFlags, MyItemColumnID_ID, MyItemColumnID_Name, MyItemColumnID_Quantity, stb_text_locate_coord, stb_text_makeundo_insert, stb_text_makeundo_replace, stb_textedit_find_charpos, stbtt_GetGlyphShape, EditTabBarFittingPolicyFlags, ImGuiTableColumnSortSpecs, ImGuiTableInstanceData, ImGuiTableSettings, stb_text_makeundo_delete, stb_text_redo, stb_text_undo, stb_textedit_click, stb_textedit_drag, stbtt_FindGlyphIndex, stbtt_GetFontOffsetForIndex, stbtt_GetFontVMetrics, stbtt_GetGlyphBitmapBox, stbtt_GetGlyphHMetrics, stbtt_InitFont, stbtt_MakeGlyphBitmapSubpixelPrefilter, stbtt_ScaleForPixelHeight, stbtt__GetGlyphInfoT2, stbtt__GetGlyphShapeT2, stbtt_fontinfo, ImGuiOldColumnData, ImGuiOldColumnFlags, ImGuiOldColumns, ImGuiTable, ImGuiTableColumnSettings, ImGuiTableSortSpecs, ImGuiTableTempData, ImGui_ImplLOVE_CreateTexture, ImGui_ImplLOVE_DestroyTexture, ImGui_ImplLOVE_Init, ImGui_ImplLOVE_NewFrame, ImGui_ImplLOVE_RenderDrawData, ImGui_ImplLOVE_Shutdown, ImGui_ImplLOVE_UpdateTexture, stbrp_init_target, IMGUI_TABLE_MAX_COLUMNS, IMSTB_TEXTEDIT_UNDOSTATECOUNT, IM_COL32_DISABLE, ImGui_ImplLove, STB_TEXTEDIT_K_BACKSPACE, STB_TEXTEDIT_K_DELETE, STB_TEXTEDIT_K_DOWN, STB_TEXTEDIT_K_LEFT, STB_TEXTEDIT_K_LINEEND, STB_TEXTEDIT_K_LINESTART, STB_TEXTEDIT_K_PGDOWN, STB_TEXTEDIT_K_PGUP, STB_TEXTEDIT_K_REDO, STB_TEXTEDIT_K_RIGHT, STB_TEXTEDIT_K_SHIFT, STB_TEXTEDIT_K_TEXTEND +local ImGui, ImVec2, ImVec4, ImRect, HelpMarker, ImVec2_Copy, IMGUI_DEMO_MARKER, ImGuiTableFlags, ImStd, ImVector, ImGuiKey, ImGuiInputFlags, ImRect_Copy, ImGuiDataType, ImStb, IM_TRUNC, ImGuiStyleVarInfo, ImVec2_CopyV, IM_ASSERT_USER_ERROR, ImGuiHoveredFlags, ImFormatString, ImHashStr, ImS32, IM_ASSERT_USER_ERROR_RET, ImGuiColorEditFlags, ImDrawFlags, ImIsPowerOfTwo, ImVec4_Copy, ExampleAppConsoleMT, IM_ROUND, ImGuiTableColumnFlags, ImGuiTreeNodeFlags, PopStyleCompact, PushStyleCompact, ImU16, ImAbs, ImGuiWindowFlags, ImGuiItemFlags, stbte, ImGuiButtonFlags, ImGuiDebugLogFlags, ImGuiLocKey, ImU32, ImColor, ImCos, ImS16, ImGuiTabBarFlags, ImSin, ImUpperPowerOfTwo, ImVec2_MulVX, IM_F32_TO_INT8_SAT, ImFontAtlasPackGetRect, ImGuiMouseCursor, DockSettingsRenameNodeReferences, IM_ASSERT_PARANOID, ImCeil, ImGuiCol, ImGuiListClipper, ImLengthSqr, ImS8, ImU8, _PathArcToFastExXY, ExampleAppPropertyEditorMT, ImFabs, ImGuiScrollFlags, ImGui_ImplLOVE_GetBackendData, ImLog, ImPow, CustomConstraints, ExampleAppLogMT, IMGUI_DEBUG_LOG_FONT, ImFontAtlasBuildInit, ImFontCalcWordWrapPositionEx, ImGuiComboFlags, ImGuiPopupFlags, ImGuiSliderFlags, ImTextClassifierSetCharClass, ImVec2_AddVA, ImVec2_SubVA, MyDocument, ShowExampleMenuFile, ImFontAtlasBakedAddFontGlyph, ImFontAtlasPackAddRect, ImFontBaked_BuildLoadGlyph, ImGuiInputTextFlags, ImGuiStyle_Copy, ExampleMemberInfo, ExampleTree_CreateNode, ImFontAtlasBuildRenderBitmapFromString, ImFontAtlasFontDestroyOutput, ImFontAtlasFontSourceAddToFont, ImFontAtlasFontSourceInit, ImGuiTableColumn, MyItem_s_current_sort_specs, stb_textedit_key, stbtt_GetGlyphBitmapBoxSubpixel, EditTableSizingFlags, IM_FREE, ImDrawListSplitter, ImGuiDragDropFlags, MyItemColumnID_ID, MyItemColumnID_Name, MyItemColumnID_Quantity, stb_text_locate_coord, stb_text_makeundo_insert, stb_text_makeundo_replace, stb_textedit_find_charpos, stbtt_GetGlyphShape, EditTabBarFittingPolicyFlags, ExampleImageViewerData, ImGuiTableColumnSortSpecs, ImGuiTableInstanceData, ImGuiTableSettings, stb_text_makeundo_delete, stb_text_redo, stb_text_undo, stb_textedit_click, stb_textedit_drag, stbtt_FindGlyphIndex, stbtt_GetFontOffsetForIndex, stbtt_GetFontVMetrics, stbtt_GetGlyphBitmapBox, stbtt_GetGlyphHMetrics, stbtt_InitFont, stbtt_MakeGlyphBitmapSubpixelPrefilter, stbtt_ScaleForPixelHeight, stbtt__GetGlyphInfoT2, stbtt__GetGlyphShapeT2, stbtt_fontinfo, ImGuiOldColumnData, ImGuiOldColumnFlags, ImGuiOldColumns, ImGuiTable, ImGuiTableColumnSettings, ImGuiTableSortSpecs, ImGuiTableTempData, ImGui_ImplLOVE_CreateTexture, ImGui_ImplLOVE_DestroyTexture, ImGui_ImplLOVE_Init, ImGui_ImplLOVE_NewFrame, ImGui_ImplLOVE_RenderDrawData, ImGui_ImplLOVE_Shutdown, ImGui_ImplLOVE_UpdateTexture, stbrp_init_target, IMGUI_TABLE_MAX_COLUMNS, IMSTB_TEXTEDIT_UNDOSTATECOUNT, IM_COL32_DISABLE, ImGui_ImplLove, STB_TEXTEDIT_K_BACKSPACE, STB_TEXTEDIT_K_DELETE, STB_TEXTEDIT_K_DOWN, STB_TEXTEDIT_K_LEFT, STB_TEXTEDIT_K_LINEEND, STB_TEXTEDIT_K_LINESTART, STB_TEXTEDIT_K_PGDOWN, STB_TEXTEDIT_K_PGUP, STB_TEXTEDIT_K_REDO, STB_TEXTEDIT_K_RIGHT, STB_TEXTEDIT_K_SHIFT, STB_TEXTEDIT_K_TEXTEND local type, mathMin, mathMax, mathFloor, mathCeil, bitOr, bitLShift = type, math.min, math.max, math.floor, math.ceil, bit32.bor, bit32.lshift local function IM_COL32(R, G, B, A) return (bitOr(bitLShift(A, 24 --[[IM_COL32_A_SHIFT]]), bitLShift(B, 16 --[[IM_COL32_B_SHIFT]]), bitLShift(G, 8 --[[IM_COL32_G_SHIFT]]), bitLShift(R, 0 --[[IM_COL32_R_SHIFT]]))) end @@ -9664,10 +9664,13 @@ function ImGui.SetItemKeyOwner(key, flags) end -- This is equivalent to comparing KeyMods + doing a IsKeyPressed() +-- [Port] public overload IsKeyChordPressed(key_chord) == IsKeyChordPressed(key_chord, ImGuiInputFlags_None, ImGuiKeyOwner_Any) --- @param key_chord ImGuiKeyChord ---- @param flags ImGuiInputFlags ---- @param owner_id ImGuiID +--- @param flags? ImGuiInputFlags +--- @param owner_id? ImGuiID function ImGui.IsKeyChordPressed(key_chord, flags, owner_id) + if flags == nil then flags = 0 --[[ImGuiInputFlags.None]] end + if owner_id == nil then owner_id = 0 --[[ImGuiKeyOwner_Any]] end local g = GImGui key_chord = ImGui.FixupKeyChord(key_chord) local mods = bit32.band(key_chord, 61440 --[[ImGuiMod_Mask_]]) @@ -9697,10 +9700,13 @@ function ImGui.SetNextItemShortcut(key_chord, flags) g.NextItemData.ShortcutFlags = flags end +-- [Port] public overload Shortcut(key_chord, flags = 0) == Shortcut(key_chord, flags, ImGuiKeyOwner_Any) --- @param key_chord ImGuiKeyChord ---- @param flags ImGuiInputFlags ---- @param owner_id ImGuiID +--- @param flags? ImGuiInputFlags +--- @param owner_id? ImGuiID function ImGui.Shortcut(key_chord, flags, owner_id) + if flags == nil then flags = 0 end + if owner_id == nil then owner_id = 0 --[[ImGuiKeyOwner_Any]] end local g = GImGui -- IMGUI_DEBUG_LOG("Shortcut(%s, flags=%X, owner_id=0x%08X)\n", ImGui.GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), flags, owner_id) @@ -12927,6 +12933,17 @@ function ImGui.Begin(name, open, flags) end if open == nil then open = true end + + -- [DEBUG] io.ConfigDebugBeginReturnValue override return value to test Begin/End and BeginChild/EndChild behaviors. + -- (The implicit fallback window is NOT automatically ended allowing it to always be able to receive commands without crashing) + if not window.IsFallbackWindow then + if (g.IO.ConfigDebugBeginReturnValueOnce and window_just_created) or (g.IO.ConfigDebugBeginReturnValueLoop and g.DebugBeginReturnValueCullDepth == g.CurrentWindowStack.Size) then + if window.AutoFitFramesX > 0 then window.AutoFitFramesX = window.AutoFitFramesX + 1 end + if window.AutoFitFramesY > 0 then window.AutoFitFramesY = window.AutoFitFramesY + 1 end + return open, false + end + end + return open, not window.SkipItems end @@ -14212,6 +14229,14 @@ function ImGui.NewFrame() g.ErrorCountCurrentFrame = 0 g.StackSizesInNewFrame = g.StackSizesInNewFrame or ImGuiErrorRecoveryState() ImGui.ErrorRecoveryStoreState(g.StackSizesInNewFrame) + + -- [DEBUG] When io.ConfigDebugBeginReturnValue is set, we make Begin()/BeginChild() return false at different level of the window-stack, + -- allowing to validate correct Begin/End behavior in user code. + if g.IO.ConfigDebugBeginReturnValueLoop then + g.DebugBeginReturnValueCullDepth = (g.DebugBeginReturnValueCullDepth == -1) and 0 or ((g.DebugBeginReturnValueCullDepth + (((g.FrameCount % 4) == 0) and 1 or 0)) % 10) + else + g.DebugBeginReturnValueCullDepth = -1 + end end -- This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. @@ -14632,9 +14657,10 @@ end --- @param pos ImVec2 --- @param items_height float function ImGui.CalcClipRectVisibleItemsY(clip_rect, pos, items_height) - local visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) - local visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), visible_start) - return visible_start + 1, visible_end + 1 + -- [Port] returns (out_visible_start, out_visible_end), 0-based like upstream + local out_visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) + local out_visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), out_visible_start) + return out_visible_start, out_visible_end end ------------------------------------------------------------------------------- @@ -19924,14 +19950,6 @@ function MT.ImGuiListClipper:Step() return ret end --- Generic helper, equivalent to old ImGui.CalcListClipping() but stateless --- Returns (out_visible_start, out_visible_end) -function ImGui.CalcClipRectVisibleItemsY(clip_rect, pos, items_height) - local out_visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) - local out_visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), out_visible_start) - return out_visible_start, out_visible_end -end - ------------------------------------------------------------------------------- -- [SECTION] ERROR CHECKING, STATE RECOVERY ------------------------------------------------------------------------------- @@ -21246,7 +21264,7 @@ function ImGui.ShowMetricsWindow(p_open) _, g.DebugShowGroupRects = ImGui.Checkbox("Show groups rectangles", g.DebugShowGroupRects == true) -- Storing in context as this is used by group code and prefers to be in hot-data ImGui.SeparatorText("Validate") - _, io.ConfigDebugBeginReturnValueLoop = ImGui.Checkbox("Debug Begin/BeginChild return value", io.ConfigDebugBeginReturnValueLoop == true) + _, io.ConfigDebugBeginReturnValueLoop = ImGui.Checkbox("Debug Begin/BeginChild return value", io.ConfigDebugBeginReturnValueLoop) ImGui.SameLine(); MetricsHelpMarker("Some calls to Begin()/BeginChild() will return false.\n\nWill cycle through window depths then repeat. Windows should be flickering while running.") _, cfg.ShowTextEncodingViewer = ImGui.Checkbox("UTF-8 Encoding viewer", cfg.ShowTextEncodingViewer == true) ImGui.SameLine(); MetricsHelpMarker("You can also call ImGui::DebugTextEncoding() from your code with a given string to test that your UTF-8 encoding settings are correct.") @@ -22719,10 +22737,6 @@ end -- [SECTION] DemoWindowWidgetsColorAndPickers() ------------------------------------------------------------------------------- --- [Port] the library does not define the standard color payload types (ColorButton drag source is not ported yet) -IMGUI_PAYLOAD_TYPE_COLOR_3F = IMGUI_PAYLOAD_TYPE_COLOR_3F or "_COL3F" -IMGUI_PAYLOAD_TYPE_COLOR_4F = IMGUI_PAYLOAD_TYPE_COLOR_4F or "_COL4F" - S.DemoWindowWidgetsColorAndPickers = { color = ImVec4(114.0 / 255.0, 144.0 / 255.0, 154.0 / 255.0, 200.0 / 255.0), base_flags = ImGuiColorEditFlags.None, @@ -22832,7 +22846,7 @@ function DemoWindowWidgetsColorAndPickers() if ImGui.BeginDragDropTarget() then local payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F) if payload then - local d = payload.Data -- [Port] memcpy -> copy components (Data is a 1-based float array or ImVec4) + local d = payload.Data -- [Port] memcpy -> copy components (Data is a 1-based float array) saved_palette[n + 1].x, saved_palette[n + 1].y, saved_palette[n + 1].z = d[1], d[2], d[3] end payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F) @@ -28846,9 +28860,8 @@ function DemoWindowInputs() local line_height = ImGui.GetTextLineHeightWithSpacing() local key_chord = bit32.bor(4096 --[[ImGuiMod_Ctrl]], 546 --[[ImGuiKey.A]]) - -- [Port] ImGui.Shortcut() has no owner_id default (upstream public overload passes ImGuiKeyOwner_Any): pass it explicitly. ImGui.Text("Ctrl+A") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") ImGui.PushStyleColor(3 --[[ImGuiCol.ChildBg]], ImVec4(1.0, 0.0, 1.0, 0.1)) @@ -28858,7 +28871,7 @@ function DemoWindowInputs() -- 1: Window polling for Ctrl+A ImGui.Text("(in WindowA)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") -- 2: InputText also polling for Ctrl+A: it always uses _RouteFocused internally (gets priority when active) -- (Commented because the owner-aware version of Shortcut() is still in imgui_internal.h) @@ -28878,7 +28891,7 @@ function DemoWindowInputs() -- 4: Child window polling for Ctrl+A. It is deeper than WindowA and gets priority when focused. ImGui.BeginChild("ChildE", ImVec2(-1.1754943508223e-38 --[[FLT_MIN]], line_height * 4), true) ImGui.Text("(in ChildE: using same Shortcut)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") ImGui.EndChild() -- 5: In a popup @@ -28887,7 +28900,7 @@ function DemoWindowInputs() end if ImGui.BeginPopup("PopupF") then ImGui.Text("(in PopupF)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, 0 --[[ImGuiKeyOwner_Any]]) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") -- (Commented because the owner-aware version of Shortcut() is still in imgui_internal.h) --ImGui.InputText("InputTextG", str, IM_COUNTOF(str), ImGuiInputTextFlags.ReadOnly); --ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused(), ImGui.Shortcut(key_chord, flags, ImGui.GetItemID()) ? "PRESSED" : "..."); @@ -29266,7 +29279,7 @@ function ImGui.ShowStyleEditor(ref) end ImGui.SameLine(0.0, 0.0); ImGui.Text(" (out %.2f)", ImGui.GetFontSize()) style.FontScaleMain = ImGui.DragFloat("FontScaleMain", style.FontScaleMain, 0.02, 0.5, 4.0) - ImGui.BeginDisabled(ImGui.GetIO().ConfigDpiScaleFonts == true) -- [Port] field is nil in the port's ImGuiIO (nil would mean "disabled") + ImGui.BeginDisabled(ImGui.GetIO().ConfigDpiScaleFonts) style.FontScaleDpi = ImGui.DragFloat("FontScaleDpi", style.FontScaleDpi, 0.02, 0.5, 4.0) ImGui.SetItemTooltip("When io.ConfigDpiScaleFonts is set, this value is automatically overwritten.") ImGui.EndDisabled() @@ -29518,7 +29531,7 @@ function ImGui.ShowStyleEditor(ref) _, style.AntiAliasedFill = ImGui.Checkbox("Anti-aliased fill", style.AntiAliasedFill) local io = ImGui.GetIO() - _, io.ConfigDebugDrawListDefaultsToStrokeLegacy = ImGui.Checkbox("Debug: DrawList Defaults to _StrokeLegacy", io.ConfigDebugDrawListDefaultsToStrokeLegacy == true) -- [Port] field not declared in the port's ImGuiIO + _, io.ConfigDebugDrawListDefaultsToStrokeLegacy = ImGui.Checkbox("Debug: DrawList Defaults to _StrokeLegacy", io.ConfigDebugDrawListDefaultsToStrokeLegacy) ImGui.PushItemWidth(ImGui.GetFontSize() * 8) -- [Port] the library still stores the older style.CurveTessellationTol (== MaxError * MaxError) instead of style.CurveTessellationMaxError @@ -39105,6 +39118,9 @@ function ImGuiIO() DisplayFramebufferScale = ImVec2(1.0, 1.0), -- = (1, 1) -- Main display density. For retina display where window coordinates are different from framebuffer coordinates. This will affect font density + will end up in ImDrawData::FramebufferScale. + -- Font system + FontAllowUserScaling = false, -- = false -- Allow user scaling text of individual window with Ctrl+Wheel. + -- Main Input State -- (this block used to be written by backend, since 1.87 it is best to NOT write to those directly, call the AddXXX functions above instead) -- (reading from those variables is fair game, as they are extremely unlikely to be moving anywhere) @@ -39136,6 +39152,25 @@ function ImGuiIO() ConfigDebugIniSettings = false, -- = false -- Save .ini data with extra comments (particularly helpful for Docking, but makes saving slower) ConfigWindowsCopyContentsWithCtrlC = false, -- = false -- [EXPERIMENTAL] Ctrl+C copy the contents of focused window into the clipboard. Experimental because: (1) has known issues with nested Begin/End pairs (2) text output quality varies (3) text output is in submission order rather than spatial order. ConfigWindowsMoveFromTitleBarOnly = false, -- = false -- Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar. + ConfigScrollbarScrollByPage = true, -- = true -- Enable scrolling page by page when clicking outside the scrollbar grab. When disabled, always scroll to clicked location. When enabled, Shift+Click scrolls to clicked location. + ConfigInputTextCursorBlink = true, -- = true -- Enable blinking cursor (optional as some users consider it to be distracting). + ConfigInputTextEnterKeepActive = false, -- = false -- [BETA] Pressing Enter will reactivate item and select all text (single-line only). Ctrl+Enter or Shift+Enter will deactivate normally. + ConfigDragClickToInputText = false, -- = false -- [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard. + + -- Keyboard/Gamepad Navigation options + ConfigNavSwapGamepadButtons = false, -- = false -- Swap Activate<>Cancel (A<>B) buttons, matching typical "Nintendo/Japanese style" gamepad layout. + ConfigNavMoveSetMousePos = false, -- = false -- Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult. Will update io.MousePos and set io.WantSetMousePos=true. + ConfigNavCaptureKeyboard = true, -- = true -- Sets io.WantCaptureKeyboard when io.NavActive is set. + ConfigNavEscapeClearFocusItem = true, -- = true -- Pressing Escape can clear focused item + navigation id/highlight. Set to false if you want to always keep highlight on. + ConfigNavEscapeClearFocusWindow = false, -- = false -- Pressing Escape can clear focused window as well (super set of io.ConfigNavEscapeClearFocusItem). + + -- DPI/Scaling options + ConfigDpiScaleFonts = false, -- = false -- [EXPERIMENTAL] Automatically overwrite style.FontScaleDpi when Monitor DPI changes. This will scale fonts but _NOT_ scale sizes/padding for now. + ConfigDpiScaleViewports = false, -- = false -- [EXPERIMENTAL] Scale Dear ImGui and Platform Windows when Monitor DPI changes. + + -- Ini Settings options + ConfigIniSettingsSaveLastUsedDate = true, -- = true -- Enable loading/saving last used day (YYYYMMDD) in some .ini struct, making things easier to audit and allowing custom tools to cleanup old data. + ConfigIniSettingsAutoDiscardMonths = 0, -- = 0 -- [BETA] Set number of months after which unused .ini entries are discarded on load. Require platform_io.Platform_SessionDate to be set. For systems supporting the feature, .ini entries without a LastUsed field will always be discarded! Please report if you are using this. -- Options to configure Error Handling and how we handle recoverable errors [EXPERIMENTAL] -- - Error recovery is provided as a way to facilitate: -- - Recovery after a programming error (native code or scripting language - the latter tends to facilitate iterating on code while running). @@ -39160,6 +39195,14 @@ function ImGuiIO() -- - See FAQ https://github.com/ocornut/imgui/blob/master/docs/FAQ.md#q-about-the-id-stack-system ConfigDebugHighlightIdConflicts = false, -- Highlight and show an error message popup when multiple items have conflicting identifiers. ConfigDebugHighlightIdConflictsShowItemPicker = true, -- =true -- Show "Item Picker" button in aforementioned popup. + ConfigDebugIsDebuggerPresent = false, -- = false -- Enable various tools calling IM_DEBUG_BREAK(). + -- Tools to test correct Begin/End and BeginChild/EndChild behaviors. + ConfigDebugBeginReturnValueOnce = false, -- = false -- First-time calls to Begin()/BeginChild() will return false. NEEDS TO BE SET AT APPLICATION BOOT TIME if you don't want to miss windows. + ConfigDebugBeginReturnValueLoop = false, -- = false -- Some calls to Begin()/BeginChild() will return false. Will cycle through window depths then repeat. Suggested use: add "io.ConfigDebugBeginReturnValue = io.KeyShift" in your main loop then occasionally press SHIFT. Windows should be flickering while running. + -- Option to deactivate io.AddFocusEvent(false) handling. + ConfigDebugIgnoreFocusLoss = false, -- = false -- Ignore io.AddFocusEvent(false), consequently not calling io.ClearInputKeys()/io.ClearInputMouse() in input processing. + -- Option to default all ImDrawList to ImDrawListFlags_StrokeLegacy mode. + ConfigDebugDrawListDefaultsToStrokeLegacy = false, -- false -- Default all ImDrawList to ImDrawList_StrokeLegacy mode, mimicking pre-1.93.0 rendering. [Port] the 1.93 stroke rendering is not ported yet: no effect. IniFilename = "imgui.ini", -- Roblox: no disk access, only used as a flag (nil disables .ini handling) IniSavingRate = 5.0, -- = 5.0f -- Minimum time between saving positions/sizes to .ini file, in seconds. @@ -40026,6 +40069,10 @@ ImGuiDragDropFlags = { ImGuiDragDropFlags.AcceptPeekOnly = bitOr(ImGuiDragDropFlags.AcceptBeforeDelivery, ImGuiDragDropFlags.AcceptNoDrawDefaultRect) -- For peeking ahead and inspecting the payload before delivery. +-- Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui. +IMGUI_PAYLOAD_TYPE_COLOR_3F = "_COL3F" -- float[3]: Standard type for colors, without alpha. User code may use this type. [Port] payload.Data = { r, g, b } (1-based) +IMGUI_PAYLOAD_TYPE_COLOR_4F = "_COL4F" -- float[4]: Standard type for colors. User code may use this type. [Port] payload.Data = { r, g, b, a } (1-based) + -- Helpers macros to generate 32-bit encoded colors IM_COL32_R_SHIFT = 0 IM_COL32_G_SHIFT = 8 @@ -42897,12 +42944,14 @@ IMGUI_TEXT_INDEX.__index = IMGUI_TEXT_INDEX function IMGUI_TEXT_INDEX:clear() self.Offsets:clear(); self.EndOffset = 0; end +function IMGUI_TEXT_INDEX:size() return self.Offsets.Size end +-- [Port] 'n' is a 0-based line number like upstream (Offsets.Data is 1-based), 'base' the 1-based position of the buffer start; returns 1-based positions function IMGUI_TEXT_INDEX:get_line_begin(base, n) - return base + (self.Offsets.Size ~= 0 and self.Offsets[n] or 0) + return base + (self.Offsets.Size ~= 0 and self.Offsets.Data[n + 1] or 0) end function IMGUI_TEXT_INDEX:get_line_end(base, n) - return base + ((n + 1 < self.Offsets.Size) and (self.Offsets[n + 1] - 1) or self.EndOffset) + return base + ((n + 1 < self.Offsets.Size) and (self.Offsets.Data[n + 2] - 1) or self.EndOffset) end --- @return ImGuiTextIndex @@ -43306,7 +43355,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct NavActivateId = 0, NavActivateDownId = 0, NavActivatePressedId = 0, -- ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey.Space) || IsKeyDown(ImGuiKey.Enter) || IsKeyPressed(ImGuiKey.NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItemByID() NavActivateFlags = 0 --[[ImGuiActivateFlags.None]], - FrameCount = -1, + FrameCount = 0, FrameCountEnded = -1, FrameCountPlatformEnded = -1, @@ -43479,6 +43528,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct DebugLogFlags = bitOr(1 --[[ImGuiDebugLogFlags.EventError]], 1048576 --[[ImGuiDebugLogFlags.OutputToTTY]]), DebugFlashStyleColorIdx = nil, + DebugBeginReturnValueCullDepth = -1, -- Cycle between 0..9 then wrap around. DebugMetricsConfig = ImGuiMetricsConfig(), DebugHookIdInfoId = 0, -- Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool @@ -54777,34 +54827,37 @@ end --- @param flags ImGuiInputTextFlags --- @param line_index ImGuiTextIndex --- @param buf char[] ---- @param buf_end int +--- @param buf_end? int # nil: inactive multi-line path, end found with strchr() --- @param wrap_width float --- @param max_output_buffer_size int +--- @param want_out_buf_end boolean --- @return int size ---- @return int? out_buf_end -local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_width, max_output_buffer_size) +--- @return int? out_buf_end # [Port] 'const char** out_buf_end' output parameter becomes a 2nd return value (nil when not requested) +local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_width, max_output_buffer_size, want_out_buf_end) local g = GImGui local size = 0 - local s = 1 + local s local trailing_line_already_counted = false + -- [Port] 's' is a 1-based position in 'buf' (C++ s == buf + (s - 1)), Offsets store 0-based offsets like upstream. if bit32.band(flags, 16777216 --[[ImGuiInputTextFlags.WordWrap]]) ~= 0 then + s = 1 while s < buf_end do if size <= max_output_buffer_size then line_index.Offsets:push_back(s - 1) end size = size + 1 s = ImFontCalcWordWrapPositionEx(g.Font, g.FontSize, buf, s, buf_end, wrap_width, 2 --[[ImDrawTextFlags.WrapKeepBlanks]]) - if buf[s] == 10 then s = s + 1 end end elseif buf_end ~= nil then + s = 1 while s < buf_end do if size <= max_output_buffer_size then line_index.Offsets:push_back(s - 1) end size = size + 1 - s = ImMemchr(buf, 10, s) --[[@as int]] -- FIXME: - + s = ImMemchr(buf, 10, s) + if s ~= nil and s >= buf_end then s = nil end -- [Port] ImMemchr() stops at the zero-terminator, not at buf_end if s then s = s + 1 else s = buf_end end end else @@ -54816,20 +54869,17 @@ local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_wid line_index.Offsets:push_back(s - 1) end size = size + 1 - s_eol = ImMemchr(buf, 10, s) if s_eol == nil then - s = s + ImStd.ImStrlen(buf) - s -- FIXME: + s = s + ImStd.ImStrlen(buf, s) trailing_line_already_counted = true break end - s = s_eol + 1 end end - - local out_buf_end - if out_buf_end ~= nil then + local out_buf_end = nil + if want_out_buf_end then out_buf_end = s buf_end = s end @@ -54837,11 +54887,11 @@ local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_wid line_index.Offsets:push_back(0) size = size + 1 end - if s > 1 and buf[s - 1] == 10 and not trailing_line_already_counted then + if buf_end > 1 and buf[buf_end - 1] == 10 and not trailing_line_already_counted then local old_size = size size = size + 1 if old_size <= max_output_buffer_size then - line_index.Offsets:push_back(s - 1) + line_index.Offsets:push_back(buf_end - 1) end end return size, out_buf_end @@ -54880,24 +54930,24 @@ end --- @param cursor_n int --- @return ImVec2 local function InputTextLineIndexGetPosOffset(g, state, line_index, buf, buf_end, cursor_n) + -- [Port] 'cursor_n' is a 1-based position (Stb.cursor) == C++ cursor_ptr; Offsets hold 0-based offsets, compare with cursor_n - 1. local cursor_ptr = cursor_n - - local it = ImLowerBound(line_index.Offsets, 1, line_index.Offsets.Size + 1, cursor_ptr) - - if it > 1 then - if it > line_index.Offsets.Size or line_index.Offsets[it] ~= cursor_ptr or (state ~= nil and state.WrapWidth > 0.0 and state.LastMoveDirectionLR == 1 --[[ImGuiDir.Right]] and - buf[cursor_ptr - 1] ~= 10 and buf[cursor_ptr - 1] ~= 0) then + local cursor_off = cursor_n - 1 + local offsets = line_index.Offsets + local it_begin = 1 + local it_end = offsets.Size + 1 + local it = ImLowerBound(offsets.Data, it_begin, it_end, cursor_off) + if it > it_begin then + if it == it_end or offsets.Data[it] ~= cursor_off or (state ~= nil and state.WrapWidth > 0.0 and state.LastMoveDirectionLR == 1 --[[ImGuiDir.Right]] and buf[cursor_ptr - 1] ~= 10 and buf[cursor_ptr - 1] ~= 0) then it = it - 1 end end - local line_no = it - local line_start = (line_no == 1) and 1 or line_index.Offsets[line_no] + 1 - + local line_no = (it == it_begin) and 0 or (it - 1) -- 0-based (index_from_ptr) + local line_start = line_index:get_line_begin(1, line_no) local offset = ImVec2() offset.x = InputTextCalcTextSize(g, buf, line_start, cursor_ptr, buf_end, nil, 2 --[[ImDrawTextFlags.WrapKeepBlanks]]).x - offset.y = line_no * g.FontSize - + offset.y = (line_no + 1) * g.FontSize return offset end @@ -55628,7 +55678,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- Write back result string if modified. -- FIXME-OPT: Could mark dirty state from the stb_textedit callbacks if not is_readonly then - if bit32.band(g.LastItemData.ItemFlags, 256 --[[ImGuiItemFlags.LiveEditOnInputScalar]]) ~= 0 then + if bit32.band(g.LastItemData.ItemFlags, 128 --[[ImGuiItemFlags.LiveEditOnInputText]]) ~= 0 then -- Apply when modified if (ImStd.strcmp(state.TextSrc, buf) ~= 0) then apply_new_text = state.TextSrc @@ -55747,7 +55797,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback end -- Calculate visibility - local line_visible_n0, line_visible_n1 = 1, 2 + local line_visible_n0, line_visible_n1 = 0, 1 -- 0-based like upstream if is_multiline then line_visible_n0, line_visible_n1 = ImGui.CalcClipRectVisibleItemsY(clip_rect, draw_pos, g.FontSize) end @@ -55760,15 +55810,15 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- If scrolling is expected to change build full index. -- FIXME-OPT: Could append to index when new value of line_visible_n1 becomes bigger, see second call to CalcClipRectVisibleItemsY() below. local will_scroll_y = state and ((state.CursorFollow and render_cursor) or (state.CursorCenterY and (render_cursor or render_selection))) - --- @cast buf_display_end int local out_buf_end - line_count, out_buf_end = InputTextLineIndexBuild(flags, line_index, buf_display, buf_display_end, wrap_width, will_scroll_y and 2147483647 --[[INT_MAX]] or (line_visible_n1 + 1)) - if buf_display_end then + line_count, out_buf_end = InputTextLineIndexBuild(flags, line_index, buf_display, buf_display_end, wrap_width, will_scroll_y and 2147483647 --[[INT_MAX]] or (line_visible_n1 + 1), buf_display_end == nil) + if buf_display_end == nil then buf_display_end = out_buf_end end end + --- @cast buf_display_end int line_index.EndOffset = buf_display_end - 1 - line_visible_n1 = ImMin(line_visible_n1, line_count + 1) + line_visible_n1 = ImMin(line_visible_n1, line_count) -- Store text height (we don't need width) local text_size_y = line_count * g.FontSize @@ -55869,7 +55919,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback local rect = ImRect() rect.Min.x = draw_pos.x - draw_scroll.x + ImGui.CalcTextSizeEx(buf_display, p, line_selected_begin).x - rect.Min.y = draw_pos.y - draw_scroll.y + (line_n - 1) * g.FontSize + rect.Min.y = draw_pos.y - draw_scroll.y + line_n * g.FontSize rect.Max.x = rect.Min.x + rect_width rect.Max.y = rect.Min.y + bg_offy_dn + g.FontSize rect.Min.y = rect.Min.y + bg_offy_up @@ -55890,7 +55940,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- Render text if (is_multiline or (buf_display_end - 1) < buf_display_max_length) and bit32.band(text_col, 4278190080 --[[IM_COL32_A_MASK]]) ~= 0 and line_visible_n0 < line_visible_n1 then g.Font:RenderText(draw_window.DrawList, g.FontSize, - draw_pos - draw_scroll + ImVec2(0.0, (line_visible_n0 - 1) * g.FontSize), + draw_pos - draw_scroll + ImVec2(0.0, line_visible_n0 * g.FontSize), text_col, clip_rect:AsVec4(), buf_display, line_index:get_line_begin(1, line_visible_n0), @@ -56308,7 +56358,28 @@ function ImGui.ColorEdit4(label, col, flags) ImGui.EndGroup() -- Drag and Drop Target - -- TODO: + -- NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test. + if bit32.band(g.LastItemData.StatusFlags, 1 --[[ImGuiItemStatusFlags.HoveredRect]]) ~= 0 and bit32.band(g.LastItemData.ItemFlags, 2048 --[[ImGuiItemFlags.ReadOnly]]) == 0 and bit32.band(flags, 512 --[[ImGuiColorEditFlags.NoDragDrop]]) == 0 and ImGui.BeginDragDropTarget() then + local accepted_drag_drop = false + local payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F) + if payload then + local d = payload.Data + col[1], col[2], col[3] = d[1], d[2], d[3] -- Preserve alpha if any + value_changed = true; accepted_drag_drop = true + end + payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F) + if payload then + local d = payload.Data + for i = 1, components do col[i] = d[i] end + value_changed = true; accepted_drag_drop = true + end + + -- Drag-drop payloads are always RGB + if accepted_drag_drop and bit32.band(flags, 536870912 --[[ImGuiColorEditFlags.InputHSV]]) ~= 0 then + col[1], col[2], col[3] = ImGui.ColorConvertRGBtoHSV(col[1], col[2], col[3]) + end + ImGui.EndDragDropTarget() + end -- When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4(). if picker_active_window and g.ActiveId ~= 0 and g.ActiveIdWindow == picker_active_window then @@ -56877,17 +56948,20 @@ function ImGui.ColorButton(desc_id, col, flags, size_arg) -- Drag and Drop Source -- NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test. - -- if g.ActiveId == id and bit32.band(flags, ImGuiColorEditFlags.NoDragDrop) == 0 and ImGui.BeginDragDropSource() then - -- if bit32.band(flags, ImGuiColorEditFlags.NoAlpha) ~= 0 then - -- ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, col_rgb, ImGuiCond.Once) - -- else - -- ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, col_rgb, ImGuiCond.Once) - -- end - -- ImGui.ColorButton(desc_id, col, flags) - -- ImGui.SameLine() - -- ImGui.TextEx("Color") - -- ImGui.EndDragDropSource() - -- end + -- [Port] payload.Data is a 1-based float array copy { r, g, b [, a] } (C++ memcpy of float[3]/float[4]) + if g.ActiveId == id and bit32.band(flags, 512 --[[ImGuiColorEditFlags.NoDragDrop]]) == 0 and ImGui.BeginDragDropSource() then + if bit32.band(flags, 2 --[[ImGuiColorEditFlags.NoAlpha]]) ~= 0 then + ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, { col_rgb.x, col_rgb.y, col_rgb.z }, 3, 2 --[[ImGuiCond.Once]]) + else + ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, { col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.w }, 4, 2 --[[ImGuiCond.Once]]) + end + ImGui.PushItemFlag(4096 --[[ImGuiItemFlags.MixedValue]], false) + ImGui.ColorButton(desc_id, col, flags) + ImGui.PopItemFlag() + ImGui.SameLine() + ImGui.TextEx("Color") + ImGui.EndDragDropSource() + end -- Tooltip if bit32.band(flags, 64 --[[ImGuiColorEditFlags.NoTooltip]]) == 0 and hovered and ImGui.IsItemHovered(4096 --[[ImGuiHoveredFlags.ForTooltip]]) then diff --git a/docs/PORT_STATUS.txt b/docs/PORT_STATUS.txt index d990c04..c96f3da 100644 --- a/docs/PORT_STATUS.txt +++ b/docs/PORT_STATUS.txt @@ -13,19 +13,19 @@ polyline stroker (AddPolyline), Lua-native replacements (ImGuiStorage, ImStr*, I upstream file funcs ported by size similarity stubs imgui.cpp 786 87.4% 93.5% 74.9% 2 -imgui_widgets.cpp 308 82.8% 88.9% 78.5% 0 +imgui_widgets.cpp 308 82.8% 88.9% 78.7% 0 imgui_draw.cpp 258 75.2% 75.5% 63.1% 2 imgui_tables.cpp 113 96.5% 99.0% 74.0% 0 imgui_demo.cpp 56 82.1% 98.2% 50.8% 0 imgui.h 110 52.7% 37.1% 56.4% 0 -imgui_internal.h 269 55.4% 58.8% 67.6% 0 -TOTAL 1900 78.8% 90.6% 69.7% 4 +imgui_internal.h 269 55.8% 58.9% 67.5% 0 +TOTAL 1900 78.9% 90.6% 69.7% 4 upstream code reproduced (similarity x ported size / all upstream size): 63.2% Public API (imgui.h, namespace ImGui) 365 / 376 97.1% Internal API (imgui_internal.h, namespace ImGui) 405 / 443 91.4% Enum values (imgui.h + imgui_internal.h) 978 / 1078 90.7% -Struct fields (imgui.h + imgui_internal.h) 1759 / 1926 91.3% +Struct fields (imgui.h + imgui_internal.h) 1764 / 1926 91.6% Legend: [x] ported (sim %) [~] stub [ ] not ported [-] excluded (c++-only / obsolete / os-specific / #if 0 / test-engine) @@ -43,7 +43,7 @@ imgui.cpp -- USER FACING STRUCTURES (ImGuiStyle, ImGuiIO, ImGuiPlatformIO) [x] 38% ImGuiStyle::ImGuiStyle imgui_internal.lua:1460 [x] 83% ImGuiStyle::ScaleAllSizes imgui.lua:4779 - [x] 13% ImGuiIO::ImGuiIO imgui_h.lua:1181 + [x] 12% ImGuiIO::ImGuiIO imgui_h.lua:1181 [x] 83% ImGuiIO::AddInputCharacter imgui.lua:7983 [x] 83% ImGuiIO::AddInputCharacterUTF16 imgui.lua:8004 [ ] ImGuiIO::AddInputCharactersUTF8 @@ -61,7 +61,7 @@ imgui.cpp [x] 96% ImGuiIO::AddMouseSourceEvent imgui.lua:8173 [x] 87% ImGuiIO::AddMouseViewportEvent imgui.lua:8180 [x] 84% ImGuiIO::AddFocusEvent imgui.lua:8209 - [x] 15% ImGuiPlatformIO::ImGuiPlatformIO imgui_h.lua:1487 + [x] 15% ImGuiPlatformIO::ImGuiPlatformIO imgui_h.lua:1517 -- MISC HELPERS/UTILITIES (Geometry functions) [ ] ImBezierCubicClosestPoint @@ -116,11 +116,11 @@ imgui.cpp [x] 41% ImTextCountLines imgui_tables.lua:3782 -- MISC HELPERS/UTILITIES (Color functions) - [x] 73% ImAlphaBlendColors imgui.lua:14354 - [x] 41% ImGui::ColorConvertU32ToFloat4 imgui.lua:14365 - [x] 16% ImGui::ColorConvertFloat4ToU32 imgui.lua:14384 - [x] 87% ImGui::ColorConvertRGBtoHSV imgui.lua:14395 - [x] 61% ImGui::ColorConvertHSVtoRGB imgui.lua:14420 + [x] 73% ImAlphaBlendColors imgui.lua:14379 + [x] 41% ImGui::ColorConvertU32ToFloat4 imgui.lua:14390 + [x] 16% ImGui::ColorConvertFloat4ToU32 imgui.lua:14409 + [x] 87% ImGui::ColorConvertRGBtoHSV imgui.lua:14420 + [x] 61% ImGui::ColorConvertHSVtoRGB imgui.lua:14445 -- ImGuiStorage [x] 69% ImLowerBound imgui_widgets.lua:5186 @@ -141,57 +141,57 @@ imgui.cpp [ ] ImGuiStorage::SetAllInt -- ImGuiTextFilter - [x] 32% ImGuiTextFilter::ImGuiTextFilter imgui.lua:19307 - [x] 36% ImGuiTextFilter::Draw imgui.lua:19317 - [x] 62% ImGuiTextFilter::DrawWithHint imgui.lua:19324 - [x] 49% ImGuiTextFilter::Build imgui.lua:19339 - [x] 56% ImGuiTextFilter::PassFilter imgui.lua:19400 + [x] 32% ImGuiTextFilter::ImGuiTextFilter imgui.lua:19333 + [x] 36% ImGuiTextFilter::Draw imgui.lua:19343 + [x] 62% ImGuiTextFilter::DrawWithHint imgui.lua:19350 + [x] 49% ImGuiTextFilter::Build imgui.lua:19365 + [x] 56% ImGuiTextFilter::PassFilter imgui.lua:19426 -- ImGuiTextBuffer, ImGuiTextIndex - [x] 5% ImGuiTextBuffer::append imgui_h.lua:2651 - [x] 17% ImGuiTextBuffer::appendf imgui_h.lua:2652 + [x] 5% ImGuiTextBuffer::append imgui_h.lua:2685 + [x] 17% ImGuiTextBuffer::appendf imgui_h.lua:2686 [ ] ImGuiTextBuffer::appendfv [ ] ImGuiTextIndex::append -- ImGuiListClipper - [x] 86% GetSkipItemForListClipping imgui.lua:19438 - [x] 71% ImGuiListClipper_SortAndFuseRanges imgui.lua:19448 - [x] 89% ImGuiListClipper_SeekCursorAndSetupPrevLine imgui.lua:19472 - [x] 8% ImGuiListClipper::ImGuiListClipper imgui.lua:19505 + [x] 86% GetSkipItemForListClipping imgui.lua:19464 + [x] 71% ImGuiListClipper_SortAndFuseRanges imgui.lua:19474 + [x] 89% ImGuiListClipper_SeekCursorAndSetupPrevLine imgui.lua:19498 + [x] 8% ImGuiListClipper::ImGuiListClipper imgui.lua:19531 [-] ImGuiListClipper::~ImGuiListClipper c++-only - [x] 64% ImGuiListClipper::Begin imgui.lua:19512 - [x] 79% ImGuiListClipper::End imgui.lua:19541 - [x] 61% ImGuiListClipper::IncludeItemsByIndex imgui.lua:19567 - [x] 80% ImGuiListClipper::SeekCursorForItem imgui.lua:19578 - [x] 79% ImGuiListClipper_StepInternal imgui.lua:19585 - [x] 40% ImGuiListClipper::Step imgui.lua:19734 - [x] 79% ImGui::CalcClipRectVisibleItemsY imgui.lua:14452 + [x] 64% ImGuiListClipper::Begin imgui.lua:19538 + [x] 79% ImGuiListClipper::End imgui.lua:19567 + [x] 61% ImGuiListClipper::IncludeItemsByIndex imgui.lua:19593 + [x] 80% ImGuiListClipper::SeekCursorForItem imgui.lua:19604 + [x] 79% ImGuiListClipper_StepInternal imgui.lua:19611 + [x] 40% ImGuiListClipper::Step imgui.lua:19760 + [x] 92% ImGui::CalcClipRectVisibleItemsY imgui.lua:14477 -- STYLING - [x] 90% ImGui::GetStyle imgui.lua:14462 - [x] 71% ImGui::GetStyleColorVec4 imgui.lua:18857 - [x] 26% ImGui::GetColorU32 imgui.lua:14476 - [x] 50% ImGui::PushStyleColor imgui.lua:14514 - [x] 68% ImGui::PopStyleColor imgui.lua:14531 - [x] 74% ImGui::GetStyleVarInfo imgui.lua:14598 - [x] 56% ImGui::PushStyleVar imgui.lua:14606 - [x] 91% ImGui::PushStyleVarX imgui.lua:14625 - [x] 91% ImGui::PushStyleVarY imgui.lua:14636 - [x] 70% ImGui::PopStyleVar imgui.lua:14646 - [x] 1% ImGui::GetStyleColorName imgui.lua:19167 + [x] 90% ImGui::GetStyle imgui.lua:14488 + [x] 71% ImGui::GetStyleColorVec4 imgui.lua:18883 + [x] 26% ImGui::GetColorU32 imgui.lua:14502 + [x] 50% ImGui::PushStyleColor imgui.lua:14540 + [x] 68% ImGui::PopStyleColor imgui.lua:14557 + [x] 74% ImGui::GetStyleVarInfo imgui.lua:14624 + [x] 56% ImGui::PushStyleVar imgui.lua:14632 + [x] 91% ImGui::PushStyleVarX imgui.lua:14651 + [x] 91% ImGui::PushStyleVarY imgui.lua:14662 + [x] 70% ImGui::PopStyleVar imgui.lua:14672 + [x] 1% ImGui::GetStyleColorName imgui.lua:19193 -- RENDER HELPERS - [x] 46% ImGui::FindRenderedTextEnd imgui.lua:10063 - [x] 76% ImGui::RenderText imgui.lua:10084 - [x] 79% ImGui::RenderTextWrapped imgui.lua:10114 - [x] 85% ImGui::RenderTextClippedEx imgui.lua:10147 - [x] 80% ImGui::RenderTextClipped imgui.lua:10184 - [x] 90% ImGui::RenderTextEllipsis imgui.lua:10319 - [x] 86% ImGui::RenderFrame imgui.lua:10378 - [x] 94% ImGui::RenderFrameBorder imgui.lua:10398 - [x] 99% ImGui::RenderColorComponentMarker imgui.lua:10411 - [x] 85% ImGui::RenderNavCursor imgui.lua:10207 - [x] 85% ImGui::RenderMouseCursor imgui.lua:10267 + [x] 46% ImGui::FindRenderedTextEnd imgui.lua:10069 + [x] 76% ImGui::RenderText imgui.lua:10090 + [x] 79% ImGui::RenderTextWrapped imgui.lua:10120 + [x] 85% ImGui::RenderTextClippedEx imgui.lua:10153 + [x] 80% ImGui::RenderTextClipped imgui.lua:10190 + [x] 90% ImGui::RenderTextEllipsis imgui.lua:10325 + [x] 86% ImGui::RenderFrame imgui.lua:10384 + [x] 94% ImGui::RenderFrameBorder imgui.lua:10404 + [x] 99% ImGui::RenderColorComponentMarker imgui.lua:10417 + [x] 85% ImGui::RenderNavCursor imgui.lua:10213 + [x] 85% ImGui::RenderMouseCursor imgui.lua:10273 -- INITIALIZATION, SHUTDOWN [x] 100% ImGui::GetCurrentContext imgui.lua:5487 @@ -200,22 +200,22 @@ imgui.cpp [ ] ImGui::GetAllocatorFunctions [x] 87% ImGui::CreateContext imgui.lua:5580 [x] 83% ImGui::DestroyContext imgui.lua:5592 - [x] 6% ImGuiContext::ImGuiContext imgui_internal.lua:2018 + [x] 6% ImGuiContext::ImGuiContext imgui_internal.lua:2020 [-] ImGuiContext::~ImGuiContext c++-only [x] 78% ImGui::Initialize imgui.lua:5538 - [x] 41% ImGui::Shutdown imgui.lua:14271 + [x] 41% ImGui::Shutdown imgui.lua:14296 [ ] ImGui::SetContextName [ ] ImGui::AddContextHook [ ] ImGui::RemoveContextHook [ ] ImGui::CallContextHooks -- MAIN CODE (most of the code! lots of stuff, needs tidying up!) - [x] 11% ImGuiWindow::ImGuiWindow imgui_internal.lua:2602 + [x] 11% ImGuiWindow::ImGuiWindow imgui_internal.lua:2605 [-] ImGuiWindow::~ImGuiWindow c++-only - [x] 74% SetCurrentWindow imgui.lua:10799 - [x] 70% ImGui::GcCompactTransientMiscBuffers imgui.lua:10820 - [x] 94% ImGui::GcCompactTransientWindowBuffers imgui.lua:10837 - [x] 96% ImGui::GcAwakeTransientWindowBuffers imgui.lua:10849 + [x] 74% SetCurrentWindow imgui.lua:10805 + [x] 70% ImGui::GcCompactTransientMiscBuffers imgui.lua:10826 + [x] 94% ImGui::GcCompactTransientWindowBuffers imgui.lua:10843 + [x] 96% ImGui::GcAwakeTransientWindowBuffers imgui.lua:10855 [x] 86% ImGui::SetActiveID imgui.lua:7429 [x] 100% ImGui::ClearActiveID imgui.lua:7495 [x] 98% ImGui::SetHoveredID imgui.lua:7609 @@ -229,51 +229,51 @@ imgui.cpp [x] 64% ImGui::IsClippedEx imgui.lua:7937 [x] 91% ImGui::SetLastItemData imgui.lua:7958 [x] 98% ImGui::SetLastItemDataForWindow imgui.lua:7969 - [x] 93% ImGui::SetLastItemDataForChildWindowItem imgui.lua:11277 - [x] 95% ImGui::CalcWrapWidthForPos imgui.lua:10031 + [x] 93% ImGui::SetLastItemDataForChildWindowItem imgui.lua:11283 + [x] 95% ImGui::CalcWrapWidthForPos imgui.lua:10037 [x] 77% ImGui::MemAlloc imgui.lua:457 [x] 79% ImGui::MemFree imgui.lua:470 [ ] ImGui::DemoMarker [x] 79% ImGui::DebugAllocHook imgui.lua:485 - [x] 91% ImGui::GetClipboardText imgui.lua:14307 - [x] 100% ImGui::SetClipboardText imgui.lua:14313 - [x] 100% ImGui::GetVersion imgui.lua:19164 - [x] 57% ImGui::GetIO imgui.lua:14320 - [x] 90% ImGui::GetPlatformIO imgui.lua:14323 - [x] 86% ImGui::GetDrawData imgui.lua:14260 - [x] 100% ImGui::GetTime imgui.lua:14266 - [x] 100% ImGui::GetFrameCount imgui.lua:19156 - [x] 82% GetViewportBgFgDrawList imgui.lua:13611 - [x] 80% ImGui::GetBackgroundDrawList imgui.lua:13634 - [x] 80% ImGui::GetForegroundDrawList imgui.lua:13646 - [x] 100% ImGui::GetDrawListSharedData imgui.lua:11525 - [x] 90% ImGui::StartMouseMovingWindow imgui.lua:11454 + [x] 91% ImGui::GetClipboardText imgui.lua:14332 + [x] 100% ImGui::SetClipboardText imgui.lua:14338 + [x] 100% ImGui::GetVersion imgui.lua:19190 + [x] 57% ImGui::GetIO imgui.lua:14345 + [x] 90% ImGui::GetPlatformIO imgui.lua:14348 + [x] 86% ImGui::GetDrawData imgui.lua:14285 + [x] 100% ImGui::GetTime imgui.lua:14291 + [x] 100% ImGui::GetFrameCount imgui.lua:19182 + [x] 82% GetViewportBgFgDrawList imgui.lua:13628 + [x] 80% ImGui::GetBackgroundDrawList imgui.lua:13651 + [x] 80% ImGui::GetForegroundDrawList imgui.lua:13663 + [x] 100% ImGui::GetDrawListSharedData imgui.lua:11531 + [x] 90% ImGui::StartMouseMovingWindow imgui.lua:11460 [x] 94% ImGui::StartMouseMovingWindowOrNode imgui.lua:4527 [x] 85% ImGui::StopMouseMovingWindow imgui.lua:7400 - [x] 95% ImGui::UpdateMouseMovingWindowNewFrame imgui.lua:11486 - [x] 88% ImGui::UpdateMouseMovingWindowEndFrame imgui.lua:11583 - [x] 65% TranslateWindow imgui.lua:11654 - [x] 88% ScaleWindow imgui.lua:14874 - [x] 100% IsWindowActiveAndVisible imgui.lua:9564 - [x] 93% ImGui::UpdateHoveredWindowAndCaptureFlags imgui.lua:13017 - [x] 55% SetupDrawListSharedData imgui.lua:13494 - [x] 87% ImGui::NewFrame imgui.lua:13740 - [x] 63% ChildWindowComparer imgui.lua:13660 - [x] 89% AddWindowToSortBuffer imgui.lua:13675 - [x] 86% AddWindowToDrawData imgui.lua:13689 - [x] 64% GetWindowDisplayLayer imgui.lua:13705 - [x] 100% AddRootWindowToDrawData imgui.lua:13711 - [x] 63% FlattenDrawDataIntoSingleLayer imgui.lua:13716 - [x] 83% InitViewportDrawData imgui.lua:13520 - [x] 52% ImGui::PushClipRect imgui.lua:13589 - [x] 42% ImGui::PopClipRect imgui.lua:13598 - [x] 60% ImGui::RenderDimmedBackgroundBehindWindow imgui.lua:18938 - [x] 83% ImGui::FindBottomMostVisibleWindowWithinBeginStack imgui.lua:18911 - [x] 80% ImGui::RenderDimmedBackgrounds imgui.lua:18959 - [x] 84% ImGui::EndFrame imgui.lua:14036 - [x] 74% ImGui::Render imgui.lua:14147 - [x] 17% ImGui::CalcTextSize imgui.lua:14220 - [x] 79% ImGui::FindHoveredWindowEx imgui.lua:12931 + [x] 95% ImGui::UpdateMouseMovingWindowNewFrame imgui.lua:11492 + [x] 88% ImGui::UpdateMouseMovingWindowEndFrame imgui.lua:11589 + [x] 65% TranslateWindow imgui.lua:11660 + [x] 88% ScaleWindow imgui.lua:14900 + [x] 100% IsWindowActiveAndVisible imgui.lua:9570 + [x] 93% ImGui::UpdateHoveredWindowAndCaptureFlags imgui.lua:13034 + [x] 55% SetupDrawListSharedData imgui.lua:13511 + [x] 88% ImGui::NewFrame imgui.lua:13757 + [x] 63% ChildWindowComparer imgui.lua:13677 + [x] 89% AddWindowToSortBuffer imgui.lua:13692 + [x] 86% AddWindowToDrawData imgui.lua:13706 + [x] 64% GetWindowDisplayLayer imgui.lua:13722 + [x] 100% AddRootWindowToDrawData imgui.lua:13728 + [x] 63% FlattenDrawDataIntoSingleLayer imgui.lua:13733 + [x] 83% InitViewportDrawData imgui.lua:13537 + [x] 52% ImGui::PushClipRect imgui.lua:13606 + [x] 42% ImGui::PopClipRect imgui.lua:13615 + [x] 60% ImGui::RenderDimmedBackgroundBehindWindow imgui.lua:18964 + [x] 83% ImGui::FindBottomMostVisibleWindowWithinBeginStack imgui.lua:18937 + [x] 80% ImGui::RenderDimmedBackgrounds imgui.lua:18985 + [x] 84% ImGui::EndFrame imgui.lua:14061 + [x] 74% ImGui::Render imgui.lua:14172 + [x] 17% ImGui::CalcTextSize imgui.lua:14245 + [x] 79% ImGui::FindHoveredWindowEx imgui.lua:12948 [x] 95% ImGui::IsItemActive imgui.lua:6979 [x] 97% ImGui::IsItemActivated imgui.lua:7020 [x] 95% ImGui::IsItemDeactivated imgui.lua:7006 @@ -288,103 +288,103 @@ imgui.cpp [x] 74% ImGui::IsItemVisible imgui.lua:7071 [x] 74% ImGui::IsItemEdited imgui.lua:7075 [x] 71% ImGui::SetNextItemAllowOverlap imgui.lua:7082 - [x] 93% ImGui::SetActiveIdUsingAllKeyboardKeys imgui.lua:11107 + [x] 93% ImGui::SetActiveIdUsingAllKeyboardKeys imgui.lua:11113 [x] 67% ImGui::GetItemID imgui.lua:7087 - [x] 100% ImGui::GetItemRectMin imgui.lua:11116 - [x] 100% ImGui::GetItemRectMax imgui.lua:11122 + [x] 100% ImGui::GetItemRectMin imgui.lua:11122 + [x] 100% ImGui::GetItemRectMax imgui.lua:11128 [x] 67% ImGui::GetItemRectSize imgui.lua:7096 [x] 67% ImGui::GetItemFlags imgui.lua:7091 - [x] 43% ImGui::BeginChild imgui.lua:11266 - [x] 81% ImGui::BeginChildEx imgui.lua:11132 - [x] 90% ImGui::EndChild imgui.lua:11282 + [x] 43% ImGui::BeginChild imgui.lua:11272 + [x] 81% ImGui::BeginChildEx imgui.lua:11138 + [x] 90% ImGui::EndChild imgui.lua:11288 [x] 83% ImGui::FindFrontMostVisibleChildWindow imgui.lua:5629 [x] 42% SetWindowConditionAllowFlags imgui.lua:5641 - [x] 73% ImGui::FindWindowByID imgui.lua:11667 - [x] 100% ImGui::FindWindowByName imgui.lua:11677 + [x] 73% ImGui::FindWindowByID imgui.lua:11673 + [x] 100% ImGui::FindWindowByName imgui.lua:11683 [x] 86% ApplyWindowSettings imgui.lua:5655 [x] 61% InitOrLoadWindowSettings imgui.lua:5694 [x] 73% CreateNewWindow imgui.lua:5715 [x] 75% GetWindowForTitleDisplay imgui.lua:6236 [ ] GetWindowForTitleAndMenuHeight - [x] 72% CalcWindowMinSize imgui.lua:9570 - [x] 86% CalcWindowSizeAfterConstraint imgui.lua:9615 - [x] 79% CalcWindowContentSizes imgui.lua:9650 - [x] 86% CalcWindowAutoFitSize imgui.lua:9675 - [x] 85% ImGui::CalcWindowNextAutoFitSize imgui.lua:9724 - [x] 84% GetWindowBgColorIdx imgui.lua:9735 - [x] 89% CalcResizePosSizeFromAnyCorner imgui.lua:9750 + [x] 72% CalcWindowMinSize imgui.lua:9576 + [x] 86% CalcWindowSizeAfterConstraint imgui.lua:9621 + [x] 79% CalcWindowContentSizes imgui.lua:9656 + [x] 86% CalcWindowAutoFitSize imgui.lua:9681 + [x] 85% ImGui::CalcWindowNextAutoFitSize imgui.lua:9730 + [x] 84% GetWindowBgColorIdx imgui.lua:9741 + [x] 89% CalcResizePosSizeFromAnyCorner imgui.lua:9756 [x] 94% GetResizeBorderRect imgui.lua:4856 [ ] ImGui::GetWindowResizeCornerID [ ] ImGui::GetWindowResizeBorderID - [x] 71% ImGui::UpdateWindowManualResize imgui.lua:9793 + [x] 71% ImGui::UpdateWindowManualResize imgui.lua:9799 [ ] ClampWindowPos - [x] 95% RenderWindowOuterSingleBorder imgui.lua:10424 - [x] 93% ImGui::RenderWindowOuterBorders imgui.lua:10599 = RenderWindowOuterBorders - [x] 83% ImGui::RenderWindowDecorations imgui.lua:10468 - [x] 93% ImGui::RenderWindowTitleBarContents imgui.lua:10609 - [x] 85% ImGui::UpdateWindowParentAndRootLinks imgui.lua:10705 - [x] 33% ImGui::UpdateWindowSkipRefresh imgui.lua:10735 - [x] 92% SetWindowActiveForSkipRefresh imgui.lua:10787 - [x] 81% ImGui::Begin imgui.lua:11694 - [x] 86% ImGui::End imgui.lua:12751 - [x] 84% ImGui::PushItemFlag imgui.lua:12840 - [x] 96% ImGui::PopItemFlag imgui.lua:12855 - [x] 79% ImGui::BeginDisabled imgui.lua:12870 - [x] 87% ImGui::EndDisabled imgui.lua:12886 - [x] 78% ImGui::BeginDisabledOverrideReenable imgui.lua:12902 - [x] 88% ImGui::EndDisabledOverrideReenable imgui.lua:12913 - [x] 54% ImGui::PushTextWrapPos imgui.lua:14671 - [x] 69% ImGui::PopTextWrapPos imgui.lua:14682 - [x] 100% GetCombinedRootWindow imgui.lua:14694 - [x] 100% ImGui::IsWindowChildOf imgui.lua:14713 - [x] 84% ImGui::IsWindowInBeginStack imgui.lua:14733 - [x] 100% ImGui::IsWindowWithinBeginStackOf imgui.lua:14745 - [x] 91% ImGui::IsWindowAbove imgui.lua:14763 - [x] 90% ImGui::IsWindowHovered imgui.lua:14789 + [x] 95% RenderWindowOuterSingleBorder imgui.lua:10430 + [x] 93% ImGui::RenderWindowOuterBorders imgui.lua:10605 = RenderWindowOuterBorders + [x] 83% ImGui::RenderWindowDecorations imgui.lua:10474 + [x] 93% ImGui::RenderWindowTitleBarContents imgui.lua:10615 + [x] 85% ImGui::UpdateWindowParentAndRootLinks imgui.lua:10711 + [x] 33% ImGui::UpdateWindowSkipRefresh imgui.lua:10741 + [x] 92% SetWindowActiveForSkipRefresh imgui.lua:10793 + [x] 82% ImGui::Begin imgui.lua:11700 + [x] 86% ImGui::End imgui.lua:12768 + [x] 84% ImGui::PushItemFlag imgui.lua:12857 + [x] 96% ImGui::PopItemFlag imgui.lua:12872 + [x] 79% ImGui::BeginDisabled imgui.lua:12887 + [x] 87% ImGui::EndDisabled imgui.lua:12903 + [x] 78% ImGui::BeginDisabledOverrideReenable imgui.lua:12919 + [x] 88% ImGui::EndDisabledOverrideReenable imgui.lua:12930 + [x] 54% ImGui::PushTextWrapPos imgui.lua:14697 + [x] 69% ImGui::PopTextWrapPos imgui.lua:14708 + [x] 100% GetCombinedRootWindow imgui.lua:14720 + [x] 100% ImGui::IsWindowChildOf imgui.lua:14739 + [x] 84% ImGui::IsWindowInBeginStack imgui.lua:14759 + [x] 100% ImGui::IsWindowWithinBeginStackOf imgui.lua:14771 + [x] 91% ImGui::IsWindowAbove imgui.lua:14789 + [x] 90% ImGui::IsWindowHovered imgui.lua:14815 [x] 67% ImGui::GetWindowDockID imgui.lua:4511 [x] 67% ImGui::IsWindowDocked imgui.lua:4515 - [x] 100% ImGui::GetWindowWidth imgui.lua:10859 - [x] 74% ImGui::GetWindowHeight imgui.lua:10992 - [x] 56% ImGui::GetWindowPos imgui.lua:10997 - [x] 61% ImGui::SetWindowPos imgui.lua:10867 - [x] 55% ImGui::GetWindowSize imgui.lua:11002 - [x] 76% ImGui::SetWindowSize imgui.lua:10909 - [x] 55% ImGui::SetWindowCollapsed imgui.lua:10954 - [x] 59% ImGui::SetWindowHitTestHole imgui.lua:10978 - [x] 97% ImGui::SetWindowHiddenAndSkipItemsForCurrentFrame imgui.lua:11025 - [x] 55% ImGui::IsWindowCollapsed imgui.lua:10984 - [x] 55% ImGui::IsWindowAppearing imgui.lua:10988 - [x] 72% ImGui::SetNextWindowPos imgui.lua:11034 - [x] 74% ImGui::SetNextWindowSize imgui.lua:11050 - [x] 87% ImGui::SetNextWindowSizeConstraints imgui.lua:11069 - [x] 65% ImGui::SetNextWindowContentSize imgui.lua:11368 - [x] 74% ImGui::SetNextWindowScroll imgui.lua:11375 - [x] 77% ImGui::SetNextWindowCollapsed imgui.lua:11383 - [x] 80% ImGui::SetNextWindowBgAlpha imgui.lua:11078 - [x] 80% ImGui::SetNextWindowViewport imgui.lua:11398 + [x] 100% ImGui::GetWindowWidth imgui.lua:10865 + [x] 74% ImGui::GetWindowHeight imgui.lua:10998 + [x] 56% ImGui::GetWindowPos imgui.lua:11003 + [x] 61% ImGui::SetWindowPos imgui.lua:10873 + [x] 55% ImGui::GetWindowSize imgui.lua:11008 + [x] 76% ImGui::SetWindowSize imgui.lua:10915 + [x] 55% ImGui::SetWindowCollapsed imgui.lua:10960 + [x] 59% ImGui::SetWindowHitTestHole imgui.lua:10984 + [x] 97% ImGui::SetWindowHiddenAndSkipItemsForCurrentFrame imgui.lua:11031 + [x] 55% ImGui::IsWindowCollapsed imgui.lua:10990 + [x] 55% ImGui::IsWindowAppearing imgui.lua:10994 + [x] 72% ImGui::SetNextWindowPos imgui.lua:11040 + [x] 74% ImGui::SetNextWindowSize imgui.lua:11056 + [x] 87% ImGui::SetNextWindowSizeConstraints imgui.lua:11075 + [x] 65% ImGui::SetNextWindowContentSize imgui.lua:11374 + [x] 74% ImGui::SetNextWindowScroll imgui.lua:11381 + [x] 77% ImGui::SetNextWindowCollapsed imgui.lua:11389 + [x] 80% ImGui::SetNextWindowBgAlpha imgui.lua:11084 + [x] 80% ImGui::SetNextWindowViewport imgui.lua:11404 [x] 76% ImGui::SetNextWindowDockID imgui.lua:4519 - [x] 50% ImGui::SetNextWindowClass imgui.lua:11405 - [x] 69% ImGui::SetNextWindowRefreshPolicy imgui.lua:11415 - [x] 47% ImGui::SetNextWindowFlags imgui.lua:11349 - [x] 47% ImGui::SetNextWindowChildFlags imgui.lua:11331 - [x] 100% ImGui::GetWindowDrawList imgui.lua:11084 - [x] 22% ImGui::GetWindowDpiScale imgui.lua:11435 - [x] 42% ImGui::GetWindowViewport imgui.lua:11439 - [x] 100% ImGui::GetFont imgui.lua:11089 + [x] 50% ImGui::SetNextWindowClass imgui.lua:11411 + [x] 69% ImGui::SetNextWindowRefreshPolicy imgui.lua:11421 + [x] 47% ImGui::SetNextWindowFlags imgui.lua:11355 + [x] 47% ImGui::SetNextWindowChildFlags imgui.lua:11337 + [x] 100% ImGui::GetWindowDrawList imgui.lua:11090 + [x] 22% ImGui::GetWindowDpiScale imgui.lua:11441 + [x] 42% ImGui::GetWindowViewport imgui.lua:11445 + [x] 100% ImGui::GetFont imgui.lua:11095 [ ] ImGui::GetFontBaked - [x] 100% ImGui::GetFontSize imgui.lua:11096 - [x] 100% ImGui::GetFontTexUvWhitePixel imgui.lua:11101 + [x] 100% ImGui::GetFontSize imgui.lua:11102 + [x] 100% ImGui::GetFontTexUvWhitePixel imgui.lua:11107 [-] ImGui::SetWindowFontScale obsolete - [x] 93% ImGui::PushFocusScope imgui.lua:15879 - [x] 56% ImGui::PopFocusScope imgui.lua:15888 - [x] 91% ImGui::IsInNavFocusRoute imgui.lua:15900 - [x] 71% ImGui::SetNavFocusScope imgui.lua:15914 - [x] 76% ImGui::FocusItem imgui.lua:19127 - [x] 100% ImGui::ActivateItemByID imgui.lua:19140 - [x] 81% ImGui::SetKeyboardFocusHere imgui.lua:19099 - [x] 98% ImGui::SetItemDefaultFocus imgui.lua:15954 - [x] 91% ImGui::SetStateStorage imgui.lua:19158 - [x] 74% ImGui::GetStateStorage imgui.lua:19157 + [x] 93% ImGui::PushFocusScope imgui.lua:15905 + [x] 56% ImGui::PopFocusScope imgui.lua:15914 + [x] 91% ImGui::IsInNavFocusRoute imgui.lua:15926 + [x] 71% ImGui::SetNavFocusScope imgui.lua:15940 + [x] 76% ImGui::FocusItem imgui.lua:19153 + [x] 100% ImGui::ActivateItemByID imgui.lua:19166 + [x] 81% ImGui::SetKeyboardFocusHere imgui.lua:19125 + [x] 98% ImGui::SetItemDefaultFocus imgui.lua:15980 + [x] 91% ImGui::SetStateStorage imgui.lua:19184 + [x] 74% ImGui::GetStateStorage imgui.lua:19183 [x] 72% ImGui::IsRectVisible imgui.lua:6795 -- FONTS, TEXTURES @@ -451,17 +451,17 @@ imgui.cpp [x] 75% ImGui::IsAnyMouseDown imgui.lua:9031 [x] 87% ImGui::GetMouseDragDelta imgui.lua:9221 [x] 71% ImGui::ResetMouseDragDelta imgui.lua:9240 - [x] 100% ImGui::GetMouseCursor imgui.lua:14332 - [x] 100% ImGui::SetMouseCursor imgui.lua:14341 - [x] 92% UpdateAliasKey imgui.lua:13111 - [x] 42% GetMergedModsFromKeys imgui.lua:13119 - [x] 85% ImGui::UpdateKeyboardInputs imgui.lua:13132 - [x] 88% ImGui::UpdateMouseInputs imgui.lua:13210 - [x] 91% LockWheelingWindow imgui.lua:13318 - [x] 76% FindBestWheelingWindow imgui.lua:13339 - [x] 92% ImGui::UpdateMouseWheel imgui.lua:13389 - [x] 60% ImGui::SetNextFrameWantCaptureKeyboard imgui.lua:19162 - [x] 60% ImGui::SetNextFrameWantCaptureMouse imgui.lua:19163 + [x] 100% ImGui::GetMouseCursor imgui.lua:14357 + [x] 100% ImGui::SetMouseCursor imgui.lua:14366 + [x] 92% UpdateAliasKey imgui.lua:13128 + [x] 42% GetMergedModsFromKeys imgui.lua:13136 + [x] 85% ImGui::UpdateKeyboardInputs imgui.lua:13149 + [x] 88% ImGui::UpdateMouseInputs imgui.lua:13227 + [x] 91% LockWheelingWindow imgui.lua:13335 + [x] 76% FindBestWheelingWindow imgui.lua:13356 + [x] 92% ImGui::UpdateMouseWheel imgui.lua:13406 + [x] 60% ImGui::SetNextFrameWantCaptureKeyboard imgui.lua:19188 + [x] 60% ImGui::SetNextFrameWantCaptureMouse imgui.lua:19189 [ ] GetInputSourceName [ ] GetMouseSourceName [ ] DebugPrintInputEvent @@ -471,23 +471,23 @@ imgui.cpp [x] 80% ImGui::SetKeyOwner imgui.lua:9412 [x] 59% ImGui::SetKeyOwnersForKeyChord imgui.lua:9434 [x] 79% ImGui::SetItemKeyOwner imgui.lua:9462 - [x] 85% ImGui::IsKeyChordPressed imgui.lua:9488 - [x] 76% ImGui::SetNextItemShortcut imgui.lua:9509 + [x] 75% ImGui::IsKeyChordPressed imgui.lua:9489 + [x] 76% ImGui::SetNextItemShortcut imgui.lua:9512 [x] 88% ImGui::ItemHandleShortcut imgui.lua:6337 - [x] 78% ImGui::Shortcut imgui.lua:9521 + [x] 73% ImGui::Shortcut imgui.lua:9525 -- ERROR CHECKING, STATE RECOVERY [ ] ImGui::DebugCheckVersionAndDataLayout - [x] 86% ImGui::ErrorCheckUsingSetCursorPosToExtendParentBoundaries imgui.lua:18874 + [x] 86% ImGui::ErrorCheckUsingSetCursorPosToExtendParentBoundaries imgui.lua:18900 [ ] ImGui::ErrorCheckNewFrameSanityChecks [ ] ImGui::ErrorCheckEndFrameSanityChecks - [x] 100% ImGui::ErrorRecoveryStoreState imgui.lua:19769 - [x] 91% ImGui::ErrorRecoveryTryToRecoverState imgui.lua:19787 - [x] 91% ImGui::ErrorRecoveryTryToRecoverWindowState imgui.lua:19816 - [x] 86% ImGui::ErrorLog imgui.lua:19905 - [x] 80% ImGui::ErrorCheckEndFrameFinalizeErrorTooltip imgui.lua:19949 - [x] 77% ImGui::BeginErrorTooltip imgui.lua:19987 - [x] 100% ImGui::EndErrorTooltip imgui.lua:20009 + [x] 100% ImGui::ErrorRecoveryStoreState imgui.lua:19787 + [x] 91% ImGui::ErrorRecoveryTryToRecoverState imgui.lua:19805 + [x] 91% ImGui::ErrorRecoveryTryToRecoverWindowState imgui.lua:19834 + [x] 86% ImGui::ErrorLog imgui.lua:19923 + [x] 80% ImGui::ErrorCheckEndFrameFinalizeErrorTooltip imgui.lua:19967 + [x] 77% ImGui::BeginErrorTooltip imgui.lua:20005 + [x] 100% ImGui::EndErrorTooltip imgui.lua:20027 -- ITEM SUBMISSION [x] 100% ImGui::KeepAliveID imgui.lua:6247 @@ -525,126 +525,126 @@ imgui.cpp [x] 91% ImGui::EndGroup imgui.lua:6839 -- SCROLLING - [x] 100% CalcScrollEdgeSnap imgui.lua:14913 - [x] 89% CalcNextScrollFromScrollTargetAndClamp imgui.lua:14924 - [x] 78% ImGui::ScrollToItem imgui.lua:15050 - [x] 86% ImGui::ScrollToRect imgui.lua:15058 - [x] 88% ImGui::ScrollToRectEx imgui.lua:14956 - [x] 74% ImGui::GetScrollX imgui.lua:15041 - [x] 74% ImGui::GetScrollY imgui.lua:15045 - [x] 74% ImGui::GetScrollMaxX imgui.lua:15037 - [x] 100% ImGui::GetScrollMaxY imgui.lua:15032 - [x] 75% ImGui::SetScrollX imgui.lua:15093 - [x] 75% ImGui::SetScrollY imgui.lua:15102 - [x] 78% ImGui::SetScrollFromPosX imgui.lua:15122 - [x] 78% ImGui::SetScrollFromPosY imgui.lua:15134 - [x] 95% ImGui::SetScrollHereX imgui.lua:15064 - [x] 95% ImGui::SetScrollHereY imgui.lua:15078 + [x] 100% CalcScrollEdgeSnap imgui.lua:14939 + [x] 89% CalcNextScrollFromScrollTargetAndClamp imgui.lua:14950 + [x] 78% ImGui::ScrollToItem imgui.lua:15076 + [x] 86% ImGui::ScrollToRect imgui.lua:15084 + [x] 88% ImGui::ScrollToRectEx imgui.lua:14982 + [x] 74% ImGui::GetScrollX imgui.lua:15067 + [x] 74% ImGui::GetScrollY imgui.lua:15071 + [x] 74% ImGui::GetScrollMaxX imgui.lua:15063 + [x] 100% ImGui::GetScrollMaxY imgui.lua:15058 + [x] 75% ImGui::SetScrollX imgui.lua:15119 + [x] 75% ImGui::SetScrollY imgui.lua:15128 + [x] 78% ImGui::SetScrollFromPosX imgui.lua:15148 + [x] 78% ImGui::SetScrollFromPosY imgui.lua:15160 + [x] 95% ImGui::SetScrollHereX imgui.lua:15090 + [x] 95% ImGui::SetScrollHereY imgui.lua:15104 -- TOOLTIPS - [x] 100% ImGui::BeginTooltip imgui.lua:15202 - [x] 100% ImGui::BeginItemTooltip imgui.lua:15206 - [x] 83% ImGui::BeginTooltipEx imgui.lua:15149 - [x] 73% ImGui::EndTooltip imgui.lua:15213 - [x] 21% ImGui::SetTooltip imgui.lua:15220 + [x] 100% ImGui::BeginTooltip imgui.lua:15228 + [x] 100% ImGui::BeginItemTooltip imgui.lua:15232 + [x] 83% ImGui::BeginTooltipEx imgui.lua:15175 + [x] 73% ImGui::EndTooltip imgui.lua:15239 + [x] 21% ImGui::SetTooltip imgui.lua:15246 [ ] ImGui::SetTooltipV - [x] 52% ImGui::SetItemTooltip imgui.lua:15232 + [x] 52% ImGui::SetItemTooltip imgui.lua:15258 [ ] ImGui::SetItemTooltipV -- POPUPS - [x] 73% ImGui::IsPopupOpen imgui.lua:11532 - [x] 82% ImGui::GetTopMostPopupModal imgui.lua:11567 - [x] 81% ImGui::GetTopMostAndVisiblePopupModal imgui.lua:18927 - [x] 79% ImGui::FindBlockingModal imgui.lua:15256 - [x] 26% ImGui::OpenPopup imgui.lua:15289 - [x] 86% ImGui::OpenPopupEx imgui.lua:15310 - [x] 73% ImGui::ClosePopupsOverWindow imgui.lua:15373 - [x] 80% ImGui::ClosePopupsExceptModals imgui.lua:18993 - [x] 62% ImGui::ClosePopupToLevel imgui.lua:15431 - [x] 81% ImGui::CloseCurrentPopup imgui.lua:15467 - [x] 81% ImGui::BeginPopupEx imgui.lua:15507 - [x] 80% ImGui::BeginPopupMenuEx imgui.lua:15530 - [x] 83% ImGui::BeginPopup imgui.lua:15556 - [x] 83% ImGui::BeginPopupModal imgui.lua:19011 - [x] 95% ImGui::EndPopup imgui.lua:15569 - [x] 38% ImGui::GetMouseButtonFromPopupFlags imgui.lua:15790 - [x] 94% ImGui::IsPopupOpenRequestForItem imgui.lua:15802 - [x] 85% ImGui::IsPopupOpenRequestForWindow imgui.lua:19041 - [x] 83% ImGui::OpenPopupOnItemClick imgui.lua:15819 - [x] 83% ImGui::BeginPopupContextItem imgui.lua:15853 - [x] 85% ImGui::BeginPopupContextWindow imgui.lua:19055 - [x] 88% ImGui::BeginPopupContextVoid imgui.lua:19065 - [x] 87% ImGui::FindBestWindowPosForPopupEx imgui.lua:15606 - [x] 87% ImGui::GetPopupAllowedExtentRect imgui.lua:15699 - [x] 92% ImGui::FindBestWindowPosForPopup imgui.lua:15722 + [x] 73% ImGui::IsPopupOpen imgui.lua:11538 + [x] 82% ImGui::GetTopMostPopupModal imgui.lua:11573 + [x] 81% ImGui::GetTopMostAndVisiblePopupModal imgui.lua:18953 + [x] 79% ImGui::FindBlockingModal imgui.lua:15282 + [x] 26% ImGui::OpenPopup imgui.lua:15315 + [x] 86% ImGui::OpenPopupEx imgui.lua:15336 + [x] 73% ImGui::ClosePopupsOverWindow imgui.lua:15399 + [x] 80% ImGui::ClosePopupsExceptModals imgui.lua:19019 + [x] 62% ImGui::ClosePopupToLevel imgui.lua:15457 + [x] 81% ImGui::CloseCurrentPopup imgui.lua:15493 + [x] 81% ImGui::BeginPopupEx imgui.lua:15533 + [x] 80% ImGui::BeginPopupMenuEx imgui.lua:15556 + [x] 83% ImGui::BeginPopup imgui.lua:15582 + [x] 83% ImGui::BeginPopupModal imgui.lua:19037 + [x] 95% ImGui::EndPopup imgui.lua:15595 + [x] 38% ImGui::GetMouseButtonFromPopupFlags imgui.lua:15816 + [x] 94% ImGui::IsPopupOpenRequestForItem imgui.lua:15828 + [x] 85% ImGui::IsPopupOpenRequestForWindow imgui.lua:19067 + [x] 83% ImGui::OpenPopupOnItemClick imgui.lua:15845 + [x] 83% ImGui::BeginPopupContextItem imgui.lua:15879 + [x] 85% ImGui::BeginPopupContextWindow imgui.lua:19081 + [x] 88% ImGui::BeginPopupContextVoid imgui.lua:19091 + [x] 87% ImGui::FindBestWindowPosForPopupEx imgui.lua:15632 + [x] 87% ImGui::GetPopupAllowedExtentRect imgui.lua:15725 + [x] 92% ImGui::FindBestWindowPosForPopup imgui.lua:15748 -- WINDOW FOCUS - [x] 51% ImGui::SetWindowFocus imgui.lua:11008 - [x] 71% ImGui::SetNextWindowFocus imgui.lua:11392 - [x] 87% ImGui::IsWindowFocused imgui.lua:14845 + [x] 51% ImGui::SetWindowFocus imgui.lua:11014 + [x] 71% ImGui::SetNextWindowFocus imgui.lua:11398 + [x] 87% ImGui::IsWindowFocused imgui.lua:14871 [x] 94% ImGui::FindWindowFocusIndex imgui.lua:7203 [x] 81% ImGui::UpdateWindowInFocusOrderList imgui.lua:7238 [x] 82% ImGui::BringWindowToFocusFront imgui.lua:7263 [x] 56% ImGui::BringWindowToDisplayFront imgui.lua:7289 - [x] 54% ImGui::BringWindowToDisplayBack imgui.lua:18901 + [x] 54% ImGui::BringWindowToDisplayBack imgui.lua:18927 [x] 35% ImGui::BringWindowToDisplayBehind imgui.lua:7310 - [x] 41% ImGui::FindWindowDisplayIndex imgui.lua:18895 + [x] 41% ImGui::FindWindowDisplayIndex imgui.lua:18921 [x] 87% ImGui::FocusWindow imgui.lua:7124 [x] 84% ImGui::FocusTopMostWindowUnderOne imgui.lua:7322 -- KEYBOARD/GAMEPAD NAVIGATION - [x] 93% ImGui::SetNavCursorVisible imgui.lua:19146 - [x] 94% ImGui::SetNavCursorVisibleAfterMove imgui.lua:15975 - [x] 80% ImGui::SetNavWindow imgui.lua:15991 - [x] 100% ImGui::NavHighlightActivated imgui.lua:16071 - [x] 100% ImGui::NavClearPreferredPosForAxis imgui.lua:16005 - [x] 95% ImGui::SetNavID imgui.lua:16014 + [x] 93% ImGui::SetNavCursorVisible imgui.lua:19172 + [x] 94% ImGui::SetNavCursorVisibleAfterMove imgui.lua:16001 + [x] 80% ImGui::SetNavWindow imgui.lua:16017 + [x] 100% ImGui::NavHighlightActivated imgui.lua:16097 + [x] 100% ImGui::NavClearPreferredPosForAxis imgui.lua:16031 + [x] 95% ImGui::SetNavID imgui.lua:16040 [x] 96% ImGui::SetFocusID imgui.lua:7362 - [x] 90% ImGetDirQuadrantFromDelta imgui.lua:17041 - [x] 100% NavScoreItemDistInterval imgui.lua:17048 - [x] 77% ImGui::NavScoreItem imgui.lua:17062 - [x] 93% ImGui::NavApplyItemToResult imgui.lua:17168 - [x] 100% ImGui::NavUpdateCurrentWindowIsScrollPushableX imgui.lua:17495 - [x] 94% ImGui::NavProcessItem imgui.lua:17260 - [x] 90% ImGui::NavProcessItemForTabbingRequest imgui.lua:17200 - [x] 100% ImGui::NavMoveRequestButNoResultYet imgui.lua:17036 - [x] 89% ImGui::NavMoveRequestSubmit imgui.lua:16514 - [x] 92% ImGui::NavMoveRequestResolveWithLastItem imgui.lua:17183 - [x] 92% ImGui::NavMoveRequestResolveWithPastTreeNode imgui.lua:17504 - [x] 93% ImGui::NavMoveRequestCancel imgui.lua:17515 - [x] 95% ImGui::NavMoveRequestForward imgui.lua:17527 - [x] 78% ImGui::NavMoveRequestTryWrapping imgui.lua:17542 - [x] 93% ImGui::NavSaveLastChildNavWindowIntoParent imgui.lua:16032 - [x] 57% ImGui::NavRestoreLastChildNavWindow imgui.lua:16045 - [x] 86% ImGui::NavRestoreLayer imgui.lua:16053 - [x] 100% ImGui::NavUpdateAnyRequestFlag imgui.lua:16077 - [x] 88% ImGui::NavInitWindow imgui.lua:16088 - [x] 97% ImGui::NavCalcPreferredRefPosSource imgui.lua:16120 - [x] 94% ImGui::NavCalcPreferredRefPos imgui.lua:16139 - [x] 91% ImGui::GetNavTweakPressedAmount imgui.lua:16181 - [x] 85% ImGui::NavUpdate imgui.lua:16783 - [x] 88% ImGui::NavInitRequestApplyResult imgui.lua:17334 - [x] 81% NavBiasScoringRect imgui.lua:16543 - [x] 83% ImGui::NavUpdateCreateMoveRequest imgui.lua:16644 - [x] 87% ImGui::NavUpdateCreateTabbingRequest imgui.lua:16754 - [x] 85% ImGui::NavMoveRequestApplyResult imgui.lua:17365 - [x] 91% ImGui::NavUpdateCancelRequest imgui.lua:16991 - [x] 83% ImGui::NavUpdateContextMenuRequest imgui.lua:16479 - [x] 90% ImGui::NavUpdatePageUpPageDown imgui.lua:16575 - [x] 81% ImGui::NavEndFrame imgui.lua:19281 - [x] 83% ImGui::NavUpdateCreateWrappingRequest imgui.lua:19225 + [x] 90% ImGetDirQuadrantFromDelta imgui.lua:17067 + [x] 100% NavScoreItemDistInterval imgui.lua:17074 + [x] 77% ImGui::NavScoreItem imgui.lua:17088 + [x] 93% ImGui::NavApplyItemToResult imgui.lua:17194 + [x] 100% ImGui::NavUpdateCurrentWindowIsScrollPushableX imgui.lua:17521 + [x] 94% ImGui::NavProcessItem imgui.lua:17286 + [x] 90% ImGui::NavProcessItemForTabbingRequest imgui.lua:17226 + [x] 100% ImGui::NavMoveRequestButNoResultYet imgui.lua:17062 + [x] 89% ImGui::NavMoveRequestSubmit imgui.lua:16540 + [x] 92% ImGui::NavMoveRequestResolveWithLastItem imgui.lua:17209 + [x] 92% ImGui::NavMoveRequestResolveWithPastTreeNode imgui.lua:17530 + [x] 93% ImGui::NavMoveRequestCancel imgui.lua:17541 + [x] 95% ImGui::NavMoveRequestForward imgui.lua:17553 + [x] 78% ImGui::NavMoveRequestTryWrapping imgui.lua:17568 + [x] 93% ImGui::NavSaveLastChildNavWindowIntoParent imgui.lua:16058 + [x] 57% ImGui::NavRestoreLastChildNavWindow imgui.lua:16071 + [x] 86% ImGui::NavRestoreLayer imgui.lua:16079 + [x] 100% ImGui::NavUpdateAnyRequestFlag imgui.lua:16103 + [x] 88% ImGui::NavInitWindow imgui.lua:16114 + [x] 97% ImGui::NavCalcPreferredRefPosSource imgui.lua:16146 + [x] 94% ImGui::NavCalcPreferredRefPos imgui.lua:16165 + [x] 91% ImGui::GetNavTweakPressedAmount imgui.lua:16207 + [x] 85% ImGui::NavUpdate imgui.lua:16809 + [x] 88% ImGui::NavInitRequestApplyResult imgui.lua:17360 + [x] 81% NavBiasScoringRect imgui.lua:16569 + [x] 83% ImGui::NavUpdateCreateMoveRequest imgui.lua:16670 + [x] 87% ImGui::NavUpdateCreateTabbingRequest imgui.lua:16780 + [x] 85% ImGui::NavMoveRequestApplyResult imgui.lua:17391 + [x] 91% ImGui::NavUpdateCancelRequest imgui.lua:17017 + [x] 83% ImGui::NavUpdateContextMenuRequest imgui.lua:16505 + [x] 90% ImGui::NavUpdatePageUpPageDown imgui.lua:16601 + [x] 81% ImGui::NavEndFrame imgui.lua:19307 + [x] 83% ImGui::NavUpdateCreateWrappingRequest imgui.lua:19251 [x] 85% ImGui::IsWindowNavFocusable imgui.lua:7217 [x] 67% FindWindowNavFocusable imgui.lua:7225 - [x] 86% NavUpdateWindowingTarget imgui.lua:16209 - [x] 92% ImGui::NavUpdateWindowingApplyFocus imgui.lua:16232 - [x] 88% ImGui::NavUpdateWindowing imgui.lua:16270 - [x] 67% GetFallbackWindowNameForWindowingList imgui.lua:19182 - [x] 84% ImGui::NavUpdateWindowingOverlay imgui.lua:19196 + [x] 86% NavUpdateWindowingTarget imgui.lua:16235 + [x] 92% ImGui::NavUpdateWindowingApplyFocus imgui.lua:16258 + [x] 88% ImGui::NavUpdateWindowing imgui.lua:16296 + [x] 67% GetFallbackWindowNameForWindowingList imgui.lua:19208 + [x] 84% ImGui::NavUpdateWindowingOverlay imgui.lua:19222 -- DRAG AND DROP [x] 55% ImGui::IsDragDropActive imgui.lua:525 [x] 73% ImGui::ClearDragDrop imgui.lua:529 - [x] 82% ImGui::BeginTooltipHidden imgui.lua:19078 + [x] 82% ImGui::BeginTooltipHidden imgui.lua:19104 [x] 88% ImGui::BeginDragDropSource imgui.lua:547 [x] 86% ImGui::EndDragDropSource imgui.lua:648 [x] 62% ImGui::SetDragDropPayload imgui.lua:665 @@ -697,38 +697,38 @@ imgui.cpp [x] 78% WindowSettingsHandler_WriteAll imgui.lua:6001 -- LOCALIZATION - [x] 84% ImGui::LocalizeRegisterEntries imgui.lua:17568 + [x] 84% ImGui::LocalizeRegisterEntries imgui.lua:17594 -- VIEWPORTS, PLATFORM WINDOWS - [x] 83% ImGuiViewport::GetDebugName imgui.lua:17602 - [x] 76% ImGuiPlatformIO::ClearPlatformHandlers imgui.lua:17607 - [x] 69% ImGuiPlatformIO::ClearRendererHandlers imgui.lua:17621 - [x] 78% ImGui::GetMainViewport imgui.lua:17630 - [x] 88% ImGui::FindViewportByID imgui.lua:17639 + [x] 83% ImGuiViewport::GetDebugName imgui.lua:17628 + [x] 76% ImGuiPlatformIO::ClearPlatformHandlers imgui.lua:17633 + [x] 69% ImGuiPlatformIO::ClearRendererHandlers imgui.lua:17647 + [x] 78% ImGui::GetMainViewport imgui.lua:17656 + [x] 88% ImGui::FindViewportByID imgui.lua:17665 [ ] ImGui::FindViewportByPlatformHandle - [x] 98% ImGui::SetCurrentViewport imgui.lua:17651 - [x] 99% ImGui::SetWindowViewport imgui.lua:17679 - [x] 86% ImGui::GetWindowAlwaysWantOwnViewport imgui.lua:17692 - [x] 86% IsViewportAbove imgui.lua:17714 - [x] 89% ImGui::UpdateTryMergeWindowIntoHostViewport imgui.lua:17739 - [x] 83% ImGui::UpdateTryMergeWindowIntoHostViewports imgui.lua:17799 - [x] 88% ImGui::TranslateWindowsInViewport imgui.lua:17811 - [x] 94% ImGui::ScaleWindowsInViewport imgui.lua:14885 - [x] 85% ImGui::FindHoveredViewportFromPlatformWindowStack imgui.lua:17837 - [x] 87% ImGui::UpdateViewportsNewFrame imgui.lua:17854 - [x] 78% ImGui::UpdateViewportsEndFrame imgui.lua:18141 - [x] 81% ImGui::AddUpdateViewport imgui.lua:18175 - [x] 80% ImGui::DestroyViewport imgui.lua:18255 - [x] 93% ImGui::WindowSelectViewport imgui.lua:18281 - [x] 73% ImGui::WindowSyncOwnedViewport imgui.lua:18407 - [x] 88% ImGui::UpdatePlatformWindows imgui.lua:18511 - [x] 85% ImGui::RenderPlatformWindowsDefault imgui.lua:18629 - [x] 87% ImGui::FindPlatformMonitorForPos imgui.lua:18661 - [x] 78% ImGui::FindPlatformMonitorForRect imgui.lua:18677 - [x] 93% ImGui::UpdateViewportPlatformMonitor imgui.lua:18718 - [x] 89% ImGui::GetViewportPlatformMonitor imgui.lua:18725 - [x] 97% ImGui::DestroyPlatformWindow imgui.lua:18737 - [x] 77% ImGui::DestroyPlatformWindows imgui.lua:18763 + [x] 98% ImGui::SetCurrentViewport imgui.lua:17677 + [x] 99% ImGui::SetWindowViewport imgui.lua:17705 + [x] 86% ImGui::GetWindowAlwaysWantOwnViewport imgui.lua:17718 + [x] 86% IsViewportAbove imgui.lua:17740 + [x] 89% ImGui::UpdateTryMergeWindowIntoHostViewport imgui.lua:17765 + [x] 83% ImGui::UpdateTryMergeWindowIntoHostViewports imgui.lua:17825 + [x] 88% ImGui::TranslateWindowsInViewport imgui.lua:17837 + [x] 94% ImGui::ScaleWindowsInViewport imgui.lua:14911 + [x] 85% ImGui::FindHoveredViewportFromPlatformWindowStack imgui.lua:17863 + [x] 87% ImGui::UpdateViewportsNewFrame imgui.lua:17880 + [x] 78% ImGui::UpdateViewportsEndFrame imgui.lua:18167 + [x] 81% ImGui::AddUpdateViewport imgui.lua:18201 + [x] 80% ImGui::DestroyViewport imgui.lua:18281 + [x] 93% ImGui::WindowSelectViewport imgui.lua:18307 + [x] 73% ImGui::WindowSyncOwnedViewport imgui.lua:18433 + [x] 88% ImGui::UpdatePlatformWindows imgui.lua:18537 + [x] 85% ImGui::RenderPlatformWindowsDefault imgui.lua:18655 + [x] 87% ImGui::FindPlatformMonitorForPos imgui.lua:18687 + [x] 78% ImGui::FindPlatformMonitorForRect imgui.lua:18703 + [x] 93% ImGui::UpdateViewportPlatformMonitor imgui.lua:18744 + [x] 89% ImGui::GetViewportPlatformMonitor imgui.lua:18751 + [x] 97% ImGui::DestroyPlatformWindow imgui.lua:18763 + [x] 77% ImGui::DestroyPlatformWindows imgui.lua:18789 -- DOCKING [x] 61% ImGuiDockRequest::ImGuiDockRequest imgui.lua:1019 @@ -845,47 +845,47 @@ imgui.cpp [ ] InitializeDefaultPlatformHandlers -- METRICS/DEBUGGER WINDOW - [x] 97% MetricsHelpMarker imgui.lua:20045 = MetricsHelpMarker - [x] 93% ImGui::DebugRenderViewportThumbnail imgui.lua:18786 - [x] 92% RenderViewportsThumbnails imgui.lua:18825 + [x] 97% MetricsHelpMarker imgui.lua:20063 = MetricsHelpMarker + [x] 93% ImGui::DebugRenderViewportThumbnail imgui.lua:18812 + [x] 92% RenderViewportsThumbnails imgui.lua:18851 [ ] ViewportComparerByLastFocusedStampCount [ ] ImGui::DebugRenderKeyboardPreview - [x] 52% ImGui::DebugTextEncoding imgui.lua:20947 + [x] 52% ImGui::DebugTextEncoding imgui.lua:20965 [ ] DebugFlashStyleColorStop [ ] ImGui::DebugFlashStyleColor [ ] ImGui::UpdateDebugToolFlashStyleColor [ ] ImGui::DebugTextureIDToU64 [ ] FormatTextureRefForDebugDisplay - [x] 52% ImGui::ShowFontAtlas imgui.lua:20246 - [x] 84% ImGui::DebugNodeTexture imgui.lua:20213 - [x] 42% ImGui::ShowMetricsWindow imgui.lua:21012 + [x] 52% ImGui::ShowFontAtlas imgui.lua:20264 + [x] 84% ImGui::DebugNodeTexture imgui.lua:20231 + [x] 42% ImGui::ShowMetricsWindow imgui.lua:21030 [ ] ImGui::DebugBreakClearData [ ] ImGui::DebugBreakButtonTooltip [ ] ImGui::DebugBreakButton - [x] 87% ImGui::DebugNodeColumns imgui.lua:20591 - [x] 48% DebugNodeDockNodeFlags imgui.lua:20779 - [x] 79% ImGui::DebugNodeDockNode imgui.lua:20796 - [x] 28% ImGui::DebugNodeDrawList imgui.lua:20613 + [x] 87% ImGui::DebugNodeColumns imgui.lua:20609 + [x] 48% DebugNodeDockNodeFlags imgui.lua:20797 + [x] 79% ImGui::DebugNodeDockNode imgui.lua:20814 + [x] 28% ImGui::DebugNodeDrawList imgui.lua:20631 [ ] ImGui::DebugNodeDrawCmdShowMeshAndBoundingBox [ ] CalcFontGlyphSrcOverlapMask - [x] 60% ImGui::DebugNodeFont imgui.lua:20136 - [x] 59% ImGui::DebugNodeFontGlyphsForSrcMask imgui.lua:20081 - [x] 89% ImGui::DebugNodeFontGlyph imgui.lua:20067 - [x] 37% ImGui::DebugNodeStorage imgui.lua:20601 - [x] 68% ImGui::DebugNodeTabBar imgui.lua:20674 - [x] 62% ImGui::DebugNodeViewport imgui.lua:20929 + [x] 60% ImGui::DebugNodeFont imgui.lua:20154 + [x] 59% ImGui::DebugNodeFontGlyphsForSrcMask imgui.lua:20099 + [x] 89% ImGui::DebugNodeFontGlyph imgui.lua:20085 + [x] 37% ImGui::DebugNodeStorage imgui.lua:20619 + [x] 68% ImGui::DebugNodeTabBar imgui.lua:20692 + [x] 62% ImGui::DebugNodeViewport imgui.lua:20947 [ ] ImGui::DebugNodePlatformMonitor - [x] 70% ImGui::DebugNodeWindow imgui.lua:20840 - [x] 87% ImGui::DebugNodeWindowSettings imgui.lua:20898 - [x] 73% ImGui::DebugNodeWindowsList imgui.lua:20904 - [x] 67% ImGui::DebugNodeWindowsListByBeginStackParent imgui.lua:20915 + [x] 70% ImGui::DebugNodeWindow imgui.lua:20858 + [x] 87% ImGui::DebugNodeWindowSettings imgui.lua:20916 + [x] 73% ImGui::DebugNodeWindowsList imgui.lua:20922 + [x] 67% ImGui::DebugNodeWindowsListByBeginStackParent imgui.lua:20933 -- DEBUG LOG WINDOW - [x] 5% ImGui::DebugLog imgui.lua:19886 + [x] 5% ImGui::DebugLog imgui.lua:19904 [ ] ImGui::DebugLogV - [x] 93% SameLineOrWrap imgui.lua:20318 - [x] 61% ShowDebugLogFlag imgui.lua:20325 - [x] 65% ImGui::ShowDebugLogWindow imgui.lua:20338 + [x] 93% SameLineOrWrap imgui.lua:20336 + [x] 61% ShowDebugLogFlag imgui.lua:20343 + [x] 65% ImGui::ShowDebugLogWindow imgui.lua:20356 [ ] ImGui::DebugTextUnformattedWithLocateItem -- OTHER DEBUG TOOLS (ITEM PICKER, ID STACK TOOL) @@ -897,13 +897,13 @@ imgui.cpp [ ] ImGui::DebugLocateItemResolveWithLastItem [ ] ImGui::DebugStartItemPicker [ ] ImGui::UpdateDebugToolItemPicker - [x] 75% DebugItemPathQuery_UpdateAndGetHookId imgui.lua:20409 - [x] 49% ImGui::UpdateDebugToolItemPathQuery imgui.lua:20438 - [x] 47% ImGui::DebugHookIdInfo imgui.lua:20450 + [x] 75% DebugItemPathQuery_UpdateAndGetHookId imgui.lua:20427 + [x] 49% ImGui::UpdateDebugToolItemPathQuery imgui.lua:20456 + [x] 47% ImGui::DebugHookIdInfo imgui.lua:20468 [ ] DebugItemPathQuery_FormatLevelInfo [ ] DebugItemPathQuery_GetResultAsPath - [x] 51% ImGui::ShowIDStackToolWindow imgui.lua:20509 - [x] 78% ImGui::ShowFontSelector imgui.lua:20051 + [x] 51% ImGui::ShowIDStackToolWindow imgui.lua:20527 + [x] 78% ImGui::ShowFontSelector imgui.lua:20069 ==================================================================================================== imgui_widgets.cpp @@ -915,17 +915,17 @@ imgui_widgets.cpp [x] 29% ImGui::Text imgui_widgets.lua:222 [x] 60% ImGui::TextV imgui_widgets.lua:208 [x] 30% ImGui::TextColored imgui_widgets.lua:233 - [x] 83% ImGui::TextColoredV imgui_widgets.lua:7423 = ImGui . TextColored(...) + [x] 83% ImGui::TextColoredV imgui_widgets.lua:7447 = ImGui . TextColored(...) [x] 17% ImGui::TextDisabled imgui_widgets.lua:241 - [x] 89% ImGui::TextDisabledV imgui_widgets.lua:7424 = ImGui . TextDisabled(...) + [x] 89% ImGui::TextDisabledV imgui_widgets.lua:7448 = ImGui . TextDisabled(...) [x] 10% ImGui::TextWrapped imgui_widgets.lua:250 - [x] 91% ImGui::TextWrappedV imgui_widgets.lua:7425 = ImGui . TextWrapped(...) + [x] 91% ImGui::TextWrappedV imgui_widgets.lua:7449 = ImGui . TextWrapped(...) [x] 2% ImGui::TextAligned imgui_widgets.lua:269 - [x] 67% ImGui::TextAlignedV imgui_widgets.lua:7426 = ImGui . TextAligned(...) + [x] 67% ImGui::TextAlignedV imgui_widgets.lua:7450 = ImGui . TextAligned(...) [x] 4% ImGui::LabelText imgui_widgets.lua:305 - [x] 89% ImGui::LabelTextV imgui_widgets.lua:7427 = ImGui . LabelText(...) + [x] 89% ImGui::LabelTextV imgui_widgets.lua:7451 = ImGui . LabelText(...) [x] 2% ImGui::BulletText imgui_widgets.lua:340 - [x] 77% ImGui::BulletTextV imgui_widgets.lua:7428 = ImGui . BulletText(...) + [x] 77% ImGui::BulletTextV imgui_widgets.lua:7452 = ImGui . BulletText(...) -- Widgets: Main [x] 85% ImGui::ButtonBehavior imgui_widgets.lua:488 @@ -966,7 +966,7 @@ imgui_widgets.cpp [x] 100% ImGui::SeparatorText imgui_widgets.lua:1916 [x] 82% ImGui::SplitterBehavior imgui.lua:4592 [ ] ShrinkWidthItemComparer - [x] 58% ImGui::ShrinkWidths imgui_widgets.lua:9347 + [x] 58% ImGui::ShrinkWidths imgui_widgets.lua:9371 -- Widgets: ComboBox [x] 100% CalcMaxPopupHeightFromItemCount imgui_widgets.lua:1945 @@ -1040,7 +1040,7 @@ imgui_widgets.cpp [x] 55% ImParseFormatPrecision imgui_widgets.lua:2777 [x] 88% ImGui::TempInputText imgui_widgets.lua:2818 [x] 63% ImGui::TempInputScalar imgui_widgets.lua:2862 - [x] 63% ImGui::SetNextItemRefVal imgui_widgets.lua:7432 + [x] 63% ImGui::SetNextItemRefVal imgui_widgets.lua:7456 [x] 74% ImGui::InputScalar imgui_widgets.lua:2913 [x] 71% ImGui::InputScalarN imgui_widgets.lua:3030 [x] 65% ImGui::InputFloat imgui_widgets.lua:3118 @@ -1093,56 +1093,56 @@ imgui_widgets.cpp [ ] ImGuiInputTextState::ReloadUserBufAndSelectAll [ ] ImGuiInputTextState::ReloadUserBufAndKeepSelection [ ] ImGuiInputTextState::ReloadUserBufAndMoveToEnd - [x] 18% ImGuiInputTextCallbackData::ImGuiInputTextCallbackData imgui_h.lua:2371 - [x] 61% ImGuiInputTextCallbackData::DeleteChars imgui_h.lua:2375 - [x] 33% ImGuiInputTextCallbackData::InsertChars imgui_h.lua:2392 + [x] 18% ImGuiInputTextCallbackData::ImGuiInputTextCallbackData imgui_h.lua:2405 + [x] 61% ImGuiInputTextCallbackData::DeleteChars imgui_h.lua:2409 + [x] 33% ImGuiInputTextCallbackData::InsertChars imgui_h.lua:2426 [x] 92% ImGui::PushPasswordFont imgui_widgets.lua:4869 [x] 98% ImGui::PopPasswordFont imgui_widgets.lua:4884 [x] 80% InputTextFilterCharacter imgui_widgets.lua:4904 [x] 74% InputTextReconcileUndoState imgui_widgets.lua:5042 [x] 86% ImGui::InputTextDeactivateHook imgui_widgets.lua:5084 [x] 74% ImLowerBound imgui_widgets.lua:5186 - [x] 55% InputTextLineIndexBuild imgui_widgets.lua:5117 - [x] 65% InputTextLineIndexGetPosOffset imgui_widgets.lua:5214 + [x] 55% InputTextLineIndexBuild imgui_widgets.lua:5118 + [x] 77% InputTextLineIndexGetPosOffset imgui_widgets.lua:5214 [x] 87% ImGui::InputTextEx imgui_widgets.lua:5259 [ ] ImGui::DebugNodeInputTextState -- Widgets: ColorEdit, ColorPicker, ColorButton, etc. - [x] 54% ImGui::ColorEdit3 imgui_widgets.lua:6662 + [x] 54% ImGui::ColorEdit3 imgui_widgets.lua:6683 [x] 88% ColorEditRestoreH imgui_widgets.lua:6329 [x] 87% ColorEditRestoreHS imgui_widgets.lua:6346 - [x] 61% ImGui::ColorEdit4 imgui_widgets.lua:6389 - [x] 70% ImGui::ColorPicker3 imgui_widgets.lua:6670 - [x] 98% RenderArrowsForVerticalBar imgui_widgets.lua:6698 - [x] 80% ImGui::ColorPicker4 imgui_widgets.lua:6717 - [x] 64% ImGui::ColorButton imgui_widgets.lua:7144 + [x] 62% ImGui::ColorEdit4 imgui_widgets.lua:6389 + [x] 70% ImGui::ColorPicker3 imgui_widgets.lua:6691 + [x] 98% RenderArrowsForVerticalBar imgui_widgets.lua:6719 + [x] 80% ImGui::ColorPicker4 imgui_widgets.lua:6738 + [x] 68% ImGui::ColorButton imgui_widgets.lua:7165 [-] ImGui::SetColorEditOptions obsolete - [x] 73% ImGui::ColorTooltip imgui_widgets.lua:7236 - [x] 72% ImGui::ColorEditOptionsPopup imgui_widgets.lua:7280 - [x] 75% ImGui::ColorPickerOptionsPopup imgui_widgets.lua:7356 + [x] 73% ImGui::ColorTooltip imgui_widgets.lua:7260 + [x] 72% ImGui::ColorEditOptionsPopup imgui_widgets.lua:7304 + [x] 75% ImGui::ColorPickerOptionsPopup imgui_widgets.lua:7380 -- Widgets: TreeNode, CollapsingHeader, etc. - [x] 78% ImGui::TreeNode imgui_widgets.lua:7441 - [x] 89% ImGui::TreeNodeV imgui_widgets.lua:7453 - [x] 69% ImGui::TreeNodeEx imgui_widgets.lua:7460 - [x] 68% ImGui::TreeNodeExV imgui_widgets.lua:7474 - [x] 73% ImGui::TreeNodeGetOpen imgui_widgets.lua:7487 - [x] 79% ImGui::TreeNodeSetOpen imgui_widgets.lua:7495 - [x] 82% ImGui::TreeNodeUpdateNextOpen imgui_widgets.lua:7503 - [x] 86% TreeNodeStoreStackData imgui_widgets.lua:7546 - [x] 82% ImGui::TreeNodeBehavior imgui_widgets.lua:7573 - [x] 84% ImGui::TreeNodeDrawLineToChildNode imgui_widgets.lua:7877 - [x] 98% ImGui::TreeNodeDrawLineToTreePop imgui_widgets.lua:7908 - [x] 67% ImGui::TreePush imgui_widgets.lua:7940 - [x] 74% ImGui::TreePushOverrideID imgui_widgets.lua:7948 - [x] 84% ImGui::TreePop imgui_widgets.lua:7956 - [x] 100% ImGui::GetTreeNodeToLabelSpacing imgui_widgets.lua:8005 - [x] 77% ImGui::SetNextItemOpen imgui_widgets.lua:7992 - [x] 85% ImGui::SetNextItemStorageID imgui_widgets.lua:8012 - [x] 81% ImGui::CollapsingHeader imgui_widgets.lua:8031 + [x] 78% ImGui::TreeNode imgui_widgets.lua:7465 + [x] 89% ImGui::TreeNodeV imgui_widgets.lua:7477 + [x] 69% ImGui::TreeNodeEx imgui_widgets.lua:7484 + [x] 68% ImGui::TreeNodeExV imgui_widgets.lua:7498 + [x] 73% ImGui::TreeNodeGetOpen imgui_widgets.lua:7511 + [x] 79% ImGui::TreeNodeSetOpen imgui_widgets.lua:7519 + [x] 82% ImGui::TreeNodeUpdateNextOpen imgui_widgets.lua:7527 + [x] 86% TreeNodeStoreStackData imgui_widgets.lua:7570 + [x] 82% ImGui::TreeNodeBehavior imgui_widgets.lua:7597 + [x] 84% ImGui::TreeNodeDrawLineToChildNode imgui_widgets.lua:7901 + [x] 98% ImGui::TreeNodeDrawLineToTreePop imgui_widgets.lua:7932 + [x] 67% ImGui::TreePush imgui_widgets.lua:7964 + [x] 74% ImGui::TreePushOverrideID imgui_widgets.lua:7972 + [x] 84% ImGui::TreePop imgui_widgets.lua:7980 + [x] 100% ImGui::GetTreeNodeToLabelSpacing imgui_widgets.lua:8029 + [x] 77% ImGui::SetNextItemOpen imgui_widgets.lua:8016 + [x] 85% ImGui::SetNextItemStorageID imgui_widgets.lua:8036 + [x] 81% ImGui::CollapsingHeader imgui_widgets.lua:8055 -- Widgets: Selectable - [x] 83% ImGui::Selectable imgui_widgets.lua:8088 + [x] 83% ImGui::Selectable imgui_widgets.lua:8112 -- Widgets: Typing-Select support [ ] ImGui::GetTypingSelectRequest @@ -1187,81 +1187,81 @@ imgui_widgets.cpp [ ] ImGuiSelectionExternalStorage::ApplyRequests -- Widgets: ListBox - [x] 92% ImGui::BeginListBox imgui_widgets.lua:8314 - [x] 78% ImGui::EndListBox imgui_widgets.lua:8355 - [x] 63% ImGui::ListBox imgui_widgets.lua:8370 + [x] 92% ImGui::BeginListBox imgui_widgets.lua:8338 + [x] 78% ImGui::EndListBox imgui_widgets.lua:8379 + [x] 63% ImGui::ListBox imgui_widgets.lua:8394 -- Widgets: PlotLines, PlotHistogram - [x] 89% ImGui::PlotEx imgui_widgets.lua:8442 - [x] 86% ImGuiPlotArrayGetterData::ImGuiPlotArrayGetterData imgui_widgets.lua:8572 - [x] 48% Plot_ArrayGetter imgui_widgets.lua:8583 - [x] 41% ImGui::PlotLines imgui_widgets.lua:8597 - [x] 41% ImGui::PlotHistogram imgui_widgets.lua:8623 + [x] 89% ImGui::PlotEx imgui_widgets.lua:8466 + [x] 86% ImGuiPlotArrayGetterData::ImGuiPlotArrayGetterData imgui_widgets.lua:8596 + [x] 48% Plot_ArrayGetter imgui_widgets.lua:8607 + [x] 41% ImGui::PlotLines imgui_widgets.lua:8621 + [x] 41% ImGui::PlotHistogram imgui_widgets.lua:8647 -- Widgets: Value helpers [x] 21% ImGui::Value imgui_widgets.lua:384 -- MenuItem, BeginMenu, EndMenu, etc. - [x] 49% ImGuiMenuColumns::Update imgui_widgets.lua:8655 - [x] 77% ImGuiMenuColumns::CalcNextTotalWidth imgui_widgets.lua:8667 - [x] 64% ImGuiMenuColumns::DeclColumns imgui_widgets.lua:8690 - [x] 91% ImGui::BeginMenuBar imgui_widgets.lua:8703 - [x] 92% ImGui::EndMenuBar imgui_widgets.lua:8737 - [x] 85% ImGui::BeginViewportSideBar imgui_widgets.lua:8800 - [x] 90% ImGui::BeginMainMenuBar imgui_widgets.lua:8836 - [x] 90% ImGui::EndMainMenuBar imgui_widgets.lua:8862 - [x] 91% IsRootOfOpenMenuSet imgui_widgets.lua:8878 - [x] 89% ImGui::BeginMenuEx imgui_widgets.lua:8906 - [x] 67% ImGui::BeginMenu imgui_widgets.lua:9137 - [x] 92% ImGui::EndMenu imgui_widgets.lua:9143 - [x] 85% ImGui::MenuItemEx imgui_widgets.lua:9167 - [x] 67% ImGui::MenuItem imgui_widgets.lua:9274 + [x] 49% ImGuiMenuColumns::Update imgui_widgets.lua:8679 + [x] 77% ImGuiMenuColumns::CalcNextTotalWidth imgui_widgets.lua:8691 + [x] 64% ImGuiMenuColumns::DeclColumns imgui_widgets.lua:8714 + [x] 91% ImGui::BeginMenuBar imgui_widgets.lua:8727 + [x] 92% ImGui::EndMenuBar imgui_widgets.lua:8761 + [x] 85% ImGui::BeginViewportSideBar imgui_widgets.lua:8824 + [x] 90% ImGui::BeginMainMenuBar imgui_widgets.lua:8860 + [x] 90% ImGui::EndMainMenuBar imgui_widgets.lua:8886 + [x] 91% IsRootOfOpenMenuSet imgui_widgets.lua:8902 + [x] 89% ImGui::BeginMenuEx imgui_widgets.lua:8930 + [x] 67% ImGui::BeginMenu imgui_widgets.lua:9161 + [x] 92% ImGui::EndMenu imgui_widgets.lua:9167 + [x] 85% ImGui::MenuItemEx imgui_widgets.lua:9191 + [x] 67% ImGui::MenuItem imgui_widgets.lua:9298 -- Widgets: BeginTabBar, EndTabBar, etc. - [x] 19% ImGuiTabBarSection::ImGuiTabBarSection imgui_widgets.lua:9342 - [x] 16% ImGuiTabBar::ImGuiTabBar imgui_internal.lua:1989 - [x] 65% TabItemGetSectionIdx imgui_widgets.lua:9309 + [x] 19% ImGuiTabBarSection::ImGuiTabBarSection imgui_widgets.lua:9366 + [x] 16% ImGuiTabBar::ImGuiTabBar imgui_internal.lua:1991 + [x] 65% TabItemGetSectionIdx imgui_widgets.lua:9333 [ ] TabItemComparerBySection [ ] TabItemComparerByBeginOrder [ ] GetTabBarFromTabBarRef [ ] GetTabBarRefFromTabBar - [x] 60% ImGui::TabBarFindByID imgui_widgets.lua:9430 - [x] 77% ImGui::TabBarRemove imgui_widgets.lua:9436 - [x] 92% ImGui::BeginTabBar imgui_widgets.lua:9441 - [x] 82% ImGui::BeginTabBarEx imgui_widgets.lua:9459 - [x] 90% ImGui::EndTabBar imgui_widgets.lua:9523 - [x] 68% TabBarCalcScrollableWidth imgui_widgets.lua:9335 - [x] 81% ImGui::TabBarLayout imgui_widgets.lua:9558 - [x] 75% ImGui::TabBarCalcTabID imgui_widgets.lua:9829 - [x] 62% ImGui::TabBarCalcMaxTabWidth imgui_widgets.lua:9839 - [x] 71% ImGui::TabBarFindTabByID imgui_widgets.lua:9843 - [x] 90% ImGui::TabBarFindTabByOrder imgui_widgets.lua:9855 - [x] 85% ImGui::TabBarFindMostRecentlySelectedTabForActiveWindow imgui_widgets.lua:9867 - [x] 93% ImGui::TabBarGetCurrentTab imgui_widgets.lua:9878 - [x] 55% ImGui::TabBarGetTabName imgui_widgets.lua:9883 - [x] 89% ImGui::TabBarGetTabPos imgui_widgets.lua:9889 - [x] 92% ImGui::TabBarAddTab imgui_widgets.lua:9898 - [x] 91% ImGui::TabBarRemoveTab imgui_widgets.lua:9915 - [x] 92% ImGui::TabBarCloseTab imgui_widgets.lua:9924 - [x] 97% ImGui::TabBarScrollClamp imgui_widgets.lua:9942 - [x] 89% ImGui::TabBarScrollToTab imgui_widgets.lua:9948 - [x] 67% ImGui::TabBarQueueFocus imgui_widgets.lua:9986 - [x] 100% ImGui::TabBarQueueReorder imgui_widgets.lua:9995 - [x] 85% ImGui::TabBarQueueReorderFromMousePos imgui_widgets.lua:10002 - [x] 64% ImGui::TabBarProcessReorder imgui_widgets.lua:10036 - [x] 85% ImGui::TabBarScrollingButtons imgui_widgets.lua:10059 - [x] 80% ImGui::TabBarTabListPopupButton imgui_widgets.lua:10119 + [x] 60% ImGui::TabBarFindByID imgui_widgets.lua:9454 + [x] 77% ImGui::TabBarRemove imgui_widgets.lua:9460 + [x] 92% ImGui::BeginTabBar imgui_widgets.lua:9465 + [x] 82% ImGui::BeginTabBarEx imgui_widgets.lua:9483 + [x] 90% ImGui::EndTabBar imgui_widgets.lua:9547 + [x] 68% TabBarCalcScrollableWidth imgui_widgets.lua:9359 + [x] 81% ImGui::TabBarLayout imgui_widgets.lua:9582 + [x] 75% ImGui::TabBarCalcTabID imgui_widgets.lua:9853 + [x] 62% ImGui::TabBarCalcMaxTabWidth imgui_widgets.lua:9863 + [x] 71% ImGui::TabBarFindTabByID imgui_widgets.lua:9867 + [x] 90% ImGui::TabBarFindTabByOrder imgui_widgets.lua:9879 + [x] 85% ImGui::TabBarFindMostRecentlySelectedTabForActiveWindow imgui_widgets.lua:9891 + [x] 93% ImGui::TabBarGetCurrentTab imgui_widgets.lua:9902 + [x] 55% ImGui::TabBarGetTabName imgui_widgets.lua:9907 + [x] 89% ImGui::TabBarGetTabPos imgui_widgets.lua:9913 + [x] 92% ImGui::TabBarAddTab imgui_widgets.lua:9922 + [x] 91% ImGui::TabBarRemoveTab imgui_widgets.lua:9939 + [x] 92% ImGui::TabBarCloseTab imgui_widgets.lua:9948 + [x] 97% ImGui::TabBarScrollClamp imgui_widgets.lua:9966 + [x] 89% ImGui::TabBarScrollToTab imgui_widgets.lua:9972 + [x] 67% ImGui::TabBarQueueFocus imgui_widgets.lua:10010 + [x] 100% ImGui::TabBarQueueReorder imgui_widgets.lua:10019 + [x] 85% ImGui::TabBarQueueReorderFromMousePos imgui_widgets.lua:10026 + [x] 64% ImGui::TabBarProcessReorder imgui_widgets.lua:10060 + [x] 85% ImGui::TabBarScrollingButtons imgui_widgets.lua:10083 + [x] 80% ImGui::TabBarTabListPopupButton imgui_widgets.lua:10143 -- Widgets: BeginTabItem, EndTabItem, etc. - [x] 78% ImGui::BeginTabItem imgui_widgets.lua:10167 - [x] 85% ImGui::EndTabItem imgui_widgets.lua:10186 - [x] 81% ImGui::TabItemButton imgui_widgets.lua:10200 - [x] 84% ImGui::TabItemSpacing imgui_widgets.lua:10210 - [x] 79% ImGui::TabItemEx imgui_widgets.lua:10221 - [x] 88% ImGui::SetTabItemClosed imgui_widgets.lua:10507 - [x] 79% ImGui::TabItemCalcSize imgui_widgets.lua:10529 - [x] 91% ImGui::TabItemBackground imgui_widgets.lua:10545 - [x] 86% ImGui::TabItemLabelAndCloseButton imgui_widgets.lua:10566 + [x] 78% ImGui::BeginTabItem imgui_widgets.lua:10191 + [x] 85% ImGui::EndTabItem imgui_widgets.lua:10210 + [x] 81% ImGui::TabItemButton imgui_widgets.lua:10224 + [x] 84% ImGui::TabItemSpacing imgui_widgets.lua:10234 + [x] 79% ImGui::TabItemEx imgui_widgets.lua:10245 + [x] 88% ImGui::SetTabItemClosed imgui_widgets.lua:10531 + [x] 79% ImGui::TabItemCalcSize imgui_widgets.lua:10553 + [x] 91% ImGui::TabItemBackground imgui_widgets.lua:10569 + [x] 86% ImGui::TabItemLabelAndCloseButton imgui_widgets.lua:10590 ==================================================================================================== imgui_draw.cpp @@ -1697,8 +1697,8 @@ imgui_tables.cpp -- Tables: Debugging [ ] DebugNodeTableGetSizingPolicyDesc - [x] 16% ImGui::DebugNodeTable imgui.lua:20732 - [x] 69% ImGui::DebugNodeTableSettings imgui.lua:20714 + [x] 16% ImGui::DebugNodeTable imgui.lua:20750 + [x] 69% ImGui::DebugNodeTableSettings imgui.lua:20732 -- Columns, BeginColumns, EndColumns, etc. [x] 24% ImGui::SetWindowClipRectBeforeSetChannel imgui_tables.lua:2070 @@ -1756,52 +1756,52 @@ imgui_demo.cpp [x] 68% DemoWindowWidgetsCollapsingHeaders imgui_demo.lua:1158 -- DemoWindowWidgetsColorAndPickers() - [x] 73% DemoWindowWidgetsColorAndPickers imgui_demo.lua:1210 + [x] 73% DemoWindowWidgetsColorAndPickers imgui_demo.lua:1206 -- DemoWindowWidgetsComboBoxes() - [x] 70% DemoWindowWidgetsComboBoxes imgui_demo.lua:1415 + [x] 70% DemoWindowWidgetsComboBoxes imgui_demo.lua:1411 -- DemoWindowWidgetsDataTypes() - [x] 65% DemoWindowWidgetsDataTypes imgui_demo.lua:1536 + [x] 65% DemoWindowWidgetsDataTypes imgui_demo.lua:1532 -- DemoWindowWidgetsDisableBlocks() - [x] 84% DemoWindowWidgetsDisableBlocks imgui_demo.lua:1652 + [x] 84% DemoWindowWidgetsDisableBlocks imgui_demo.lua:1648 -- DemoWindowWidgetsDragAndDrop() - [x] 76% DemoWindowWidgetsDragAndDrop imgui_demo.lua:1679 + [x] 76% DemoWindowWidgetsDragAndDrop imgui_demo.lua:1675 -- DemoWindowWidgetsDragsAndSliders() - [x] 79% DemoWindowWidgetsDragsAndSliders imgui_demo.lua:1821 + [x] 79% DemoWindowWidgetsDragsAndSliders imgui_demo.lua:1817 -- DemoWindowWidgetsFonts() - [x] 94% DemoWindowWidgetsFonts imgui_demo.lua:1871 + [x] 94% DemoWindowWidgetsFonts imgui_demo.lua:1867 -- DemoWindowWidgetsImages() - [x] 89% DemoWindowWidgetsImages imgui_demo.lua:1889 + [x] 89% DemoWindowWidgetsImages imgui_demo.lua:1885 -- DemoWindowWidgetsListBoxes() - [x] 82% DemoWindowWidgetsListBoxes imgui_demo.lua:1974 + [x] 82% DemoWindowWidgetsListBoxes imgui_demo.lua:1970 -- DemoWindowWidgetsLiveEdit() - [x] 81% DemoWindowWidgetsLiveEdit imgui_demo.lua:2044 + [x] 81% DemoWindowWidgetsLiveEdit imgui_demo.lua:2040 -- DemoWindowWidgetsMixedValues() - [x] 66% DemoWindowWidgetsMixedValues imgui_demo.lua:2083 + [x] 66% DemoWindowWidgetsMixedValues imgui_demo.lua:2079 -- DemoWindowWidgetsMultiComponents() - [x] 86% DemoWindowWidgetsMultiComponents imgui_demo.lua:2151 + [x] 86% DemoWindowWidgetsMultiComponents imgui_demo.lua:2147 -- DemoWindowWidgetsPlotting() - [x] 70% DemoWindowWidgetsPlotting imgui_demo.lua:2217 + [x] 70% DemoWindowWidgetsPlotting imgui_demo.lua:2213 -- DemoWindowWidgetsProgressBars() - [x] 78% DemoWindowWidgetsProgressBars imgui_demo.lua:2287 + [x] 78% DemoWindowWidgetsProgressBars imgui_demo.lua:2283 -- DemoWindowWidgetsQueryingStatuses() - [x] 74% DemoWindowWidgetsQueryingStatuses imgui_demo.lua:2338 + [x] 74% DemoWindowWidgetsQueryingStatuses imgui_demo.lua:2334 -- DemoWindowWidgetsSelectables() - [x] 66% DemoWindowWidgetsSelectables imgui_demo.lua:2588 + [x] 66% DemoWindowWidgetsSelectables imgui_demo.lua:2584 -- DemoWindowWidgetsSelectionAndMultiSelect() [ ] ExampleSelectionWithDeletion::ApplyDeletionPreLoop @@ -1812,48 +1812,48 @@ imgui_demo.cpp [ ] ExampleDualListBox::CompareItemsByValue [ ] ExampleDualListBox::SortItems [ ] ExampleDualListBox::Show - [x] 1% DemoWindowWidgetsSelectionAndMultiSelect imgui_demo.lua:2758 + [x] 1% DemoWindowWidgetsSelectionAndMultiSelect imgui_demo.lua:2754 -- DemoWindowWidgetsTabs() - [x] 58% EditTabBarFittingPolicyFlags imgui_demo.lua:2772 - [x] 70% DemoWindowWidgetsTabs imgui_demo.lua:2802 + [x] 58% EditTabBarFittingPolicyFlags imgui_demo.lua:2768 + [x] 70% DemoWindowWidgetsTabs imgui_demo.lua:2798 -- DemoWindowWidgetsText() - [x] 89% DemoWindowWidgetsText imgui_demo.lua:2958 + [x] 89% DemoWindowWidgetsText imgui_demo.lua:2954 -- DemoWindowWidgetsTextFilter() - [x] 84% DemoWindowWidgetsTextFilter imgui_demo.lua:3072 + [x] 84% DemoWindowWidgetsTextFilter imgui_demo.lua:3068 -- DemoWindowWidgetsTextInput() - [x] 75% DemoWindowWidgetsTextInput imgui_demo.lua:3147 + [x] 75% DemoWindowWidgetsTextInput imgui_demo.lua:3143 -- DemoWindowWidgetsTooltips() - [x] 84% DemoWindowWidgetsTooltips imgui_demo.lua:3331 + [x] 84% DemoWindowWidgetsTooltips imgui_demo.lua:3327 -- DemoWindowWidgetsTreeNodes() - [x] 75% DemoWindowWidgetsTreeNodes imgui_demo.lua:3438 + [x] 75% DemoWindowWidgetsTreeNodes imgui_demo.lua:3434 -- DemoWindowWidgetsVerticalSliders() - [x] 83% DemoWindowWidgetsVerticalSliders imgui_demo.lua:3619 + [x] 83% DemoWindowWidgetsVerticalSliders imgui_demo.lua:3615 -- DemoWindowWidgets() - [x] 97% DemoWindowWidgets imgui_demo.lua:3687 + [x] 97% DemoWindowWidgets imgui_demo.lua:3683 -- DemoWindowLayout() - [x] 81% DemoWindowLayout imgui_demo.lua:3794 + [x] 81% DemoWindowLayout imgui_demo.lua:3790 -- DemoWindowPopups() - [x] 59% DemoWindowPopups imgui_demo.lua:4638 + [x] 59% DemoWindowPopups imgui_demo.lua:4634 [ ] MyItem::SortWithSortSpecs [ ] MyItem::CompareWithSortSpecs - [x] 96% PushStyleCompact imgui_demo.lua:5000 - [x] 100% PopStyleCompact imgui_demo.lua:5006 - [x] 69% EditTableSizingFlags imgui_demo.lua:5013 - [x] 74% EditTableColumnsFlags imgui_demo.lua:5065 - [x] 100% ShowTableColumnsStatusFlags imgui_demo.lua:5095 + [x] 96% PushStyleCompact imgui_demo.lua:4996 + [x] 100% PopStyleCompact imgui_demo.lua:5002 + [x] 69% EditTableSizingFlags imgui_demo.lua:5009 + [x] 74% EditTableColumnsFlags imgui_demo.lua:5061 + [x] 100% ShowTableColumnsStatusFlags imgui_demo.lua:5091 -- DemoWindowTables() - [x] 41% DemoWindowTables imgui_demo.lua:5241 + [x] 41% DemoWindowTables imgui_demo.lua:5237 ==================================================================================================== imgui.h @@ -1909,35 +1909,35 @@ imgui.h [ ] IM_MSVC_RUNTIME_CHECKS_OFF::index_from_ptr -- Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload) - [x] 80% ImGuiInputTextCallbackData::SelectAll imgui_h.lua:2421 + [x] 80% ImGuiInputTextCallbackData::SelectAll imgui_h.lua:2455 [ ] ImGuiInputTextCallbackData::SetSelection - [x] 83% ImGuiInputTextCallbackData::ClearSelection imgui_h.lua:2422 - [x] 89% ImGuiInputTextCallbackData::HasSelection imgui_h.lua:2423 - [x] 29% ImGuiWindowClass::ImGuiWindowClass imgui_h.lua:2287 - [x] 0% ImGuiPayload::ImGuiPayload imgui_h.lua:2631 - [x] 61% ImGuiPayload::Clear imgui_h.lua:2627 - [x] 55% ImGuiPayload::IsDataType imgui_h.lua:2628 - [x] 100% ImGuiPayload::IsPreview imgui_h.lua:2629 - [x] 100% ImGuiPayload::IsDelivery imgui_h.lua:2630 + [x] 83% ImGuiInputTextCallbackData::ClearSelection imgui_h.lua:2456 + [x] 89% ImGuiInputTextCallbackData::HasSelection imgui_h.lua:2457 + [x] 29% ImGuiWindowClass::ImGuiWindowClass imgui_h.lua:2321 + [x] 0% ImGuiPayload::ImGuiPayload imgui_h.lua:2665 + [x] 61% ImGuiPayload::Clear imgui_h.lua:2661 + [x] 55% ImGuiPayload::IsDataType imgui_h.lua:2662 + [x] 100% ImGuiPayload::IsPreview imgui_h.lua:2663 + [x] 100% ImGuiPayload::IsDelivery imgui_h.lua:2664 -- Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, Math Operators, ImColor) [ ] ImGuiOnceUponAFrame::ImGuiOnceUponAFrame [-] ImGuiOnceUponAFrame::operatorbool c++-only - [x] 80% ImGuiTextFilter::Clear imgui.lua:19334 - [x] 100% ImGuiTextFilter::IsActive imgui.lua:19335 + [x] 80% ImGuiTextFilter::Clear imgui.lua:19360 + [x] 100% ImGuiTextFilter::IsActive imgui.lua:19361 [-] ImGuiTextFilter::Draw obsolete - [x] 0% ImGuiTextBuffer::ImGuiTextBuffer imgui_h.lua:2648 + [x] 0% ImGuiTextBuffer::ImGuiTextBuffer imgui_h.lua:2682 [ ] ImGuiTextBuffer::begin [ ] ImGuiTextBuffer::end - [x] 14% ImGuiTextBuffer::size imgui_h.lua:2654 - [x] 33% ImGuiTextBuffer::empty imgui_h.lua:2650 - [x] 40% ImGuiTextBuffer::clear imgui_h.lua:2649 + [x] 14% ImGuiTextBuffer::size imgui_h.lua:2688 + [x] 33% ImGuiTextBuffer::empty imgui_h.lua:2684 + [x] 40% ImGuiTextBuffer::clear imgui_h.lua:2683 [ ] ImGuiTextBuffer::resize [ ] ImGuiTextBuffer::reserve - [x] 31% ImGuiTextBuffer::c_str imgui_h.lua:2653 + [x] 31% ImGuiTextBuffer::c_str imgui_h.lua:2687 [ ] ImGuiStoragePair::ImGuiStoragePair [ ] ImGuiStorage::Clear - [x] 100% ImGuiListClipper::IncludeItemByIndex imgui.lua:19565 + [x] 100% ImGuiListClipper::IncludeItemByIndex imgui.lua:19591 [-] operator+ c++-only [-] operator- c++-only [-] operator* c++-only @@ -1948,7 +1948,7 @@ imgui.h [-] operator/= c++-only [-] operator== c++-only [-] operator!= c++-only - [x] n/a IM_MSVC_RUNTIME_CHECKS_RESTORE::ImColor imgui_h.lua:2664 = setmetatable ( { } , { + [x] n/a IM_MSVC_RUNTIME_CHECKS_RESTORE::ImColor imgui_h.lua:2698 = setmetatable ( { } , { [-] IM_MSVC_RUNTIME_CHECKS_RESTORE::operatorImU32 c++-only [-] IM_MSVC_RUNTIME_CHECKS_RESTORE::operatorImVec4 c++-only [ ] IM_MSVC_RUNTIME_CHECKS_RESTORE::SetHSV @@ -2014,14 +2014,14 @@ imgui.h [ ] ImDrawCmd::GetTexID -- Viewports - [x] 7% ImGuiViewport::ImGuiViewport imgui_h.lua:1453 + [x] 7% ImGuiViewport::ImGuiViewport imgui_h.lua:1483 [-] ImGuiViewport::~ImGuiViewport c++-only - [x] 90% ImGuiViewport::GetCenter imgui_h.lua:1443 - [x] 90% ImGuiViewport::GetWorkCenter imgui_h.lua:1447 + [x] 90% ImGuiViewport::GetCenter imgui_h.lua:1473 + [x] 90% ImGuiViewport::GetWorkCenter imgui_h.lua:1477 -- ImGuiPlatformIO + other Platform Dependent Interfaces (ImGuiPlatformMonitor, ImGuiPlatformImeData) - [x] 42% ImGuiPlatformMonitor::ImGuiPlatformMonitor imgui_h.lua:1547 - [x] 24% ImGuiPlatformImeData::ImGuiPlatformImeData imgui_h.lua:1353 + [x] 42% ImGuiPlatformMonitor::ImGuiPlatformMonitor imgui_h.lua:1577 + [x] 24% ImGuiPlatformImeData::ImGuiPlatformImeData imgui_h.lua:1383 -- Obsolete functions and types [-] PushFont obsolete @@ -2073,7 +2073,7 @@ imgui_internal.h [ ] ImModPositive [x] 100% ImDot imgui_internal.lua:437 [x] 98% ImRotate imgui_internal.lua:431 - [x] 100% ImLinearSweep imgui_widgets.lua:9303 + [x] 100% ImLinearSweep imgui_widgets.lua:9327 [ ] ImLinearRemapClamp [x] 97% ImMul imgui_internal.lua:444 [ ] ImIsFloatAboveGuaranteedIntegerPrecision @@ -2167,9 +2167,9 @@ imgui_internal.h [ ] template::ptr_from_offset [ ] template::swap [x] 83% ImGuiTextIndex::clear imgui_internal.lua:1758 - [ ] ImGuiTextIndex::size - [x] 81% ImGuiTextIndex::get_line_begin imgui_internal.lua:1760 - [x] 85% ImGuiTextIndex::get_line_end imgui_internal.lua:1764 + [x] 100% ImGuiTextIndex::size imgui_internal.lua:1760 + [x] 71% ImGuiTextIndex::get_line_begin imgui_internal.lua:1762 + [x] 76% ImGuiTextIndex::get_line_end imgui_internal.lua:1766 [ ] ImGuiTextFilterItem::ImGuiTextFilterItem [ ] ImGuiPackedDate::ImGuiPackedDate [ ] ImGuiPackedDate::IsValid @@ -2177,7 +2177,7 @@ imgui_internal.h [ ] ImGuiPackedDate::SubtractMonths -- ImDrawList support - [x] 27% ImDrawDataBuilder::ImDrawDataBuilder imgui_internal.lua:2775 + [x] 27% ImDrawDataBuilder::ImDrawDataBuilder imgui_internal.lua:2778 -- Style support [ ] ImGuiStyleVarInfo::GetVarPtr @@ -2185,7 +2185,7 @@ imgui_internal.h -- Widgets support: flags, enums, data structures [x] 21% ImGuiComboPreviewData::ImGuiComboPreviewData imgui_internal.lua:1604 - [x] 12% ImGuiMenuColumns::ImGuiMenuColumns imgui_internal.lua:2442 + [x] 12% ImGuiMenuColumns::ImGuiMenuColumns imgui_internal.lua:2445 [x] 20% ImGuiInputTextDeactivatedState::ImGuiInputTextDeactivatedState imgui_internal.lua:1690 [ ] ImGuiInputTextDeactivatedState::ClearFreeMemory [ ] ImGuiInputTextState::ClearText @@ -2196,14 +2196,14 @@ imgui_internal.h [x] 20% ImGuiNextItemData::ImGuiNextItemData imgui_internal.lua:1327 [ ] ImGuiNextItemData::ClearFlags [x] 11% ImGuiLastItemData::ImGuiLastItemData imgui_internal.lua:1247 - [x] 8% ImGuiErrorRecoveryState::ImGuiErrorRecoveryState imgui.lua:19762 + [x] 8% ImGuiErrorRecoveryState::ImGuiErrorRecoveryState imgui.lua:19780 [ ] ImGuiPtrOrIndex::ImGuiPtrOrIndex -- Popup support - [x] 36% ImGuiPopupData::ImGuiPopupData imgui_internal.lua:3329 + [x] 36% ImGuiPopupData::ImGuiPopupData imgui_internal.lua:3332 -- Inputs support - [x] 9% ImGuiInputEvent::ImGuiInputEvent imgui_internal.lua:3123 + [x] 9% ImGuiInputEvent::ImGuiInputEvent imgui_internal.lua:3126 [x] 73% ImGuiKeyRoutingData::ImGuiKeyRoutingData imgui_internal.lua:1711 [x] 10% ImGuiKeyRoutingTable::ImGuiKeyRoutingTable imgui_internal.lua:1738 [ ] ImGuiKeyRoutingTable::Clear @@ -2216,7 +2216,7 @@ imgui_internal.h [ ] ImGuiListClipperData::Reset -- Navigation support - [x] 13% ImGuiNavItemData::ImGuiNavItemData imgui_internal.lua:1842 + [x] 13% ImGuiNavItemData::ImGuiNavItemData imgui_internal.lua:1844 [ ] ImGuiNavItemData::Clear -- Typing-select support @@ -2252,23 +2252,23 @@ imgui_internal.h [x] 20% ImGuiDockContext::ImGuiDockContext imgui.lua:1040 -- Viewport support - [x] 36% ImGuiViewportP::ImGuiViewportP imgui_internal.lua:2862 + [x] 36% ImGuiViewportP::ImGuiViewportP imgui_internal.lua:2865 [-] ImGuiViewportP::~ImGuiViewportP c++-only - [x] 78% ImGuiViewportP::ClearRequestFlags imgui_internal.lua:2817 - [x] 94% ImGuiViewportP::CalcWorkRectPos imgui_internal.lua:2824 - [x] 98% ImGuiViewportP::CalcWorkRectSize imgui_internal.lua:2828 - [x] 87% ImGuiViewportP::UpdateWorkRect imgui_internal.lua:2833 - [x] 92% ImGuiViewportP::GetMainRect imgui_internal.lua:2840 - [x] 92% ImGuiViewportP::GetWorkRect imgui_internal.lua:2847 - [x] 96% ImGuiViewportP::GetBuildWorkRect imgui_internal.lua:2854 + [x] 78% ImGuiViewportP::ClearRequestFlags imgui_internal.lua:2820 + [x] 94% ImGuiViewportP::CalcWorkRectPos imgui_internal.lua:2827 + [x] 98% ImGuiViewportP::CalcWorkRectSize imgui_internal.lua:2831 + [x] 87% ImGuiViewportP::UpdateWorkRect imgui_internal.lua:2836 + [x] 92% ImGuiViewportP::GetMainRect imgui_internal.lua:2843 + [x] 92% ImGuiViewportP::GetWorkRect imgui_internal.lua:2850 + [x] 96% ImGuiViewportP::GetBuildWorkRect imgui_internal.lua:2857 -- Settings support - [x] 18% ImGuiWindowSettings::ImGuiWindowSettings imgui_internal.lua:2409 + [x] 18% ImGuiWindowSettings::ImGuiWindowSettings imgui_internal.lua:2412 [ ] ImGuiWindowSettings::GetName - [x] 13% ImGuiSettingsHandler::ImGuiSettingsHandler imgui_h.lua:2685 + [x] 13% ImGuiSettingsHandler::ImGuiSettingsHandler imgui_h.lua:2719 -- Metrics, Debug Tools - [x] 7% ImGuiDebugAllocInfo::ImGuiDebugAllocInfo imgui_internal.lua:1790 + [x] 7% ImGuiDebugAllocInfo::ImGuiDebugAllocInfo imgui_internal.lua:1792 [ ] ImGuiStackLevelInfo::ImGuiStackLevelInfo [ ] ImGuiDebugItemPathQuery::ImGuiDebugItemPathQuery [ ] ImGuiIDStackTool::ImGuiIDStackTool @@ -2277,12 +2277,12 @@ imgui_internal.h [ ] ImGuiContextHook::ImGuiContextHook -- ImGuiWindowTempData, ImGuiWindow - [x] 92% ImGuiWindow::Rect imgui_internal.lua:2583 - [x] 84% ImGuiWindow::TitleBarRect imgui_internal.lua:2589 - [x] 91% ImGuiWindow::MenuBarRect imgui_internal.lua:2595 + [x] 92% ImGuiWindow::Rect imgui_internal.lua:2586 + [x] 84% ImGuiWindow::TitleBarRect imgui_internal.lua:2592 + [x] 91% ImGuiWindow::MenuBarRect imgui_internal.lua:2598 -- Tab bar, Tab item support - [x] 50% ImGuiTabItem::ImGuiTabItem imgui_internal.lua:1970 + [x] 50% ImGuiTabItem::ImGuiTabItem imgui_internal.lua:1972 -- Table support + internal API [x] 28% ImGuiTableColumn::ImGuiTableColumn imgui_tables.lua:240 @@ -2298,9 +2298,9 @@ imgui_internal.h [x] 86% TableGetInstanceID imgui_tables.lua:445 -- ImGui internal API - [x] 100% GetScale imgui.lua:13558 - [x] 100% GetCurrentWindowRead imgui.lua:13564 - [x] 100% GetCurrentWindow imgui.lua:13571 + [x] 100% GetScale imgui.lua:13575 + [x] 100% GetCurrentWindowRead imgui.lua:13581 + [x] 100% GetCurrentWindow imgui.lua:13588 [ ] SetWindowParentWindowForFocusRoute [x] 99% WindowRectAbsToRel imgui_internal.lua:641 [x] 99% WindowRectRelToAbs imgui_internal.lua:646 @@ -2308,8 +2308,8 @@ imgui_internal.h [ ] WindowPosRelToAbs [ ] GetPixelDensity [x] 55% GetRoundedFontSize imgui_internal.lua:635 - [x] 15% GetForegroundDrawList imgui.lua:13646 - [x] 80% LocalizeGetMsg imgui_internal.lua:3433 + [x] 15% GetForegroundDrawList imgui.lua:13663 + [x] 80% LocalizeGetMsg imgui_internal.lua:3436 [ ] ScrollToBringRectIntoView [ ] GetItemStatusFlags [ ] GetActiveID @@ -2338,22 +2338,22 @@ imgui_internal.h [ ] GetBoxSelectState [ ] GetMultiSelectState [ ] GetCurrentTabBar - [x] 35% TabBarGetTabOrder imgui_widgets.lua:9861 + [x] 35% TabBarGetTabOrder imgui_widgets.lua:9885 [-] RenderNavHighlight obsolete - [x] 100% TempInputIsActive imgui_internal.lua:3440 - [x] 88% GetInputTextState imgui_internal.lua:3448 + [x] 100% TempInputIsActive imgui_internal.lua:3443 + [x] 88% GetInputTextState imgui_internal.lua:3451 [ ] IsItemActiveAsInputText [x] 80% SetNextItemColorMarker imgui_internal.lua:1036 -- ImFontLoader - [x] 6% ImFontLoader::ImFontLoader imgui_internal.lua:2924 + [x] 6% ImFontLoader::ImFontLoader imgui_internal.lua:2927 -- ImFontAtlas internal API [-] operator== c++-only [-] operator!= c++-only - [x] 75% ImFontAtlasRectId_GetIndex imgui_internal.lua:2976 - [x] 62% ImFontAtlasRectId_GetGeneration imgui_internal.lua:2980 - [x] 77% ImFontAtlasRectId_Make imgui_internal.lua:2985 + [x] 75% ImFontAtlasRectId_GetIndex imgui_internal.lua:2979 + [x] 62% ImFontAtlasRectId_GetGeneration imgui_internal.lua:2983 + [x] 77% ImFontAtlasRectId_Make imgui_internal.lua:2988 [x] 19% ImFontAtlasBuilder::ImFontAtlasBuilder imgui_internal.lua:1134 ==================================================================================================== @@ -2542,7 +2542,7 @@ Struct fields (name found in the port / total; missing listed). Field names are ImGuiBoxSelectState 3 / 16 missing: IsActive, IsStarting, IsStartedFromVoid, IsStartedSetNavIdOnce, RequestClear, StartPosRel, EndPosRel, ScrollAccum, UnclipMode, UnclipRect, UnclipRects, BoxSelectRectPrev, BoxSelectRectCurr ImGuiColorMod 2 / 2 ImGuiComboPreviewData 6 / 9 missing: BackupWorkRectMaxX, BackupContentRectMaxX, WithinPreview - ImGuiContext 305 / 338 missing: TestEngineHookItems, CurrentPixelDensity, TestEngine, InputEventsTrail, MixedValueLabel, DebugBreakInShortcutRouting, DebugLocateId, NavJustMovedToIsInit, DragDropPayloadBufHeap, DragDropPayloadBufLocal, BoxSelectState, CurrentMultiSelect, MultiSelectTempDataStacked, MultiSelectTempData, MultiSelectStorage, ClipboardHandlerData, TypingSelectState, SessionDate, DemoMarkerCallback, DebugLogIndex, DebugLogSkippedErrors, DebugLocateFrames, DebugBreakInLocateId, DebugBreakKeyChord, DebugBeginReturnValueCullDepth, DebugItemPickerActive, DebugItemPickerMouseButton, DebugItemPickerBreakId, DebugFlashStyleColorTime, DebugFlashStyleColorBackup, DebugDrawIdConflictsAliveCount, DebugDrawIdConflictsHighlightSet, TempKeychordName + ImGuiContext 306 / 338 missing: TestEngineHookItems, CurrentPixelDensity, TestEngine, InputEventsTrail, MixedValueLabel, DebugBreakInShortcutRouting, DebugLocateId, NavJustMovedToIsInit, DragDropPayloadBufHeap, DragDropPayloadBufLocal, BoxSelectState, CurrentMultiSelect, MultiSelectTempDataStacked, MultiSelectTempData, MultiSelectStorage, ClipboardHandlerData, TypingSelectState, SessionDate, DemoMarkerCallback, DebugLogIndex, DebugLogSkippedErrors, DebugLocateFrames, DebugBreakInLocateId, DebugBreakKeyChord, DebugItemPickerActive, DebugItemPickerMouseButton, DebugItemPickerBreakId, DebugFlashStyleColorTime, DebugFlashStyleColorBackup, DebugDrawIdConflictsAliveCount, DebugDrawIdConflictsHighlightSet, TempKeychordName ImGuiContextHook 2 / 5 missing: HookId, Owner, Callback ImGuiDataTypeInfo 4 / 4 ImGuiDataTypeStorage 1 / 1 @@ -2562,7 +2562,7 @@ Struct fields (name found in the port / total; missing listed). Field names are ImGuiFocusScopeData 2 / 2 ImGuiGroupData 14 / 14 ImGuiIDStackTool 4 / 4 - ImGuiIO 109 / 117 missing: FontAllowUserScaling, ConfigDpiScaleFonts, ConfigDpiScaleViewports, ConfigIniSettingsAutoDiscardMonths, BackendPlatformName, BackendRendererName, BackendLanguageUserData, PenPressure + ImGuiIO 113 / 117 missing: BackendPlatformName, BackendRendererName, BackendLanguageUserData, PenPressure ImGuiInputEvent 10 / 11 missing: AddedByTestEngine ImGuiInputEventAppFocused 1 / 1 ImGuiInputEventKey 3 / 3 diff --git a/imgui.lua b/imgui.lua index 0a3fff1..801b8dd 100644 --- a/imgui.lua +++ b/imgui.lua @@ -9482,10 +9482,13 @@ function ImGui.SetItemKeyOwner(key, flags) end -- This is equivalent to comparing KeyMods + doing a IsKeyPressed() +-- [Port] public overload IsKeyChordPressed(key_chord) == IsKeyChordPressed(key_chord, ImGuiInputFlags_None, ImGuiKeyOwner_Any) --- @param key_chord ImGuiKeyChord ---- @param flags ImGuiInputFlags ---- @param owner_id ImGuiID +--- @param flags? ImGuiInputFlags +--- @param owner_id? ImGuiID function ImGui.IsKeyChordPressed(key_chord, flags, owner_id) + if flags == nil then flags = ImGuiInputFlags.None end + if owner_id == nil then owner_id = ImGuiKeyOwner_Any end local g = GImGui key_chord = ImGui.FixupKeyChord(key_chord) local mods = bit32.band(key_chord, ImGuiMod_Mask_) @@ -9515,10 +9518,13 @@ function ImGui.SetNextItemShortcut(key_chord, flags) g.NextItemData.ShortcutFlags = flags end +-- [Port] public overload Shortcut(key_chord, flags = 0) == Shortcut(key_chord, flags, ImGuiKeyOwner_Any) --- @param key_chord ImGuiKeyChord ---- @param flags ImGuiInputFlags ---- @param owner_id ImGuiID +--- @param flags? ImGuiInputFlags +--- @param owner_id? ImGuiID function ImGui.Shortcut(key_chord, flags, owner_id) + if flags == nil then flags = 0 end + if owner_id == nil then owner_id = ImGuiKeyOwner_Any end local g = GImGui -- IMGUI_DEBUG_LOG("Shortcut(%s, flags=%X, owner_id=0x%08X)\n", ImGui.GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), flags, owner_id) @@ -12745,6 +12751,17 @@ function ImGui.Begin(name, open, flags) end if open == nil then open = true end + + -- [DEBUG] io.ConfigDebugBeginReturnValue override return value to test Begin/End and BeginChild/EndChild behaviors. + -- (The implicit fallback window is NOT automatically ended allowing it to always be able to receive commands without crashing) + if not window.IsFallbackWindow then + if (g.IO.ConfigDebugBeginReturnValueOnce and window_just_created) or (g.IO.ConfigDebugBeginReturnValueLoop and g.DebugBeginReturnValueCullDepth == g.CurrentWindowStack.Size) then + if window.AutoFitFramesX > 0 then window.AutoFitFramesX = window.AutoFitFramesX + 1 end + if window.AutoFitFramesY > 0 then window.AutoFitFramesY = window.AutoFitFramesY + 1 end + return open, false + end + end + return open, not window.SkipItems end @@ -14030,6 +14047,14 @@ function ImGui.NewFrame() g.ErrorCountCurrentFrame = 0 g.StackSizesInNewFrame = g.StackSizesInNewFrame or ImGuiErrorRecoveryState() ImGui.ErrorRecoveryStoreState(g.StackSizesInNewFrame) + + -- [DEBUG] When io.ConfigDebugBeginReturnValue is set, we make Begin()/BeginChild() return false at different level of the window-stack, + -- allowing to validate correct Begin/End behavior in user code. + if g.IO.ConfigDebugBeginReturnValueLoop then + g.DebugBeginReturnValueCullDepth = (g.DebugBeginReturnValueCullDepth == -1) and 0 or ((g.DebugBeginReturnValueCullDepth + (((g.FrameCount % 4) == 0) and 1 or 0)) % 10) + else + g.DebugBeginReturnValueCullDepth = -1 + end end -- This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal. @@ -14450,9 +14475,10 @@ end --- @param pos ImVec2 --- @param items_height float function ImGui.CalcClipRectVisibleItemsY(clip_rect, pos, items_height) - local visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) - local visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), visible_start) - return visible_start + 1, visible_end + 1 + -- [Port] returns (out_visible_start, out_visible_end), 0-based like upstream + local out_visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) + local out_visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), out_visible_start) + return out_visible_start, out_visible_end end ------------------------------------------------------------------------------- @@ -19742,14 +19768,6 @@ function MT.ImGuiListClipper:Step() return ret end --- Generic helper, equivalent to old ImGui.CalcListClipping() but stateless --- Returns (out_visible_start, out_visible_end) -function ImGui.CalcClipRectVisibleItemsY(clip_rect, pos, items_height) - local out_visible_start = ImMax(ImTrunc((clip_rect.Min.y - pos.y) / items_height), 0) - local out_visible_end = ImMax(ImTrunc(ImCeil((clip_rect.Max.y - pos.y) / items_height)), out_visible_start) - return out_visible_start, out_visible_end -end - ------------------------------------------------------------------------------- -- [SECTION] ERROR CHECKING, STATE RECOVERY ------------------------------------------------------------------------------- @@ -21064,7 +21082,7 @@ function ImGui.ShowMetricsWindow(p_open) _, g.DebugShowGroupRects = ImGui.Checkbox("Show groups rectangles", g.DebugShowGroupRects == true) -- Storing in context as this is used by group code and prefers to be in hot-data ImGui.SeparatorText("Validate") - _, io.ConfigDebugBeginReturnValueLoop = ImGui.Checkbox("Debug Begin/BeginChild return value", io.ConfigDebugBeginReturnValueLoop == true) + _, io.ConfigDebugBeginReturnValueLoop = ImGui.Checkbox("Debug Begin/BeginChild return value", io.ConfigDebugBeginReturnValueLoop) ImGui.SameLine(); MetricsHelpMarker("Some calls to Begin()/BeginChild() will return false.\n\nWill cycle through window depths then repeat. Windows should be flickering while running.") _, cfg.ShowTextEncodingViewer = ImGui.Checkbox("UTF-8 Encoding viewer", cfg.ShowTextEncodingViewer == true) ImGui.SameLine(); MetricsHelpMarker("You can also call ImGui::DebugTextEncoding() from your code with a given string to test that your UTF-8 encoding settings are correct.") diff --git a/imgui_demo.lua b/imgui_demo.lua index 894bdf8..15b7724 100644 --- a/imgui_demo.lua +++ b/imgui_demo.lua @@ -1188,10 +1188,6 @@ end -- [SECTION] DemoWindowWidgetsColorAndPickers() ------------------------------------------------------------------------------- --- [Port] the library does not define the standard color payload types (ColorButton drag source is not ported yet) -IMGUI_PAYLOAD_TYPE_COLOR_3F = IMGUI_PAYLOAD_TYPE_COLOR_3F or "_COL3F" -IMGUI_PAYLOAD_TYPE_COLOR_4F = IMGUI_PAYLOAD_TYPE_COLOR_4F or "_COL4F" - S.DemoWindowWidgetsColorAndPickers = { color = ImVec4(114.0 / 255.0, 144.0 / 255.0, 154.0 / 255.0, 200.0 / 255.0), base_flags = ImGuiColorEditFlags.None, @@ -1301,7 +1297,7 @@ function DemoWindowWidgetsColorAndPickers() if ImGui.BeginDragDropTarget() then local payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F) if payload then - local d = payload.Data -- [Port] memcpy -> copy components (Data is a 1-based float array or ImVec4) + local d = payload.Data -- [Port] memcpy -> copy components (Data is a 1-based float array) saved_palette[n + 1].x, saved_palette[n + 1].y, saved_palette[n + 1].z = d[1], d[2], d[3] end payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F) @@ -7315,9 +7311,8 @@ function DemoWindowInputs() local line_height = ImGui.GetTextLineHeightWithSpacing() local key_chord = bit32.bor(ImGuiMod_Ctrl, ImGuiKey.A) - -- [Port] ImGui.Shortcut() has no owner_id default (upstream public overload passes ImGuiKeyOwner_Any): pass it explicitly. ImGui.Text("Ctrl+A") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, ImGuiKeyOwner_Any) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") ImGui.PushStyleColor(ImGuiCol.ChildBg, ImVec4(1.0, 0.0, 1.0, 0.1)) @@ -7327,7 +7322,7 @@ function DemoWindowInputs() -- 1: Window polling for Ctrl+A ImGui.Text("(in WindowA)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, ImGuiKeyOwner_Any) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") -- 2: InputText also polling for Ctrl+A: it always uses _RouteFocused internally (gets priority when active) -- (Commented because the owner-aware version of Shortcut() is still in imgui_internal.h) @@ -7347,7 +7342,7 @@ function DemoWindowInputs() -- 4: Child window polling for Ctrl+A. It is deeper than WindowA and gets priority when focused. ImGui.BeginChild("ChildE", ImVec2(-FLT_MIN, line_height * 4), true) ImGui.Text("(in ChildE: using same Shortcut)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, ImGuiKeyOwner_Any) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") ImGui.EndChild() -- 5: In a popup @@ -7356,7 +7351,7 @@ function DemoWindowInputs() end if ImGui.BeginPopup("PopupF") then ImGui.Text("(in PopupF)") - ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags, ImGuiKeyOwner_Any) and "PRESSED" or "...") + ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused() and 1 or 0, ImGui.Shortcut(key_chord, flags) and "PRESSED" or "...") -- (Commented because the owner-aware version of Shortcut() is still in imgui_internal.h) --ImGui.InputText("InputTextG", str, IM_COUNTOF(str), ImGuiInputTextFlags.ReadOnly); --ImGui.Text("IsWindowFocused: %d, Shortcut: %s", ImGui.IsWindowFocused(), ImGui.Shortcut(key_chord, flags, ImGui.GetItemID()) ? "PRESSED" : "..."); @@ -7735,7 +7730,7 @@ function ImGui.ShowStyleEditor(ref) end ImGui.SameLine(0.0, 0.0); ImGui.Text(" (out %.2f)", ImGui.GetFontSize()) style.FontScaleMain = ImGui.DragFloat("FontScaleMain", style.FontScaleMain, 0.02, 0.5, 4.0) - ImGui.BeginDisabled(ImGui.GetIO().ConfigDpiScaleFonts == true) -- [Port] field is nil in the port's ImGuiIO (nil would mean "disabled") + ImGui.BeginDisabled(ImGui.GetIO().ConfigDpiScaleFonts) style.FontScaleDpi = ImGui.DragFloat("FontScaleDpi", style.FontScaleDpi, 0.02, 0.5, 4.0) ImGui.SetItemTooltip("When io.ConfigDpiScaleFonts is set, this value is automatically overwritten.") ImGui.EndDisabled() @@ -7987,7 +7982,7 @@ function ImGui.ShowStyleEditor(ref) _, style.AntiAliasedFill = ImGui.Checkbox("Anti-aliased fill", style.AntiAliasedFill) local io = ImGui.GetIO() - _, io.ConfigDebugDrawListDefaultsToStrokeLegacy = ImGui.Checkbox("Debug: DrawList Defaults to _StrokeLegacy", io.ConfigDebugDrawListDefaultsToStrokeLegacy == true) -- [Port] field not declared in the port's ImGuiIO + _, io.ConfigDebugDrawListDefaultsToStrokeLegacy = ImGui.Checkbox("Debug: DrawList Defaults to _StrokeLegacy", io.ConfigDebugDrawListDefaultsToStrokeLegacy) ImGui.PushItemWidth(ImGui.GetFontSize() * 8) -- [Port] the library still stores the older style.CurveTessellationTol (== MaxError * MaxError) instead of style.CurveTessellationMaxError diff --git a/imgui_h.lua b/imgui_h.lua index 13154cd..d23e611 100644 --- a/imgui_h.lua +++ b/imgui_h.lua @@ -1198,6 +1198,9 @@ function ImGuiIO() DisplayFramebufferScale = ImVec2(1.0, 1.0), -- = (1, 1) -- Main display density. For retina display where window coordinates are different from framebuffer coordinates. This will affect font density + will end up in ImDrawData::FramebufferScale. + -- Font system + FontAllowUserScaling = false, -- = false -- Allow user scaling text of individual window with Ctrl+Wheel. + -- Main Input State -- (this block used to be written by backend, since 1.87 it is best to NOT write to those directly, call the AddXXX functions above instead) -- (reading from those variables is fair game, as they are extremely unlikely to be moving anywhere) @@ -1229,6 +1232,25 @@ function ImGuiIO() ConfigDebugIniSettings = false, -- = false -- Save .ini data with extra comments (particularly helpful for Docking, but makes saving slower) ConfigWindowsCopyContentsWithCtrlC = false, -- = false -- [EXPERIMENTAL] Ctrl+C copy the contents of focused window into the clipboard. Experimental because: (1) has known issues with nested Begin/End pairs (2) text output quality varies (3) text output is in submission order rather than spatial order. ConfigWindowsMoveFromTitleBarOnly = false, -- = false -- Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar. + ConfigScrollbarScrollByPage = true, -- = true -- Enable scrolling page by page when clicking outside the scrollbar grab. When disabled, always scroll to clicked location. When enabled, Shift+Click scrolls to clicked location. + ConfigInputTextCursorBlink = true, -- = true -- Enable blinking cursor (optional as some users consider it to be distracting). + ConfigInputTextEnterKeepActive = false, -- = false -- [BETA] Pressing Enter will reactivate item and select all text (single-line only). Ctrl+Enter or Shift+Enter will deactivate normally. + ConfigDragClickToInputText = false, -- = false -- [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard. + + -- Keyboard/Gamepad Navigation options + ConfigNavSwapGamepadButtons = false, -- = false -- Swap Activate<>Cancel (A<>B) buttons, matching typical "Nintendo/Japanese style" gamepad layout. + ConfigNavMoveSetMousePos = false, -- = false -- Directional/tabbing navigation teleports the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is difficult. Will update io.MousePos and set io.WantSetMousePos=true. + ConfigNavCaptureKeyboard = true, -- = true -- Sets io.WantCaptureKeyboard when io.NavActive is set. + ConfigNavEscapeClearFocusItem = true, -- = true -- Pressing Escape can clear focused item + navigation id/highlight. Set to false if you want to always keep highlight on. + ConfigNavEscapeClearFocusWindow = false, -- = false -- Pressing Escape can clear focused window as well (super set of io.ConfigNavEscapeClearFocusItem). + + -- DPI/Scaling options + ConfigDpiScaleFonts = false, -- = false -- [EXPERIMENTAL] Automatically overwrite style.FontScaleDpi when Monitor DPI changes. This will scale fonts but _NOT_ scale sizes/padding for now. + ConfigDpiScaleViewports = false, -- = false -- [EXPERIMENTAL] Scale Dear ImGui and Platform Windows when Monitor DPI changes. + + -- Ini Settings options + ConfigIniSettingsSaveLastUsedDate = true, -- = true -- Enable loading/saving last used day (YYYYMMDD) in some .ini struct, making things easier to audit and allowing custom tools to cleanup old data. + ConfigIniSettingsAutoDiscardMonths = 0, -- = 0 -- [BETA] Set number of months after which unused .ini entries are discarded on load. Require platform_io.Platform_SessionDate to be set. For systems supporting the feature, .ini entries without a LastUsed field will always be discarded! Please report if you are using this. -- Options to configure Error Handling and how we handle recoverable errors [EXPERIMENTAL] -- - Error recovery is provided as a way to facilitate: -- - Recovery after a programming error (native code or scripting language - the latter tends to facilitate iterating on code while running). @@ -1253,6 +1275,14 @@ function ImGuiIO() -- - See FAQ https://github.com/ocornut/imgui/blob/master/docs/FAQ.md#q-about-the-id-stack-system ConfigDebugHighlightIdConflicts = false, -- Highlight and show an error message popup when multiple items have conflicting identifiers. ConfigDebugHighlightIdConflictsShowItemPicker = true, -- =true -- Show "Item Picker" button in aforementioned popup. + ConfigDebugIsDebuggerPresent = false, -- = false -- Enable various tools calling IM_DEBUG_BREAK(). + -- Tools to test correct Begin/End and BeginChild/EndChild behaviors. + ConfigDebugBeginReturnValueOnce = false, -- = false -- First-time calls to Begin()/BeginChild() will return false. NEEDS TO BE SET AT APPLICATION BOOT TIME if you don't want to miss windows. + ConfigDebugBeginReturnValueLoop = false, -- = false -- Some calls to Begin()/BeginChild() will return false. Will cycle through window depths then repeat. Suggested use: add "io.ConfigDebugBeginReturnValue = io.KeyShift" in your main loop then occasionally press SHIFT. Windows should be flickering while running. + -- Option to deactivate io.AddFocusEvent(false) handling. + ConfigDebugIgnoreFocusLoss = false, -- = false -- Ignore io.AddFocusEvent(false), consequently not calling io.ClearInputKeys()/io.ClearInputMouse() in input processing. + -- Option to default all ImDrawList to ImDrawListFlags_StrokeLegacy mode. + ConfigDebugDrawListDefaultsToStrokeLegacy = false, -- false -- Default all ImDrawList to ImDrawList_StrokeLegacy mode, mimicking pre-1.93.0 rendering. [Port] the 1.93 stroke rendering is not ported yet: no effect. IniFilename = "imgui.ini", -- Roblox: no disk access, only used as a flag (nil disables .ini handling) IniSavingRate = 5.0, -- = 5.0f -- Minimum time between saving positions/sizes to .ini file, in seconds. @@ -2119,6 +2149,10 @@ ImGuiDragDropFlags = { ImGuiDragDropFlags.AcceptPeekOnly = bitOr(ImGuiDragDropFlags.AcceptBeforeDelivery, ImGuiDragDropFlags.AcceptNoDrawDefaultRect) -- For peeking ahead and inspecting the payload before delivery. +-- Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui. +IMGUI_PAYLOAD_TYPE_COLOR_3F = "_COL3F" -- float[3]: Standard type for colors, without alpha. User code may use this type. [Port] payload.Data = { r, g, b } (1-based) +IMGUI_PAYLOAD_TYPE_COLOR_4F = "_COL4F" -- float[4]: Standard type for colors. User code may use this type. [Port] payload.Data = { r, g, b, a } (1-based) + -- Helpers macros to generate 32-bit encoded colors IM_COL32_R_SHIFT = 0 IM_COL32_G_SHIFT = 8 diff --git a/imgui_internal.lua b/imgui_internal.lua index 05e2f0d..1c51f02 100644 --- a/imgui_internal.lua +++ b/imgui_internal.lua @@ -1757,12 +1757,14 @@ IMGUI_TEXT_INDEX.__index = IMGUI_TEXT_INDEX function IMGUI_TEXT_INDEX:clear() self.Offsets:clear(); self.EndOffset = 0; end +function IMGUI_TEXT_INDEX:size() return self.Offsets.Size end +-- [Port] 'n' is a 0-based line number like upstream (Offsets.Data is 1-based), 'base' the 1-based position of the buffer start; returns 1-based positions function IMGUI_TEXT_INDEX:get_line_begin(base, n) - return base + (self.Offsets.Size ~= 0 and self.Offsets[n] or 0) + return base + (self.Offsets.Size ~= 0 and self.Offsets.Data[n + 1] or 0) end function IMGUI_TEXT_INDEX:get_line_end(base, n) - return base + ((n + 1 < self.Offsets.Size) and (self.Offsets[n + 1] - 1) or self.EndOffset) + return base + ((n + 1 < self.Offsets.Size) and (self.Offsets.Data[n + 2] - 1) or self.EndOffset) end --- @return ImGuiTextIndex @@ -2166,7 +2168,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct NavActivateId = 0, NavActivateDownId = 0, NavActivatePressedId = 0, -- ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey.Space) || IsKeyDown(ImGuiKey.Enter) || IsKeyPressed(ImGuiKey.NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItemByID() NavActivateFlags = ImGuiActivateFlags.None, - FrameCount = -1, + FrameCount = 0, FrameCountEnded = -1, FrameCountPlatformEnded = -1, @@ -2339,6 +2341,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct DebugLogFlags = bitOr(ImGuiDebugLogFlags.EventError, ImGuiDebugLogFlags.OutputToTTY), DebugFlashStyleColorIdx = nil, + DebugBeginReturnValueCullDepth = -1, -- Cycle between 0..9 then wrap around. DebugMetricsConfig = ImGuiMetricsConfig(), DebugHookIdInfoId = 0, -- Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool diff --git a/imgui_widgets.lua b/imgui_widgets.lua index 9a046b6..78b951d 100644 --- a/imgui_widgets.lua +++ b/imgui_widgets.lua @@ -5109,34 +5109,37 @@ end --- @param flags ImGuiInputTextFlags --- @param line_index ImGuiTextIndex --- @param buf char[] ---- @param buf_end int +--- @param buf_end? int # nil: inactive multi-line path, end found with strchr() --- @param wrap_width float --- @param max_output_buffer_size int +--- @param want_out_buf_end boolean --- @return int size ---- @return int? out_buf_end -local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_width, max_output_buffer_size) +--- @return int? out_buf_end # [Port] 'const char** out_buf_end' output parameter becomes a 2nd return value (nil when not requested) +local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_width, max_output_buffer_size, want_out_buf_end) local g = GImGui local size = 0 - local s = 1 + local s local trailing_line_already_counted = false + -- [Port] 's' is a 1-based position in 'buf' (C++ s == buf + (s - 1)), Offsets store 0-based offsets like upstream. if bit32.band(flags, ImGuiInputTextFlags.WordWrap) ~= 0 then + s = 1 while s < buf_end do if size <= max_output_buffer_size then line_index.Offsets:push_back(s - 1) end size = size + 1 s = ImFontCalcWordWrapPositionEx(g.Font, g.FontSize, buf, s, buf_end, wrap_width, ImDrawTextFlags.WrapKeepBlanks) - if buf[s] == 10 then s = s + 1 end end elseif buf_end ~= nil then + s = 1 while s < buf_end do if size <= max_output_buffer_size then line_index.Offsets:push_back(s - 1) end size = size + 1 - s = ImMemchr(buf, 10, s) --[[@as int]] -- FIXME: - + s = ImMemchr(buf, 10, s) + if s ~= nil and s >= buf_end then s = nil end -- [Port] ImMemchr() stops at the zero-terminator, not at buf_end if s then s = s + 1 else s = buf_end end end else @@ -5148,20 +5151,17 @@ local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_wid line_index.Offsets:push_back(s - 1) end size = size + 1 - s_eol = ImMemchr(buf, 10, s) if s_eol == nil then - s = s + ImStd.ImStrlen(buf) - s -- FIXME: + s = s + ImStd.ImStrlen(buf, s) trailing_line_already_counted = true break end - s = s_eol + 1 end end - - local out_buf_end - if out_buf_end ~= nil then + local out_buf_end = nil + if want_out_buf_end then out_buf_end = s buf_end = s end @@ -5169,11 +5169,11 @@ local function InputTextLineIndexBuild(flags, line_index, buf, buf_end, wrap_wid line_index.Offsets:push_back(0) size = size + 1 end - if s > 1 and buf[s - 1] == 10 and not trailing_line_already_counted then + if buf_end > 1 and buf[buf_end - 1] == 10 and not trailing_line_already_counted then local old_size = size size = size + 1 if old_size <= max_output_buffer_size then - line_index.Offsets:push_back(s - 1) + line_index.Offsets:push_back(buf_end - 1) end end return size, out_buf_end @@ -5212,24 +5212,24 @@ end --- @param cursor_n int --- @return ImVec2 local function InputTextLineIndexGetPosOffset(g, state, line_index, buf, buf_end, cursor_n) + -- [Port] 'cursor_n' is a 1-based position (Stb.cursor) == C++ cursor_ptr; Offsets hold 0-based offsets, compare with cursor_n - 1. local cursor_ptr = cursor_n - - local it = ImLowerBound(line_index.Offsets, 1, line_index.Offsets.Size + 1, cursor_ptr) - - if it > 1 then - if it > line_index.Offsets.Size or line_index.Offsets[it] ~= cursor_ptr or (state ~= nil and state.WrapWidth > 0.0 and state.LastMoveDirectionLR == ImGuiDir.Right and - buf[cursor_ptr - 1] ~= 10 and buf[cursor_ptr - 1] ~= 0) then + local cursor_off = cursor_n - 1 + local offsets = line_index.Offsets + local it_begin = 1 + local it_end = offsets.Size + 1 + local it = ImLowerBound(offsets.Data, it_begin, it_end, cursor_off) + if it > it_begin then + if it == it_end or offsets.Data[it] ~= cursor_off or (state ~= nil and state.WrapWidth > 0.0 and state.LastMoveDirectionLR == ImGuiDir.Right and buf[cursor_ptr - 1] ~= 10 and buf[cursor_ptr - 1] ~= 0) then it = it - 1 end end - local line_no = it - local line_start = (line_no == 1) and 1 or line_index.Offsets[line_no] + 1 - + local line_no = (it == it_begin) and 0 or (it - 1) -- 0-based (index_from_ptr) + local line_start = line_index:get_line_begin(1, line_no) local offset = ImVec2() offset.x = InputTextCalcTextSize(g, buf, line_start, cursor_ptr, buf_end, nil, ImDrawTextFlags.WrapKeepBlanks).x - offset.y = line_no * g.FontSize - + offset.y = (line_no + 1) * g.FontSize return offset end @@ -5960,7 +5960,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- Write back result string if modified. -- FIXME-OPT: Could mark dirty state from the stb_textedit callbacks if not is_readonly then - if bit32.band(g.LastItemData.ItemFlags, ImGuiItemFlags.LiveEditOnInputScalar) ~= 0 then + if bit32.band(g.LastItemData.ItemFlags, ImGuiItemFlags.LiveEditOnInputText) ~= 0 then -- Apply when modified if (ImStd.strcmp(state.TextSrc, buf) ~= 0) then apply_new_text = state.TextSrc @@ -6079,7 +6079,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback end -- Calculate visibility - local line_visible_n0, line_visible_n1 = 1, 2 + local line_visible_n0, line_visible_n1 = 0, 1 -- 0-based like upstream if is_multiline then line_visible_n0, line_visible_n1 = ImGui.CalcClipRectVisibleItemsY(clip_rect, draw_pos, g.FontSize) end @@ -6092,15 +6092,15 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- If scrolling is expected to change build full index. -- FIXME-OPT: Could append to index when new value of line_visible_n1 becomes bigger, see second call to CalcClipRectVisibleItemsY() below. local will_scroll_y = state and ((state.CursorFollow and render_cursor) or (state.CursorCenterY and (render_cursor or render_selection))) - --- @cast buf_display_end int local out_buf_end - line_count, out_buf_end = InputTextLineIndexBuild(flags, line_index, buf_display, buf_display_end, wrap_width, will_scroll_y and INT_MAX or (line_visible_n1 + 1)) - if buf_display_end then + line_count, out_buf_end = InputTextLineIndexBuild(flags, line_index, buf_display, buf_display_end, wrap_width, will_scroll_y and INT_MAX or (line_visible_n1 + 1), buf_display_end == nil) + if buf_display_end == nil then buf_display_end = out_buf_end end end + --- @cast buf_display_end int line_index.EndOffset = buf_display_end - 1 - line_visible_n1 = ImMin(line_visible_n1, line_count + 1) + line_visible_n1 = ImMin(line_visible_n1, line_count) -- Store text height (we don't need width) local text_size_y = line_count * g.FontSize @@ -6201,7 +6201,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback local rect = ImRect() rect.Min.x = draw_pos.x - draw_scroll.x + ImGui.CalcTextSizeEx(buf_display, p, line_selected_begin).x - rect.Min.y = draw_pos.y - draw_scroll.y + (line_n - 1) * g.FontSize + rect.Min.y = draw_pos.y - draw_scroll.y + line_n * g.FontSize rect.Max.x = rect.Min.x + rect_width rect.Max.y = rect.Min.y + bg_offy_dn + g.FontSize rect.Min.y = rect.Min.y + bg_offy_up @@ -6222,7 +6222,7 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback -- Render text if (is_multiline or (buf_display_end - 1) < buf_display_max_length) and bit32.band(text_col, IM_COL32_A_MASK) ~= 0 and line_visible_n0 < line_visible_n1 then g.Font:RenderText(draw_window.DrawList, g.FontSize, - draw_pos - draw_scroll + ImVec2(0.0, (line_visible_n0 - 1) * g.FontSize), + draw_pos - draw_scroll + ImVec2(0.0, line_visible_n0 * g.FontSize), text_col, clip_rect:AsVec4(), buf_display, line_index:get_line_begin(1, line_visible_n0), @@ -6640,7 +6640,28 @@ function ImGui.ColorEdit4(label, col, flags) ImGui.EndGroup() -- Drag and Drop Target - -- TODO: + -- NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test. + if bit32.band(g.LastItemData.StatusFlags, ImGuiItemStatusFlags.HoveredRect) ~= 0 and bit32.band(g.LastItemData.ItemFlags, ImGuiItemFlags.ReadOnly) == 0 and bit32.band(flags, ImGuiColorEditFlags.NoDragDrop) == 0 and ImGui.BeginDragDropTarget() then + local accepted_drag_drop = false + local payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F) + if payload then + local d = payload.Data + col[1], col[2], col[3] = d[1], d[2], d[3] -- Preserve alpha if any + value_changed = true; accepted_drag_drop = true + end + payload = ImGui.AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F) + if payload then + local d = payload.Data + for i = 1, components do col[i] = d[i] end + value_changed = true; accepted_drag_drop = true + end + + -- Drag-drop payloads are always RGB + if accepted_drag_drop and bit32.band(flags, ImGuiColorEditFlags.InputHSV) ~= 0 then + col[1], col[2], col[3] = ImGui.ColorConvertRGBtoHSV(col[1], col[2], col[3]) + end + ImGui.EndDragDropTarget() + end -- When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4(). if picker_active_window and g.ActiveId ~= 0 and g.ActiveIdWindow == picker_active_window then @@ -7209,17 +7230,20 @@ function ImGui.ColorButton(desc_id, col, flags, size_arg) -- Drag and Drop Source -- NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test. - -- if g.ActiveId == id and bit32.band(flags, ImGuiColorEditFlags.NoDragDrop) == 0 and ImGui.BeginDragDropSource() then - -- if bit32.band(flags, ImGuiColorEditFlags.NoAlpha) ~= 0 then - -- ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, col_rgb, ImGuiCond.Once) - -- else - -- ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, col_rgb, ImGuiCond.Once) - -- end - -- ImGui.ColorButton(desc_id, col, flags) - -- ImGui.SameLine() - -- ImGui.TextEx("Color") - -- ImGui.EndDragDropSource() - -- end + -- [Port] payload.Data is a 1-based float array copy { r, g, b [, a] } (C++ memcpy of float[3]/float[4]) + if g.ActiveId == id and bit32.band(flags, ImGuiColorEditFlags.NoDragDrop) == 0 and ImGui.BeginDragDropSource() then + if bit32.band(flags, ImGuiColorEditFlags.NoAlpha) ~= 0 then + ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, { col_rgb.x, col_rgb.y, col_rgb.z }, 3, ImGuiCond.Once) + else + ImGui.SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, { col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.w }, 4, ImGuiCond.Once) + end + ImGui.PushItemFlag(ImGuiItemFlags.MixedValue, false) + ImGui.ColorButton(desc_id, col, flags) + ImGui.PopItemFlag() + ImGui.SameLine() + ImGui.TextEx("Color") + ImGui.EndDragDropSource() + end -- Tooltip if bit32.band(flags, ImGuiColorEditFlags.NoTooltip) == 0 and hovered and ImGui.IsItemHovered(ImGuiHoveredFlags.ForTooltip) then diff --git a/tools/test/check_all.sh b/tools/test/check_all.sh index bb73e91..cb56003 100755 --- a/tools/test/check_all.sh +++ b/tools/test/check_all.sh @@ -12,7 +12,7 @@ CHECKS=( "readme|README OK|$R --main tools/test/scripts/t_readme.luau --frames 30" "readme-min|README OK|MINIFY=1 $R --main tools/test/scripts/t_readme.luau --frames 30" "cached|CACHED OK|$R --main tools/test/scripts/t_cached_window.luau --frames 130" -"fixes|FIXES OK|$R --main tools/test/scripts/t_fixes.luau --frames 25" +"fixes|FIXES OK|$R --main tools/test/scripts/t_fixes.luau --frames 55" "nodemo|NODEMO OK|NO_DEMO=1 $R --main tools/test/scripts/t_nodemo.luau --frames 25" "widgets|OK|$R --main tools/test/scripts/t_widgets.luau --frames 80" "tables|OK|$R --main tools/test/scripts/t_tables.luau --frames 150" diff --git a/tools/test/scripts/t_fixes.luau b/tools/test/scripts/t_fixes.luau index c90fa90..0b9d4a9 100644 --- a/tools/test/scripts/t_fixes.luau +++ b/tools/test/scripts/t_fixes.luau @@ -1,5 +1,6 @@ -- Regressions vs upstream: clipboard paste filter (InputTextEx), ImParseFormatTrimDecorations (Ctrl+click temp input), ShrinkWidths tie order, --- CalcItemSize by value, PushClipRectFullScreen (drop target outside clip rect) +-- CalcItemSize by value, PushClipRectFullScreen (drop target outside clip rect), InputTextMultiline line index (render/scroll/edit), Shortcut() default +-- args, IsWindowAppearing() on frame 1 (FrameCount starts at 0), ColorButton -> ColorEdit4 drag and drop local G = require(game:GetService("ReplicatedStorage"):WaitForChild("ImGui")) local ImGui, ImVec2 = G.ImGui, G.ImVec2 ImGui.CreateContext(); G.ImGui_ImplRoblox.Init() @@ -31,6 +32,12 @@ local function click(name, ctrl) end local function release() io:AddMouseButtonEvent(0, false); io:AddKeyEvent(G.ImGuiMod_Ctrl, false) end local function key(k) io:AddKeyEvent(k, true); io:AddKeyEvent(k, false) end +local function center(name) local r = rects[name]; return (r[1].x + r[2].x) / 2, (r[1].y + r[2].y) / 2 end +local ml_text = "line1\nline2\nline3\nline4\nline5\nline6" +local mbuf = ImGui.NewTextBuffer(ml_text, 256) +local wbuf = ImGui.NewTextBuffer("a long line that has to be word wrapped several times inside the narrow box\nsecond", 256) +local shortcut_frames = {} +local cb_col, ce_col = G.ImVec4(1, 0, 0, 1), { 0, 0, 0, 1 } game:GetService("RunService").Stepped:Connect(function() f += 1 @@ -43,9 +50,35 @@ game:GetService("RunService").Stepped:Connect(function() if f == 11 then click("s", true) elseif f == 12 then release() end if f == 14 then key(G.ImGuiKey.Escape) end if f == 16 then click("d", true) elseif f == 17 then release() end + -- multi-line: click, Ctrl+End, type "x", Enter, "y" + if f == 21 then click("m") elseif f == 22 then release() end + if f == 23 then io:AddKeyEvent(G.ImGuiMod_Ctrl, true); io:AddKeyEvent(G.ImGuiKey.End, true) end + if f == 24 then io:AddKeyEvent(G.ImGuiKey.End, false); io:AddKeyEvent(G.ImGuiMod_Ctrl, false) end + if f == 25 then io:AddInputCharacter(string.byte("x")) end + if f == 26 then key(G.ImGuiKey.Enter) end + if f == 28 then io:AddInputCharacter(string.byte("y")) end + if f == 29 then io:AddKeyEvent(G.ImGuiMod_Ctrl, true); io:AddKeyEvent(G.ImGuiKey.A, true) end -- select all: renders the multi-line selection + if f == 30 then io:AddKeyEvent(G.ImGuiKey.A, false); io:AddKeyEvent(G.ImGuiMod_Ctrl, false) end + if f == 31 then key(G.ImGuiKey.Escape) end + -- Shortcut(chord) with default flags/owner + if f == 33 then io:AddKeyEvent(G.ImGuiMod_Ctrl, true); io:AddKeyEvent(G.ImGuiKey.S, true) end + if f == 34 then io:AddKeyEvent(G.ImGuiKey.S, false); io:AddKeyEvent(G.ImGuiMod_Ctrl, false) end + -- drag the ColorButton onto the ColorEdit4 + if f == 36 then io:AddMousePosEvent(center("cb")) end + if f == 37 then io:AddMouseButtonEvent(0, true) end + if f == 38 then local x, y = center("cb"); io:AddMousePosEvent(x + 10, y + 5) end + if f == 39 then io:AddMousePosEvent(center("ce")) end + if f == 42 then io:AddMouseButtonEvent(0, false) end + -- word-wrapped multi-line: click, Ctrl+End, type "z" + if f == 45 then click("w") elseif f == 46 then release() end + if f == 47 then io:AddKeyEvent(G.ImGuiMod_Ctrl, true); io:AddKeyEvent(G.ImGuiKey.End, true) end + if f == 48 then io:AddKeyEvent(G.ImGuiKey.End, false); io:AddKeyEvent(G.ImGuiMod_Ctrl, false) end + if f == 49 then io:AddInputCharacter(string.byte("z")) end ImGui.NewFrame() ImGui.SetNextWindowPos(ImVec2(10, 10)); ImGui.SetNextWindowSize(ImVec2(300, 200)) ImGui.Begin("T") + if f == 1 then check(ImGui.GetFrameCount() == 1 and ImGui.IsWindowAppearing(), "IsWindowAppearing() on frame 1") end + if f == 2 then check(not ImGui.IsWindowAppearing(), "IsWindowAppearing() on frame 2") end ImGui.InputText("##t", buf, 64); rects.t = rect() sf = ImGui.SliderFloat("##s", sf, 0.0, 100.0, "%.0f deg"); rects.s = rect() di = ImGui.DragInt("##d", di, 1, 0, 100, "%d%%"); rects.d = rect() @@ -56,9 +89,32 @@ game:GetService("RunService").Stepped:Connect(function() -- drop target rect sticking out of the window clip rect pushes a full-screen clip rect ImGui.RenderDragDropTargetRectForItem(G.ImRect(-50, -50, 900, 900)) ImGui.End() + ImGui.SetNextWindowPos(ImVec2(320, 10)); ImGui.SetNextWindowSize(ImVec2(300, 200)) + ImGui.Begin("M") + ImGui.InputTextMultiline("##m", mbuf, 256, ImVec2(200, ImGui.GetTextLineHeight() * 3)); rects.m = rect() + if f == 30 then + local st = ImGui.GetCurrentContext().InputTextState + check(st.LineCount == 7, "multiline LineCount " .. tostring(st.LineCount)) + local cw -- the multi-line child window: cursor on the last line scrolled it + for _, w in ImGui.GetCurrentContext().Windows.Data do if w.Name:find("^M/##m_") then cw = w end end + check(cw ~= nil and cw.Scroll.y > 0, "multiline scroll " .. tostring(cw and cw.Scroll.y)) + end + ImGui.InputTextMultiline("##w", wbuf, 256, ImVec2(120, 80), G.ImGuiInputTextFlags.WordWrap); rects.w = rect() + if f == 30 then check(ImGui.GetCurrentContext().InputTextState:HasSelection(), "multiline select all") end + if ImGui.Shortcut(bit32.bor(G.ImGuiMod_Ctrl, G.ImGuiKey.S)) then shortcut_frames[f] = true end + ImGui.End() + ImGui.SetNextWindowPos(ImVec2(10, 220)); ImGui.SetNextWindowSize(ImVec2(300, 150)) + ImGui.Begin("D") + ImGui.ColorButton("cb", cb_col); rects.cb = rect() + ImGui.ColorEdit4("##ce", ce_col); rects.ce = rect() + ImGui.End() ImGui.Render(); G.ImGui_ImplRoblox.RenderDrawData(ImGui.GetDrawData()) if f == 8 then check(edit_text() == "abc\u{e9}", "paste: '" .. edit_text() .. "'") end if f == 13 then check(edit_text() == "45", "SliderFloat temp input: '" .. edit_text() .. "'") end if f == 18 then check(edit_text() == "50", "DragInt temp input: '" .. edit_text() .. "'") end - if f == 20 and #failed == 0 then print("FIXES OK") end + if f == 30 then check(ImGui.TextBufferToString(mbuf) == ml_text .. "x\ny", "multiline buffer: '" .. ImGui.TextBufferToString(mbuf) .. "'") end + if f == 35 then check(shortcut_frames[33] and not shortcut_frames[32] and not shortcut_frames[34], "Shortcut(Ctrl+S) default args") end + if f == 44 then check(ce_col[1] == 1 and ce_col[2] == 0 and ce_col[3] == 0 and ce_col[4] == 1, ("color drop: %s %s %s %s"):format(ce_col[1], ce_col[2], ce_col[3], ce_col[4])) end + if f == 51 then check(ImGui.TextBufferToString(wbuf):sub(-7) == "secondz", "word-wrap buffer: '" .. ImGui.TextBufferToString(wbuf) .. "'") end + if f == 52 and #failed == 0 then print("FIXES OK") end end)