diff --git a/build/ImGui.linemap.json b/build/ImGui.linemap.json index ea0bada..063d3be 100644 --- a/build/ImGui.linemap.json +++ b/build/ImGui.linemap.json @@ -1 +1 @@ -[[46, "imgui.lua"], [21461, "imgui_demo.lua"], [33313, "imgui_draw.lua"], [40829, "imgui_h.lua"], [43735, "imgui_impl_roblox.lua"], [45383, "imgui_impl_roblox_fonts.lua"], [51786, "imgui_internal.lua"], [55495, "imgui_tables.lua"], [60554, "imgui_widgets.lua"], [72543, "imstb_rectpack.lua"], [73207, "imstb_textedit.lua"], [74749, "imstb_truetype.lua"], [77537, "imstd_minstdio.lua"]] \ No newline at end of file +[[46, "imgui.lua"], [21466, "imgui_demo.lua"], [33318, "imgui_draw.lua"], [40827, "imgui_h.lua"], [43733, "imgui_impl_roblox.lua"], [45381, "imgui_impl_roblox_fonts.lua"], [51784, "imgui_internal.lua"], [55494, "imgui_tables.lua"], [60553, "imgui_widgets.lua"], [72529, "imstb_rectpack.lua"], [73193, "imstb_textedit.lua"], [74735, "imstb_truetype.lua"], [77523, "imstd_minstdio.lua"]] \ No newline at end of file diff --git a/build/ImGui.luau b/build/ImGui.luau index 17cd60b..e0b78f7 100644 --- a/build/ImGui.luau +++ b/build/ImGui.luau @@ -10504,7 +10504,7 @@ local function RenderWindowOuterBorders(window) if g.Style.FrameBorderSize > 0 and (bit32.band(window.Flags, 1 --[[ImGuiWindowFlags.NoTitleBar]]) == 0) and not window.DockIsActive then local y = window.Pos.y + window.TitleBarHeight - 1 - window.DrawList:AddLineH(window.Pos.x + border_size * 0.5, window.Pos.x + window.Size.x - border_size * 0.5, y, border_col, g.Style.FrameBorderSize) + window.DrawList:AddLineH(window.Pos.x + border_size, window.Pos.x + window.Size.x - border_size, y, border_col, g.Style.FrameBorderSize, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end end @@ -10585,7 +10585,7 @@ local function RenderWindowDecorations(window, title_bar_rect, title_bar_is_high menu_bar_rect:ClipWith(window:Rect()) -- Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them. window.DrawList:AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, ImGui.GetColorU32(13 --[[ImGuiCol.MenuBarBg]]), (bit32.band(flags, 1 --[[ImGuiWindowFlags.NoTitleBar]]) ~= 0) and window_rounding or 0.0, 48 --[[ImDrawFlags.RoundTop]]) if style.FrameBorderSize > 0.0 and menu_bar_rect.Max.y < window.Pos.y + window.Size.y then - window.DrawList:AddLineH(menu_bar_rect.Min.x + window_border_size * 0.5, menu_bar_rect.Max.x - window_border_size * 0.5, menu_bar_rect.Max.y, ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), style.FrameBorderSize) + window.DrawList:AddLineH(menu_bar_rect.Min.x + window_border_size, menu_bar_rect.Max.x - window_border_size, menu_bar_rect.Max.y, ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), style.FrameBorderSize, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end end @@ -19084,7 +19084,7 @@ function ImGui.RenderDimmedBackgrounds() window.DrawList:ChannelsMerge() if window.DrawList.CmdBuffer.Size == 0 then window.DrawList:AddDrawCmd() end window.DrawList:PushClipRect(viewport.Pos, viewport.Pos + viewport.Size) - window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(60 --[[ImGuiCol.NavWindowingHighlight]], g.NavWindowingHighlightAlpha), window.WindowRounding, 0, 3.0) -- FIXME-DPI + window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(60 --[[ImGuiCol.NavWindowingHighlight]], g.NavWindowingHighlightAlpha), window.WindowRounding, 3.0) -- FIXME-DPI window.DrawList:PopClipRect() end end @@ -20730,8 +20730,7 @@ function ImGui.DebugNodeDrawList(window, viewport, draw_list, label) else local cr = pcmd.ClipRect local open = ImGui.TreeNode(cmd_n, "DrawCmd:%5d tris, Tex %s, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)", math.floor(pcmd.ElemCount / 3), tostring(pcmd.TexRef and (pcmd.TexRef._TexID or pcmd.TexRef._TexData)), cr.x, cr.y, cr.z, cr.w) - local function ShowMesh(show_mesh, show_aabb) - if not fg_draw_list then return end + local function ShowMeshImpl(show_mesh, show_aabb) local clip_rect = ImRect(cr.x, cr.y, cr.z, cr.w) local vtxs_rect = ImRect(3.4028234663853e+38 --[[FLT_MAX]], 3.4028234663853e+38 --[[FLT_MAX]], -3.4028234663853e+38 --[[FLT_MAX]], -3.4028234663853e+38 --[[FLT_MAX]]) local base = pcmd.IdxOffset @@ -20750,6 +20749,12 @@ function ImGui.DebugNodeDrawList(window, viewport, draw_list, label) fg_draw_list:AddRect(ImTrunc(vtxs_rect.Min), ImTrunc(vtxs_rect.Max), IM_COL32(0, 255, 255, 255)) -- In cyan: bounding box of triangles end end + local function ShowMesh(show_mesh, show_aabb) -- DebugNodeDrawCmdShowMeshAndBoundingBox() + if not fg_draw_list then return end + fg_draw_list:PushDrawFlag(8192 --[[ImDrawFlags.AALines]], false) -- Disable AA on triangle outlines is more readable for very large and thin triangles. + ShowMeshImpl(show_mesh, show_aabb) + fg_draw_list:PopDrawFlag() + end if ImGui.IsItemHovered() and (cfg.ShowDrawCmdMesh or cfg.ShowDrawCmdBoundingBoxes) then ShowMesh(cfg.ShowDrawCmdMesh, cfg.ShowDrawCmdBoundingBoxes) end if open then ImGui.Selectable(string.format("Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d", pcmd.ElemCount, pcmd.VtxOffset, pcmd.IdxOffset)) @@ -20778,8 +20783,8 @@ function ImGui.DebugNodeTabBar(tab_bar, label) if is_active and ImGui.IsItemHovered() then local dl = FG(tab_bar.Window) dl:AddRect(tab_bar.BarRect.Min, tab_bar.BarRect.Max, IM_COL32(255, 255, 0, 255)) - dl:AddLine(ImVec2(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Min.y), ImVec2(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Max.y), IM_COL32(0, 255, 0, 255)) - dl:AddLine(ImVec2(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Min.y), ImVec2(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Max.y), IM_COL32(0, 255, 0, 255)) + dl:AddLineV(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Min.y, tab_bar.BarRect.Max.y, IM_COL32(0, 255, 0, 255)) + dl:AddLineV(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Min.y, tab_bar.BarRect.Max.y, IM_COL32(0, 255, 0, 255)) end if open then for tab_n, tab in tab_bar.Tabs:iter() do @@ -40469,7 +40474,7 @@ function ImGui.RenderCheckMark(draw_list, pos, col, sz) draw_list:PathLineTo(p) p.x = bx + third * 2.0; p.y = by - third * 2.0 draw_list:PathLineTo(p) - draw_list:PathStroke(col, thickness) + draw_list:PathStroke(col, thickness, 16384 --[[ImDrawFlags.AALineEnds]]) end -- Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side. @@ -40555,7 +40560,7 @@ function ImGui.RenderRectFilledInRangeH(draw_list, rect, col, fill_x0, fill_x1, end end - draw_list:PathFillConvex(col) + draw_list:PathFillConvex(col, 1024 --[[ImDrawFlags.JoinMiter]]) end --- @param r_in ImRect @@ -40589,16 +40594,16 @@ end -- Helper for ColorPicker4() -- NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that. -- Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding altogether. --- FIXME: uses ImGui.GetColorU32 --- @param draw_list ImDrawList --- @param p_min ImVec2 --- @param p_max ImVec2 --- @param col ImU32 +--- @param alpha float --- @param grid_step float --- @param grid_off ImVec2 --- @param rounding? float --- @param flags? ImDrawFlags -function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col, grid_step, grid_off, rounding, flags) +function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col, alpha, grid_step, grid_off, rounding, flags) if rounding == nil then rounding = 0.0 end if flags == nil then flags = 0 end @@ -40607,60 +40612,53 @@ function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col end if bit32.rshift(bit32.band(col, 4278190080 --[[IM_COL32_A_MASK]]), 24 --[[IM_COL32_A_SHIFT]]) < 0xFF then - local col_bg1 = ImGui.GetColorU32(ImStd.ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col), nil, true) - local col_bg2 = ImGui.GetColorU32(ImStd.ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col), nil, true) - draw_list:AddRectFilled(p_min, p_max, col_bg1, rounding, flags) + assert(alpha >= 0.0 and alpha <= 1.0) + local a_mask = bit32.lshift(ImTrunc(alpha * 255.0), 24 --[[IM_COL32_A_SHIFT]]) + local col_bg1 = bit32.bor(bit32.band(ImStd.ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col), bit32.bnot(4278190080 --[[IM_COL32_A_MASK]])), a_mask) + local col_bg2 = bit32.bor(bit32.band(ImStd.ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col), bit32.bnot(4278190080 --[[IM_COL32_A_MASK]])), a_mask) + local dual_layer = (alpha == 1.0) -- Dual layer is faster but incorrect if blending. + if dual_layer then + draw_list:AddRectFilled(p_min, p_max, col_bg1, rounding, flags) + end local yi = 0 local y = p_min.y + grid_off.y - local x_start - local x - local cell_flags while y < p_max.y do - repeat - local y1 = ImClamp(y, p_min.y, p_max.y) - local y2 = ImMin(y + grid_step, p_max.y) + local y1 = ImClamp(ImTrunc(y), p_min.y, p_max.y) + local y2 = ImMin(ImTrunc(y + grid_step), p_max.y) + if y2 > y1 then + local x_start_off = dual_layer and (((yi + 1) % 2) * grid_step) or 0.0 + local x_step = dual_layer and (grid_step * 2.0) or grid_step + local xi = 0 + local x = p_min.x + grid_off.x + x_start_off + while x < p_max.x do + local x1 = ImClamp(ImTrunc(x), p_min.x, p_max.x) + local x2 = ImMin(ImTrunc(x + grid_step), p_max.x) + if x2 > x1 then + local cell_flags = 256 --[[ImDrawFlags.RoundNone]] -- FIXME: Could use CalcRoundingFlagsForRectInRect() + if y1 <= p_min.y then + if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 16 --[[ImDrawFlags.RoundTopLeft]]) end + if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 32 --[[ImDrawFlags.RoundTopRight]]) end + end + if y2 >= p_max.y then + if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 64 --[[ImDrawFlags.RoundBottomLeft]]) end + if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 128 --[[ImDrawFlags.RoundBottomRight]]) end + end - if y2 <= y1 then - break + -- Combine flags + if flags == 256 --[[ImDrawFlags.RoundNone]] or cell_flags == 256 --[[ImDrawFlags.RoundNone]] then + cell_flags = 256 --[[ImDrawFlags.RoundNone]] + else + cell_flags = bit32.band(cell_flags, flags) + end + local col_bg + if dual_layer then col_bg = col_bg2 elseif (yi + xi) % 2 == 1 then col_bg = col_bg2 else col_bg = col_bg1 end + draw_list:AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg, rounding, cell_flags) + end + x = x + x_step + xi = xi + 1 + end end - - x_start = p_min.x + grid_off.x + ((yi + 1) % 2) * grid_step - x = x_start - while x < p_max.x do - repeat - local x1 = ImClamp(x, p_min.x, p_max.x) - local x2 = ImMin(x + grid_step, p_max.x) - - if x2 <= x1 then - break - end - - cell_flags = 256 --[[ImDrawFlags.RoundNone]] -- FIXME: Could use CalcRoundingFlagsForRectInRect() - if y1 <= p_min.y then - if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 16 --[[ImDrawFlags.RoundTopLeft]]) end - if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 32 --[[ImDrawFlags.RoundTopRight]]) end - end - if y2 >= p_max.y then - if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 64 --[[ImDrawFlags.RoundBottomLeft]]) end - if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 128 --[[ImDrawFlags.RoundBottomRight]]) end - end - - -- Combine flags - if flags == 256 --[[ImDrawFlags.RoundNone]] or cell_flags == 256 --[[ImDrawFlags.RoundNone]] then - cell_flags = 256 --[[ImDrawFlags.RoundNone]] - else - cell_flags = bit32.band(cell_flags, flags) - end - draw_list:AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding, cell_flags) - - until true - - x = x + grid_step * 2.0 - end - - until true - y = y + grid_step yi = yi + 1 end @@ -54293,6 +54291,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct DisabledAlphaBackup = 0.0, -- Backup for style.Alpha for BeginDisabled() DisabledStackSize = 0, + MixedValueLabel = "-", -- Value replacement when displaying a mixed value. ItemFlagsStack = ImVector(), -- Stack for PushItemFlag()/PopItemFlag() - inherited by Begin() GroupStack = ImVector(), -- Stack for BeginGroup()/EndGroup() - not inherited by Begin() @@ -61487,7 +61486,7 @@ function ImGui.CloseButton(id, pos) window.DrawList:AddRectFilled(bb.Min, bb.Max, bg_col) end - local cross_center = bb:GetCenter() - ImVec2(0.5, 0.5) + local cross_center = bb:GetCenter() local cross_extent = g.FontSize * 0.5 * 0.7071 - 1 local cross_col = ImGui.GetColorU32(0 --[[ImGuiCol.Text]]) local cross_thickness = 1.0 -- FIXME-DPI @@ -61497,32 +61496,6 @@ function ImGui.CloseButton(id, pos) return pressed end ---- @return bool -function ImGui.CollapseButton(id, pos) - local g = GImGui - - local window = g.CurrentWindow - - local bb = ImRect(pos, pos + ImVec2(g.FontSize, g.FontSize)) - - local is_clipped = not ImGui.ItemAdd(bb, id) - - local pressed, hovered = ImGui.ButtonBehavior(bb, id) - - -- Render - if hovered then - window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(23 --[[ImGuiCol.ButtonHovered]])) - end - - if window.Collapsed then - ImGui.RenderArrow(window.DrawList, bb.Min, ImGui.GetColorU32(0 --[[ImGuiCol.Text]]), 1 --[[ImGuiDir.Right]], 1) - else - ImGui.RenderArrow(window.DrawList, bb.Min, ImGui.GetColorU32(0 --[[ImGuiCol.Text]]), 3 --[[ImGuiDir.Down]], 1) - end - - return pressed -end - --- @param window ImGuiWindow --- @param axis ImGuiAxis --- @return ImGuiID @@ -62427,7 +62400,7 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) local sep1_x1 = pos.x local sep2_x2 = bb.Max.x - local seps_y = ImTrunc((bb.Min.y + bb.Max.y) * 0.5 + 0.999) + local seps_y = ImTrunc((bb.Min.y + bb.Max.y) * 0.5) + 1.0 local label_avail_w = ImMax(0.0, sep2_x2 - sep1_x1 - padding.x * 2.0) local label_pos = ImVec2(pos.x + padding.x + ImMax(0.0, (label_avail_w - label_size.x - extra_w) * style.SeparatorTextAlign.x), pos.y + text_baseline_y) -- FIXME-ALIGN @@ -62442,11 +62415,11 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) local sep2_x1 = label_pos.x + label_size.x + extra_w + style.ItemSpacing.x if sep1_x2 > sep1_x1 and separator_thickness > 0.0 then - window.DrawList:AddLineH(sep1_x1, sep1_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep1_x1, sep1_x2, seps_y, separator_col, separator_thickness, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end if sep2_x2 > sep2_x1 and separator_thickness > 0.0 then - window.DrawList:AddLineH(sep2_x1, sep2_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep2_x1, sep2_x2, seps_y, separator_col, separator_thickness, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end if g.LogEnabled then @@ -62460,7 +62433,7 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) end if separator_thickness > 0.0 then - window.DrawList:AddLineH(sep1_x1, sep2_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep1_x1, sep2_x2, seps_y, separator_col, separator_thickness, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end end end @@ -66789,10 +66762,10 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback local cursor_is_visible = (not g.IO.ConfigInputTextCursorBlink) or (state.CursorAnim <= 0.0) or (ImFmod(state.CursorAnim, 1.20) <= 0.80) local cursor_screen_pos = ImTrunc(draw_pos + cursor_offset - draw_scroll) - local cursor_screen_rect = ImRect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5, cursor_screen_pos.x + 1.0, cursor_screen_pos.y - 1.5) + local cursor_screen_rect = ImRect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 1.0, cursor_screen_pos.x + 1.0, cursor_screen_pos.y - 1.0) if cursor_is_visible and cursor_screen_rect:Overlaps(clip_rect) then - draw_window.DrawList:AddLineV(cursor_screen_rect.Min.x, cursor_screen_rect.Min.y, cursor_screen_rect.Max.y, ImGui.GetColorU32(34 --[[ImGuiCol.InputTextCursor]]), style.InputTextCursorSize) + draw_window.DrawList:AddLineV(cursor_screen_rect.Min.x, cursor_screen_rect.Min.y, cursor_screen_rect.Max.y, ImGui.GetColorU32(34 --[[ImGuiCol.InputTextCursor]]), style.InputTextCursorSize, 131072 --[[ImDrawFlags.StrokeInside]]) end -- Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.) @@ -67670,7 +67643,7 @@ function ImGui.ColorPicker4(label, col, flags, ref_col) if alpha_bar then local alpha = ImSaturate(col[4]) local bar1_bb = ImRect(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size) - ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb:GetWidth() / 2.0, ImVec2(0.0, 0.0)) + ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, IM_COL32(0, 0, 0, 0), style.Alpha, bar1_bb:GetWidth() / 2.0, ImVec2(0.0, 0.0)) draw_list:AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, bit32.band(user_col32_striped_of_alpha, bit32.bnot(4278190080 --[[IM_COL32_A_MASK]])), bit32.band(user_col32_striped_of_alpha, bit32.bnot(4278190080 --[[IM_COL32_A_MASK]]))) local bar1_line_y = IM_ROUND(picker_pos.y + (1.0 - alpha) * sv_picker_size) @@ -67748,36 +67721,45 @@ function ImGui.ColorButton(desc_id, col, flags, size_arg) local col_rgb_without_alpha = ImVec4(col_rgb.x, col_rgb.y, col_rgb.z, 1.0) local grid_step = ImMin(size.x, size.y) / 2.99 local rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5) - local bb_inner = ImRect() - ImRect_Copy(bb_inner, bb) - local off = 0.0 - if bit32.band(flags, 1024 --[[ImGuiColorEditFlags.NoBorder]]) == 0 then - off = -0.75 - bb_inner:Expand(off) + local is_mixed = bit32.band(g.LastItemData.ItemFlags, 4096 --[[ImGuiItemFlags.MixedValue]]) ~= 0 + + local backup_alpha = g.Style.Alpha + if g.DisabledStackSize > 0 then + g.Style.Alpha = g.DisabledAlphaBackup -- Cancel out effect of BeginDisabled() for color swatches. end - if bit32.band(flags, 16384 --[[ImGuiColorEditFlags.AlphaPreviewHalf]]) ~= 0 and col_rgb.w < 1.0 then - local mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5) - if bit32.band(flags, 8192 --[[ImGuiColorEditFlags.AlphaNoBg]]) == 0 then - ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, ImGui.GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, 160 --[[ImDrawFlags.RoundRight]]) - else - window.DrawList:AddRectFilled(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, ImGui.GetColorU32(col_rgb), rounding, 160 --[[ImDrawFlags.RoundRight]]) + if is_mixed then + window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(7 --[[ImGuiCol.FrameBg]]), rounding) + ImGui.PushStyleColor(0 --[[ImGuiCol.Text]], g.Style.Colors[1 --[[ImGuiCol.TextDisabled]]]) -- ImGuiCol_TextMixedValue + if g.MixedValueLabel ~= nil then + ImGui.RenderTextClipped(ImVec2(bb.Min.x, bb.Min.y + g.Style.FramePadding.y), bb.Max, g.MixedValueLabel, nil, nil, ImVec2(0.5, 0.0)) end - window.DrawList:AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), ImGui.GetColorU32(col_rgb_without_alpha), rounding, 80 --[[ImDrawFlags.RoundLeft]]) + ImGui.PopStyleColor() + elseif bit32.band(flags, 16384 --[[ImGuiColorEditFlags.AlphaPreviewHalf]]) ~= 0 and col_rgb.w < 1.0 then + local mid_x = IM_ROUND((bb.Min.x + bb.Max.x) * 0.5) + if bit32.band(flags, 8192 --[[ImGuiColorEditFlags.AlphaNoBg]]) == 0 then + ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, ImVec2(bb.Min.x + grid_step, bb.Min.y), bb.Max, ImGui.ColorConvertFloat4ToU32(col_rgb), g.Style.Alpha, grid_step, ImVec2(-grid_step, 0.0), rounding, 160 --[[ImDrawFlags.RoundRight]]) + else + window.DrawList:AddRectFilled(ImVec2(bb.Min.x + grid_step, bb.Min.y), bb.Max, ImGui.GetColorU32(col_rgb), rounding, 160 --[[ImDrawFlags.RoundRight]]) + end + window.DrawList:AddRectFilled(bb.Min, ImVec2(mid_x, bb.Max.y), ImGui.GetColorU32(col_rgb_without_alpha), rounding, 80 --[[ImDrawFlags.RoundLeft]]) else -- Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha local col_source = (bit32.band(flags, 4096 --[[ImGuiColorEditFlags.AlphaOpaque]]) ~= 0) and col_rgb_without_alpha or col_rgb if col_source.w < 1.0 and bit32.band(flags, 8192 --[[ImGuiColorEditFlags.AlphaNoBg]]) == 0 then - ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, bb_inner.Min, bb_inner.Max, ImGui.GetColorU32(col_source), grid_step, ImVec2(off, off), rounding) + ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, bb.Min, bb.Max, ImGui.ColorConvertFloat4ToU32(col_source), g.Style.Alpha, grid_step, ImVec2(0.0, 0.0), rounding) else - window.DrawList:AddRectFilled(bb_inner.Min, bb_inner.Max, ImGui.GetColorU32(col_source), rounding) + window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(col_source), rounding) end end + if g.DisabledStackSize > 0 then + g.Style.Alpha = backup_alpha + end ImGui.RenderNavCursor(bb, id) if bit32.band(flags, 1024 --[[ImGuiColorEditFlags.NoBorder]]) == 0 then if g.Style.FrameBorderSize > 0.0 then ImGui.RenderFrameBorder(bb.Min, bb.Max, rounding) else - window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(7 --[[ImGuiCol.FrameBg]]), rounding) -- Color buttons are often in need of some sort of border + window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(7 --[[ImGuiCol.FrameBg]]), rounding, 1.0 * ImTrunc(g.Style._MainScale)) -- Color buttons are often in need of some sort of border -- FIXME-DPI end end @@ -68460,23 +68442,27 @@ function ImGui.TreeNodeDrawLineToChildNode(target_pos) -- FIXME: Could this be simplified using new stroke flags? local parent_data = g.TreeNodeStack.Data[g.TreeNodeStack.Size] - local x1 = ImTrunc(parent_data.DrawLinesX1) + local half_size = g.Style.TreeLinesSize * 0.5 + local x1 = ImTrunc(parent_data.DrawLinesX1 - half_size) + half_size -- Draw line centered at X1, but snap to pixels boundary. local x2 = ImTrunc(target_pos.x - g.Style.ItemInnerSpacing.x) - local y = ImTrunc(target_pos.y) + local y = ImTrunc(target_pos.y - half_size) + half_size local rounding = (g.Style.TreeLinesRounding > 0.0) and ImMin(x2 - x1, g.Style.TreeLinesRounding) or 0.0 parent_data.DrawLinesToNodesY2 = ImMax(parent_data.DrawLinesToNodesY2, y - rounding) if x1 >= x2 then return end - if rounding > 0.0 then - x1 = x1 + 0.5 + rounding + if rounding > 0.0 and rounding > half_size then + x1 = x1 + rounding window.DrawList:PathArcToFast(ImVec2(x1, y - rounding), rounding, 6, 3) if x1 < x2 then window.DrawList:PathLineTo(ImVec2(x2, y)) end window.DrawList:PathStroke(ImGui.GetColorU32(55 --[[ImGuiCol.TreeLines]]), g.Style.TreeLinesSize) else - window.DrawList:AddLineH(x1, x2, y, ImGui.GetColorU32(55 --[[ImGuiCol.TreeLines]]), g.Style.TreeLinesSize) + -- We use AddLine() instead of AddLineH() as we provide coordinates for line center, + -- in order to make the code use same coordinates for both rounded and non-rounded version. (FIXME-OPT) + x1 = x1 + half_size -- Avoid overdraw + window.DrawList:AddLine(ImVec2(x1, y), ImVec2(x2, y), ImGui.GetColorU32(55 --[[ImGuiCol.TreeLines]]), g.Style.TreeLinesSize) end end @@ -72458,7 +72444,7 @@ function ImGui.TabItemBackground(draw_list, bb, flags, col) draw_list:PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9) draw_list:PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12) draw_list:PathLineTo(ImVec2(bb.Max.x, y2)) - draw_list:PathStroke(ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), g.Style.TabBorderSize) + draw_list:PathStroke(ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), g.Style.TabBorderSize, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) -- Use _StrokeInside? end end diff --git a/build/imgui_love.linemap.json b/build/imgui_love.linemap.json index 56de296..5422169 100644 --- a/build/imgui_love.linemap.json +++ b/build/imgui_love.linemap.json @@ -1 +1 @@ -[[183, "imgui.lua"], [21598, "imgui_demo.lua"], [33450, "imgui_draw.lua"], [40966, "imgui_h.lua"], [43872, "imgui_impl_love.lua"], [44412, "imgui_internal.lua"], [48121, "imgui_tables.lua"], [53180, "imgui_widgets.lua"], [65169, "imstb_rectpack.lua"], [65833, "imstb_textedit.lua"], [67375, "imstb_truetype.lua"], [70163, "imstd_minstdio.lua"]] \ No newline at end of file +[[183, "imgui.lua"], [21603, "imgui_demo.lua"], [33455, "imgui_draw.lua"], [40964, "imgui_h.lua"], [43870, "imgui_impl_love.lua"], [44410, "imgui_internal.lua"], [48120, "imgui_tables.lua"], [53179, "imgui_widgets.lua"], [65155, "imstb_rectpack.lua"], [65819, "imstb_textedit.lua"], [67361, "imstb_truetype.lua"], [70149, "imstd_minstdio.lua"]] \ No newline at end of file diff --git a/build/imgui_love.lua b/build/imgui_love.lua index 633c5fd..256b3fc 100644 --- a/build/imgui_love.lua +++ b/build/imgui_love.lua @@ -10641,7 +10641,7 @@ local function RenderWindowOuterBorders(window) if g.Style.FrameBorderSize > 0 and (bit32.band(window.Flags, 1 --[[ImGuiWindowFlags.NoTitleBar]]) == 0) and not window.DockIsActive then local y = window.Pos.y + window.TitleBarHeight - 1 - window.DrawList:AddLineH(window.Pos.x + border_size * 0.5, window.Pos.x + window.Size.x - border_size * 0.5, y, border_col, g.Style.FrameBorderSize) + window.DrawList:AddLineH(window.Pos.x + border_size, window.Pos.x + window.Size.x - border_size, y, border_col, g.Style.FrameBorderSize, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end end @@ -10722,7 +10722,7 @@ local function RenderWindowDecorations(window, title_bar_rect, title_bar_is_high menu_bar_rect:ClipWith(window:Rect()) -- Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them. window.DrawList:AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, ImGui.GetColorU32(13 --[[ImGuiCol.MenuBarBg]]), (bit32.band(flags, 1 --[[ImGuiWindowFlags.NoTitleBar]]) ~= 0) and window_rounding or 0.0, 48 --[[ImDrawFlags.RoundTop]]) if style.FrameBorderSize > 0.0 and menu_bar_rect.Max.y < window.Pos.y + window.Size.y then - window.DrawList:AddLineH(menu_bar_rect.Min.x + window_border_size * 0.5, menu_bar_rect.Max.x - window_border_size * 0.5, menu_bar_rect.Max.y, ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), style.FrameBorderSize) + window.DrawList:AddLineH(menu_bar_rect.Min.x + window_border_size, menu_bar_rect.Max.x - window_border_size, menu_bar_rect.Max.y, ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), style.FrameBorderSize, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end end @@ -19221,7 +19221,7 @@ function ImGui.RenderDimmedBackgrounds() window.DrawList:ChannelsMerge() if window.DrawList.CmdBuffer.Size == 0 then window.DrawList:AddDrawCmd() end window.DrawList:PushClipRect(viewport.Pos, viewport.Pos + viewport.Size) - window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(60 --[[ImGuiCol.NavWindowingHighlight]], g.NavWindowingHighlightAlpha), window.WindowRounding, 0, 3.0) -- FIXME-DPI + window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(60 --[[ImGuiCol.NavWindowingHighlight]], g.NavWindowingHighlightAlpha), window.WindowRounding, 3.0) -- FIXME-DPI window.DrawList:PopClipRect() end end @@ -20867,8 +20867,7 @@ function ImGui.DebugNodeDrawList(window, viewport, draw_list, label) else local cr = pcmd.ClipRect local open = ImGui.TreeNode(cmd_n, "DrawCmd:%5d tris, Tex %s, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)", math.floor(pcmd.ElemCount / 3), tostring(pcmd.TexRef and (pcmd.TexRef._TexID or pcmd.TexRef._TexData)), cr.x, cr.y, cr.z, cr.w) - local function ShowMesh(show_mesh, show_aabb) - if not fg_draw_list then return end + local function ShowMeshImpl(show_mesh, show_aabb) local clip_rect = ImRect(cr.x, cr.y, cr.z, cr.w) local vtxs_rect = ImRect(3.4028234663853e+38 --[[FLT_MAX]], 3.4028234663853e+38 --[[FLT_MAX]], -3.4028234663853e+38 --[[FLT_MAX]], -3.4028234663853e+38 --[[FLT_MAX]]) local base = pcmd.IdxOffset @@ -20887,6 +20886,12 @@ function ImGui.DebugNodeDrawList(window, viewport, draw_list, label) fg_draw_list:AddRect(ImTrunc(vtxs_rect.Min), ImTrunc(vtxs_rect.Max), IM_COL32(0, 255, 255, 255)) -- In cyan: bounding box of triangles end end + local function ShowMesh(show_mesh, show_aabb) -- DebugNodeDrawCmdShowMeshAndBoundingBox() + if not fg_draw_list then return end + fg_draw_list:PushDrawFlag(8192 --[[ImDrawFlags.AALines]], false) -- Disable AA on triangle outlines is more readable for very large and thin triangles. + ShowMeshImpl(show_mesh, show_aabb) + fg_draw_list:PopDrawFlag() + end if ImGui.IsItemHovered() and (cfg.ShowDrawCmdMesh or cfg.ShowDrawCmdBoundingBoxes) then ShowMesh(cfg.ShowDrawCmdMesh, cfg.ShowDrawCmdBoundingBoxes) end if open then ImGui.Selectable(string.format("Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d", pcmd.ElemCount, pcmd.VtxOffset, pcmd.IdxOffset)) @@ -20915,8 +20920,8 @@ function ImGui.DebugNodeTabBar(tab_bar, label) if is_active and ImGui.IsItemHovered() then local dl = FG(tab_bar.Window) dl:AddRect(tab_bar.BarRect.Min, tab_bar.BarRect.Max, IM_COL32(255, 255, 0, 255)) - dl:AddLine(ImVec2(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Min.y), ImVec2(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Max.y), IM_COL32(0, 255, 0, 255)) - dl:AddLine(ImVec2(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Min.y), ImVec2(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Max.y), IM_COL32(0, 255, 0, 255)) + dl:AddLineV(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Min.y, tab_bar.BarRect.Max.y, IM_COL32(0, 255, 0, 255)) + dl:AddLineV(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Min.y, tab_bar.BarRect.Max.y, IM_COL32(0, 255, 0, 255)) end if open then for tab_n, tab in tab_bar.Tabs:iter() do @@ -40606,7 +40611,7 @@ function ImGui.RenderCheckMark(draw_list, pos, col, sz) draw_list:PathLineTo(p) p.x = bx + third * 2.0; p.y = by - third * 2.0 draw_list:PathLineTo(p) - draw_list:PathStroke(col, thickness) + draw_list:PathStroke(col, thickness, 16384 --[[ImDrawFlags.AALineEnds]]) end -- Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side. @@ -40692,7 +40697,7 @@ function ImGui.RenderRectFilledInRangeH(draw_list, rect, col, fill_x0, fill_x1, end end - draw_list:PathFillConvex(col) + draw_list:PathFillConvex(col, 1024 --[[ImDrawFlags.JoinMiter]]) end --- @param r_in ImRect @@ -40726,16 +40731,16 @@ end -- Helper for ColorPicker4() -- NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that. -- Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding altogether. --- FIXME: uses ImGui.GetColorU32 --- @param draw_list ImDrawList --- @param p_min ImVec2 --- @param p_max ImVec2 --- @param col ImU32 +--- @param alpha float --- @param grid_step float --- @param grid_off ImVec2 --- @param rounding? float --- @param flags? ImDrawFlags -function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col, grid_step, grid_off, rounding, flags) +function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col, alpha, grid_step, grid_off, rounding, flags) if rounding == nil then rounding = 0.0 end if flags == nil then flags = 0 end @@ -40744,60 +40749,53 @@ function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col end if bit32.rshift(bit32.band(col, 4278190080 --[[IM_COL32_A_MASK]]), 24 --[[IM_COL32_A_SHIFT]]) < 0xFF then - local col_bg1 = ImGui.GetColorU32(ImStd.ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col), nil, true) - local col_bg2 = ImGui.GetColorU32(ImStd.ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col), nil, true) - draw_list:AddRectFilled(p_min, p_max, col_bg1, rounding, flags) + assert(alpha >= 0.0 and alpha <= 1.0) + local a_mask = bit32.lshift(ImTrunc(alpha * 255.0), 24 --[[IM_COL32_A_SHIFT]]) + local col_bg1 = bit32.bor(bit32.band(ImStd.ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col), bit32.bnot(4278190080 --[[IM_COL32_A_MASK]])), a_mask) + local col_bg2 = bit32.bor(bit32.band(ImStd.ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col), bit32.bnot(4278190080 --[[IM_COL32_A_MASK]])), a_mask) + local dual_layer = (alpha == 1.0) -- Dual layer is faster but incorrect if blending. + if dual_layer then + draw_list:AddRectFilled(p_min, p_max, col_bg1, rounding, flags) + end local yi = 0 local y = p_min.y + grid_off.y - local x_start - local x - local cell_flags while y < p_max.y do - repeat - local y1 = ImClamp(y, p_min.y, p_max.y) - local y2 = ImMin(y + grid_step, p_max.y) + local y1 = ImClamp(ImTrunc(y), p_min.y, p_max.y) + local y2 = ImMin(ImTrunc(y + grid_step), p_max.y) + if y2 > y1 then + local x_start_off = dual_layer and (((yi + 1) % 2) * grid_step) or 0.0 + local x_step = dual_layer and (grid_step * 2.0) or grid_step + local xi = 0 + local x = p_min.x + grid_off.x + x_start_off + while x < p_max.x do + local x1 = ImClamp(ImTrunc(x), p_min.x, p_max.x) + local x2 = ImMin(ImTrunc(x + grid_step), p_max.x) + if x2 > x1 then + local cell_flags = 256 --[[ImDrawFlags.RoundNone]] -- FIXME: Could use CalcRoundingFlagsForRectInRect() + if y1 <= p_min.y then + if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 16 --[[ImDrawFlags.RoundTopLeft]]) end + if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 32 --[[ImDrawFlags.RoundTopRight]]) end + end + if y2 >= p_max.y then + if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 64 --[[ImDrawFlags.RoundBottomLeft]]) end + if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 128 --[[ImDrawFlags.RoundBottomRight]]) end + end - if y2 <= y1 then - break + -- Combine flags + if flags == 256 --[[ImDrawFlags.RoundNone]] or cell_flags == 256 --[[ImDrawFlags.RoundNone]] then + cell_flags = 256 --[[ImDrawFlags.RoundNone]] + else + cell_flags = bit32.band(cell_flags, flags) + end + local col_bg + if dual_layer then col_bg = col_bg2 elseif (yi + xi) % 2 == 1 then col_bg = col_bg2 else col_bg = col_bg1 end + draw_list:AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg, rounding, cell_flags) + end + x = x + x_step + xi = xi + 1 + end end - - x_start = p_min.x + grid_off.x + ((yi + 1) % 2) * grid_step - x = x_start - while x < p_max.x do - repeat - local x1 = ImClamp(x, p_min.x, p_max.x) - local x2 = ImMin(x + grid_step, p_max.x) - - if x2 <= x1 then - break - end - - cell_flags = 256 --[[ImDrawFlags.RoundNone]] -- FIXME: Could use CalcRoundingFlagsForRectInRect() - if y1 <= p_min.y then - if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 16 --[[ImDrawFlags.RoundTopLeft]]) end - if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 32 --[[ImDrawFlags.RoundTopRight]]) end - end - if y2 >= p_max.y then - if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, 64 --[[ImDrawFlags.RoundBottomLeft]]) end - if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, 128 --[[ImDrawFlags.RoundBottomRight]]) end - end - - -- Combine flags - if flags == 256 --[[ImDrawFlags.RoundNone]] or cell_flags == 256 --[[ImDrawFlags.RoundNone]] then - cell_flags = 256 --[[ImDrawFlags.RoundNone]] - else - cell_flags = bit32.band(cell_flags, flags) - end - draw_list:AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding, cell_flags) - - until true - - x = x + grid_step * 2.0 - end - - until true - y = y + grid_step yi = yi + 1 end @@ -46919,6 +46917,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct DisabledAlphaBackup = 0.0, -- Backup for style.Alpha for BeginDisabled() DisabledStackSize = 0, + MixedValueLabel = "-", -- Value replacement when displaying a mixed value. ItemFlagsStack = ImVector(), -- Stack for PushItemFlag()/PopItemFlag() - inherited by Begin() GroupStack = ImVector(), -- Stack for BeginGroup()/EndGroup() - not inherited by Begin() @@ -54113,7 +54112,7 @@ function ImGui.CloseButton(id, pos) window.DrawList:AddRectFilled(bb.Min, bb.Max, bg_col) end - local cross_center = bb:GetCenter() - ImVec2(0.5, 0.5) + local cross_center = bb:GetCenter() local cross_extent = g.FontSize * 0.5 * 0.7071 - 1 local cross_col = ImGui.GetColorU32(0 --[[ImGuiCol.Text]]) local cross_thickness = 1.0 -- FIXME-DPI @@ -54123,32 +54122,6 @@ function ImGui.CloseButton(id, pos) return pressed end ---- @return bool -function ImGui.CollapseButton(id, pos) - local g = GImGui - - local window = g.CurrentWindow - - local bb = ImRect(pos, pos + ImVec2(g.FontSize, g.FontSize)) - - local is_clipped = not ImGui.ItemAdd(bb, id) - - local pressed, hovered = ImGui.ButtonBehavior(bb, id) - - -- Render - if hovered then - window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(23 --[[ImGuiCol.ButtonHovered]])) - end - - if window.Collapsed then - ImGui.RenderArrow(window.DrawList, bb.Min, ImGui.GetColorU32(0 --[[ImGuiCol.Text]]), 1 --[[ImGuiDir.Right]], 1) - else - ImGui.RenderArrow(window.DrawList, bb.Min, ImGui.GetColorU32(0 --[[ImGuiCol.Text]]), 3 --[[ImGuiDir.Down]], 1) - end - - return pressed -end - --- @param window ImGuiWindow --- @param axis ImGuiAxis --- @return ImGuiID @@ -55053,7 +55026,7 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) local sep1_x1 = pos.x local sep2_x2 = bb.Max.x - local seps_y = ImTrunc((bb.Min.y + bb.Max.y) * 0.5 + 0.999) + local seps_y = ImTrunc((bb.Min.y + bb.Max.y) * 0.5) + 1.0 local label_avail_w = ImMax(0.0, sep2_x2 - sep1_x1 - padding.x * 2.0) local label_pos = ImVec2(pos.x + padding.x + ImMax(0.0, (label_avail_w - label_size.x - extra_w) * style.SeparatorTextAlign.x), pos.y + text_baseline_y) -- FIXME-ALIGN @@ -55068,11 +55041,11 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) local sep2_x1 = label_pos.x + label_size.x + extra_w + style.ItemSpacing.x if sep1_x2 > sep1_x1 and separator_thickness > 0.0 then - window.DrawList:AddLineH(sep1_x1, sep1_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep1_x1, sep1_x2, seps_y, separator_col, separator_thickness, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end if sep2_x2 > sep2_x1 and separator_thickness > 0.0 then - window.DrawList:AddLineH(sep2_x1, sep2_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep2_x1, sep2_x2, seps_y, separator_col, separator_thickness, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end if g.LogEnabled then @@ -55086,7 +55059,7 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) end if separator_thickness > 0.0 then - window.DrawList:AddLineH(sep1_x1, sep2_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep1_x1, sep2_x2, seps_y, separator_col, separator_thickness, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) end end end @@ -59415,10 +59388,10 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback local cursor_is_visible = (not g.IO.ConfigInputTextCursorBlink) or (state.CursorAnim <= 0.0) or (ImFmod(state.CursorAnim, 1.20) <= 0.80) local cursor_screen_pos = ImTrunc(draw_pos + cursor_offset - draw_scroll) - local cursor_screen_rect = ImRect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5, cursor_screen_pos.x + 1.0, cursor_screen_pos.y - 1.5) + local cursor_screen_rect = ImRect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 1.0, cursor_screen_pos.x + 1.0, cursor_screen_pos.y - 1.0) if cursor_is_visible and cursor_screen_rect:Overlaps(clip_rect) then - draw_window.DrawList:AddLineV(cursor_screen_rect.Min.x, cursor_screen_rect.Min.y, cursor_screen_rect.Max.y, ImGui.GetColorU32(34 --[[ImGuiCol.InputTextCursor]]), style.InputTextCursorSize) + draw_window.DrawList:AddLineV(cursor_screen_rect.Min.x, cursor_screen_rect.Min.y, cursor_screen_rect.Max.y, ImGui.GetColorU32(34 --[[ImGuiCol.InputTextCursor]]), style.InputTextCursorSize, 131072 --[[ImDrawFlags.StrokeInside]]) end -- Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.) @@ -60296,7 +60269,7 @@ function ImGui.ColorPicker4(label, col, flags, ref_col) if alpha_bar then local alpha = ImSaturate(col[4]) local bar1_bb = ImRect(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size) - ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb:GetWidth() / 2.0, ImVec2(0.0, 0.0)) + ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, IM_COL32(0, 0, 0, 0), style.Alpha, bar1_bb:GetWidth() / 2.0, ImVec2(0.0, 0.0)) draw_list:AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, bit32.band(user_col32_striped_of_alpha, bit32.bnot(4278190080 --[[IM_COL32_A_MASK]])), bit32.band(user_col32_striped_of_alpha, bit32.bnot(4278190080 --[[IM_COL32_A_MASK]]))) local bar1_line_y = IM_ROUND(picker_pos.y + (1.0 - alpha) * sv_picker_size) @@ -60374,36 +60347,45 @@ function ImGui.ColorButton(desc_id, col, flags, size_arg) local col_rgb_without_alpha = ImVec4(col_rgb.x, col_rgb.y, col_rgb.z, 1.0) local grid_step = ImMin(size.x, size.y) / 2.99 local rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5) - local bb_inner = ImRect() - ImRect_Copy(bb_inner, bb) - local off = 0.0 - if bit32.band(flags, 1024 --[[ImGuiColorEditFlags.NoBorder]]) == 0 then - off = -0.75 - bb_inner:Expand(off) + local is_mixed = bit32.band(g.LastItemData.ItemFlags, 4096 --[[ImGuiItemFlags.MixedValue]]) ~= 0 + + local backup_alpha = g.Style.Alpha + if g.DisabledStackSize > 0 then + g.Style.Alpha = g.DisabledAlphaBackup -- Cancel out effect of BeginDisabled() for color swatches. end - if bit32.band(flags, 16384 --[[ImGuiColorEditFlags.AlphaPreviewHalf]]) ~= 0 and col_rgb.w < 1.0 then - local mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5) - if bit32.band(flags, 8192 --[[ImGuiColorEditFlags.AlphaNoBg]]) == 0 then - ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, ImGui.GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, 160 --[[ImDrawFlags.RoundRight]]) - else - window.DrawList:AddRectFilled(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, ImGui.GetColorU32(col_rgb), rounding, 160 --[[ImDrawFlags.RoundRight]]) + if is_mixed then + window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(7 --[[ImGuiCol.FrameBg]]), rounding) + ImGui.PushStyleColor(0 --[[ImGuiCol.Text]], g.Style.Colors[1 --[[ImGuiCol.TextDisabled]]]) -- ImGuiCol_TextMixedValue + if g.MixedValueLabel ~= nil then + ImGui.RenderTextClipped(ImVec2(bb.Min.x, bb.Min.y + g.Style.FramePadding.y), bb.Max, g.MixedValueLabel, nil, nil, ImVec2(0.5, 0.0)) end - window.DrawList:AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), ImGui.GetColorU32(col_rgb_without_alpha), rounding, 80 --[[ImDrawFlags.RoundLeft]]) + ImGui.PopStyleColor() + elseif bit32.band(flags, 16384 --[[ImGuiColorEditFlags.AlphaPreviewHalf]]) ~= 0 and col_rgb.w < 1.0 then + local mid_x = IM_ROUND((bb.Min.x + bb.Max.x) * 0.5) + if bit32.band(flags, 8192 --[[ImGuiColorEditFlags.AlphaNoBg]]) == 0 then + ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, ImVec2(bb.Min.x + grid_step, bb.Min.y), bb.Max, ImGui.ColorConvertFloat4ToU32(col_rgb), g.Style.Alpha, grid_step, ImVec2(-grid_step, 0.0), rounding, 160 --[[ImDrawFlags.RoundRight]]) + else + window.DrawList:AddRectFilled(ImVec2(bb.Min.x + grid_step, bb.Min.y), bb.Max, ImGui.GetColorU32(col_rgb), rounding, 160 --[[ImDrawFlags.RoundRight]]) + end + window.DrawList:AddRectFilled(bb.Min, ImVec2(mid_x, bb.Max.y), ImGui.GetColorU32(col_rgb_without_alpha), rounding, 80 --[[ImDrawFlags.RoundLeft]]) else -- Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha local col_source = (bit32.band(flags, 4096 --[[ImGuiColorEditFlags.AlphaOpaque]]) ~= 0) and col_rgb_without_alpha or col_rgb if col_source.w < 1.0 and bit32.band(flags, 8192 --[[ImGuiColorEditFlags.AlphaNoBg]]) == 0 then - ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, bb_inner.Min, bb_inner.Max, ImGui.GetColorU32(col_source), grid_step, ImVec2(off, off), rounding) + ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, bb.Min, bb.Max, ImGui.ColorConvertFloat4ToU32(col_source), g.Style.Alpha, grid_step, ImVec2(0.0, 0.0), rounding) else - window.DrawList:AddRectFilled(bb_inner.Min, bb_inner.Max, ImGui.GetColorU32(col_source), rounding) + window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(col_source), rounding) end end + if g.DisabledStackSize > 0 then + g.Style.Alpha = backup_alpha + end ImGui.RenderNavCursor(bb, id) if bit32.band(flags, 1024 --[[ImGuiColorEditFlags.NoBorder]]) == 0 then if g.Style.FrameBorderSize > 0.0 then ImGui.RenderFrameBorder(bb.Min, bb.Max, rounding) else - window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(7 --[[ImGuiCol.FrameBg]]), rounding) -- Color buttons are often in need of some sort of border + window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(7 --[[ImGuiCol.FrameBg]]), rounding, 1.0 * ImTrunc(g.Style._MainScale)) -- Color buttons are often in need of some sort of border -- FIXME-DPI end end @@ -61086,23 +61068,27 @@ function ImGui.TreeNodeDrawLineToChildNode(target_pos) -- FIXME: Could this be simplified using new stroke flags? local parent_data = g.TreeNodeStack.Data[g.TreeNodeStack.Size] - local x1 = ImTrunc(parent_data.DrawLinesX1) + local half_size = g.Style.TreeLinesSize * 0.5 + local x1 = ImTrunc(parent_data.DrawLinesX1 - half_size) + half_size -- Draw line centered at X1, but snap to pixels boundary. local x2 = ImTrunc(target_pos.x - g.Style.ItemInnerSpacing.x) - local y = ImTrunc(target_pos.y) + local y = ImTrunc(target_pos.y - half_size) + half_size local rounding = (g.Style.TreeLinesRounding > 0.0) and ImMin(x2 - x1, g.Style.TreeLinesRounding) or 0.0 parent_data.DrawLinesToNodesY2 = ImMax(parent_data.DrawLinesToNodesY2, y - rounding) if x1 >= x2 then return end - if rounding > 0.0 then - x1 = x1 + 0.5 + rounding + if rounding > 0.0 and rounding > half_size then + x1 = x1 + rounding window.DrawList:PathArcToFast(ImVec2(x1, y - rounding), rounding, 6, 3) if x1 < x2 then window.DrawList:PathLineTo(ImVec2(x2, y)) end window.DrawList:PathStroke(ImGui.GetColorU32(55 --[[ImGuiCol.TreeLines]]), g.Style.TreeLinesSize) else - window.DrawList:AddLineH(x1, x2, y, ImGui.GetColorU32(55 --[[ImGuiCol.TreeLines]]), g.Style.TreeLinesSize) + -- We use AddLine() instead of AddLineH() as we provide coordinates for line center, + -- in order to make the code use same coordinates for both rounded and non-rounded version. (FIXME-OPT) + x1 = x1 + half_size -- Avoid overdraw + window.DrawList:AddLine(ImVec2(x1, y), ImVec2(x2, y), ImGui.GetColorU32(55 --[[ImGuiCol.TreeLines]]), g.Style.TreeLinesSize) end end @@ -65084,7 +65070,7 @@ function ImGui.TabItemBackground(draw_list, bb, flags, col) draw_list:PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9) draw_list:PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12) draw_list:PathLineTo(ImVec2(bb.Max.x, y2)) - draw_list:PathStroke(ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), g.Style.TabBorderSize) + draw_list:PathStroke(ImGui.GetColorU32(5 --[[ImGuiCol.Border]]), g.Style.TabBorderSize, 393216 --[[ImDrawFlags.StrokeCenterBiased]]) -- Use _StrokeInside? end end diff --git a/docs/PORT_STATUS.txt b/docs/PORT_STATUS.txt index e8f4ffa..9580bb7 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% 75.1% 2 -imgui_widgets.cpp 308 93.8% 98.7% 78.1% 1 -imgui_draw.cpp 258 81.8% 92.3% 61.0% 2 +imgui_widgets.cpp 308 93.8% 98.7% 78.4% 1 +imgui_draw.cpp 258 81.8% 92.3% 61.1% 2 imgui_tables.cpp 113 96.5% 99.0% 74.0% 0 imgui_demo.cpp 56 100.0% 100.0% 55.8% 0 imgui.h 110 53.6% 37.4% 60.0% 0 imgui_internal.h 269 62.5% 65.7% 67.6% 1 -TOTAL 1900 83.1% 95.3% 70.3% 6 +TOTAL 1900 83.1% 95.3% 70.4% 6 upstream code reproduced (similarity x ported size / all upstream size): 67.0% Public API (imgui.h, namespace ImGui) 368 / 376 97.9% Internal API (imgui_internal.h, namespace ImGui) 417 / 443 94.1% Enum values (imgui.h + imgui_internal.h) 1034 / 1078 95.9% -Struct fields (imgui.h + imgui_internal.h) 1832 / 1926 95.1% +Struct fields (imgui.h + imgui_internal.h) 1833 / 1926 95.2% Legend: [x] ported (sim %) [~] stub [ ] not ported [-] excluded (c++-only / obsolete / os-specific / #if 0 / test-engine) @@ -123,7 +123,7 @@ imgui.cpp [x] 61% ImGui::ColorConvertHSVtoRGB imgui.lua:14466 -- ImGuiStorage - [x] 69% ImLowerBound imgui_widgets.lua:5186 + [x] 69% ImLowerBound imgui_widgets.lua:5160 [ ] PairComparerByID [ ] ImGuiStorage::BuildSortByKey [ ] ImGuiStorage::GetInt @@ -210,7 +210,7 @@ imgui.cpp [ ] ImGui::CallContextHooks -- MAIN CODE (most of the code! lots of stuff, needs tidying up!) - [x] 11% ImGuiWindow::ImGuiWindow imgui_internal.lua:2842 + [x] 11% ImGuiWindow::ImGuiWindow imgui_internal.lua:2843 [-] ImGuiWindow::~ImGuiWindow c++-only [x] 74% SetCurrentWindow imgui.lua:10805 [x] 85% ImGui::GcCompactTransientMiscBuffers imgui.lua:10826 @@ -269,7 +269,7 @@ imgui.cpp [x] 42% ImGui::PopClipRect imgui.lua:13626 [x] 60% ImGui::RenderDimmedBackgroundBehindWindow imgui.lua:18992 [x] 83% ImGui::FindBottomMostVisibleWindowWithinBeginStack imgui.lua:18965 - [x] 80% ImGui::RenderDimmedBackgrounds imgui.lua:19013 + [x] 81% ImGui::RenderDimmedBackgrounds imgui.lua:19013 [x] 84% ImGui::EndFrame imgui.lua:14080 [x] 74% ImGui::Render imgui.lua:14191 [x] 17% ImGui::CalcTextSize imgui.lua:14264 @@ -319,8 +319,8 @@ imgui.cpp [x] 71% ImGui::UpdateWindowManualResize imgui.lua:9799 [ ] ClampWindowPos [x] 95% RenderWindowOuterSingleBorder imgui.lua:10430 - [x] 93% ImGui::RenderWindowOuterBorders imgui.lua:10605 = RenderWindowOuterBorders - [x] 83% ImGui::RenderWindowDecorations imgui.lua:10474 + [x] 94% ImGui::RenderWindowOuterBorders imgui.lua:10605 = RenderWindowOuterBorders + [x] 84% 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 @@ -850,7 +850,7 @@ imgui.cpp [x] 92% RenderViewportsThumbnails imgui.lua:18879 [ ] ViewportComparerByLastFocusedStampCount [ ] ImGui::DebugRenderKeyboardPreview - [x] 52% ImGui::DebugTextEncoding imgui.lua:20993 + [x] 52% ImGui::DebugTextEncoding imgui.lua:20998 [ ] DebugFlashStyleColorStop [ ] ImGui::DebugFlashStyleColor [ ] ImGui::UpdateDebugToolFlashStyleColor @@ -858,27 +858,27 @@ imgui.cpp [ ] FormatTextureRefForDebugDisplay [x] 52% ImGui::ShowFontAtlas imgui.lua:20292 [x] 84% ImGui::DebugNodeTexture imgui.lua:20259 - [x] 44% ImGui::ShowMetricsWindow imgui.lua:21058 + [x] 44% ImGui::ShowMetricsWindow imgui.lua:21063 [ ] ImGui::DebugBreakClearData [ ] ImGui::DebugBreakButtonTooltip [ ] ImGui::DebugBreakButton [x] 87% ImGui::DebugNodeColumns imgui.lua:20637 - [x] 48% DebugNodeDockNodeFlags imgui.lua:20825 - [x] 79% ImGui::DebugNodeDockNode imgui.lua:20842 - [x] 28% ImGui::DebugNodeDrawList imgui.lua:20659 + [x] 48% DebugNodeDockNodeFlags imgui.lua:20830 + [x] 79% ImGui::DebugNodeDockNode imgui.lua:20847 + [x] 23% ImGui::DebugNodeDrawList imgui.lua:20659 [ ] ImGui::DebugNodeDrawCmdShowMeshAndBoundingBox [ ] CalcFontGlyphSrcOverlapMask [x] 60% ImGui::DebugNodeFont imgui.lua:20182 [x] 59% ImGui::DebugNodeFontGlyphsForSrcMask imgui.lua:20127 [x] 89% ImGui::DebugNodeFontGlyph imgui.lua:20113 [x] 37% ImGui::DebugNodeStorage imgui.lua:20647 - [x] 68% ImGui::DebugNodeTabBar imgui.lua:20720 - [x] 62% ImGui::DebugNodeViewport imgui.lua:20975 + [x] 69% ImGui::DebugNodeTabBar imgui.lua:20725 + [x] 62% ImGui::DebugNodeViewport imgui.lua:20980 [ ] ImGui::DebugNodePlatformMonitor - [x] 70% ImGui::DebugNodeWindow imgui.lua:20886 - [x] 87% ImGui::DebugNodeWindowSettings imgui.lua:20944 - [x] 73% ImGui::DebugNodeWindowsList imgui.lua:20950 - [x] 67% ImGui::DebugNodeWindowsListByBeginStackParent imgui.lua:20961 + [x] 70% ImGui::DebugNodeWindow imgui.lua:20891 + [x] 87% ImGui::DebugNodeWindowSettings imgui.lua:20949 + [x] 73% ImGui::DebugNodeWindowsList imgui.lua:20955 + [x] 67% ImGui::DebugNodeWindowsListByBeginStackParent imgui.lua:20966 -- DEBUG LOG WINDOW [x] 5% ImGui::DebugLog imgui.lua:19932 @@ -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:7447 = ImGui . TextColored(...) + [x] 83% ImGui::TextColoredV imgui_widgets.lua:7430 = ImGui . TextColored(...) [x] 17% ImGui::TextDisabled imgui_widgets.lua:241 - [x] 89% ImGui::TextDisabledV imgui_widgets.lua:7448 = ImGui . TextDisabled(...) + [x] 89% ImGui::TextDisabledV imgui_widgets.lua:7431 = ImGui . TextDisabled(...) [x] 10% ImGui::TextWrapped imgui_widgets.lua:250 - [x] 91% ImGui::TextWrappedV imgui_widgets.lua:7449 = ImGui . TextWrapped(...) + [x] 91% ImGui::TextWrappedV imgui_widgets.lua:7432 = ImGui . TextWrapped(...) [x] 2% ImGui::TextAligned imgui_widgets.lua:269 - [x] 67% ImGui::TextAlignedV imgui_widgets.lua:7450 = ImGui . TextAligned(...) + [x] 67% ImGui::TextAlignedV imgui_widgets.lua:7433 = ImGui . TextAligned(...) [x] 4% ImGui::LabelText imgui_widgets.lua:305 - [x] 89% ImGui::LabelTextV imgui_widgets.lua:7451 = ImGui . LabelText(...) + [x] 89% ImGui::LabelTextV imgui_widgets.lua:7434 = ImGui . LabelText(...) [x] 2% ImGui::BulletText imgui_widgets.lua:340 - [x] 77% ImGui::BulletTextV imgui_widgets.lua:7452 = ImGui . BulletText(...) + [x] 77% ImGui::BulletTextV imgui_widgets.lua:7435 = ImGui . BulletText(...) -- Widgets: Main [x] 85% ImGui::ButtonBehavior imgui_widgets.lua:488 @@ -935,333 +935,333 @@ imgui_widgets.cpp [x] 71% ImGui::InvisibleButton imgui_widgets.lua:828 [x] 87% ImGui::ArrowButtonEx imgui_widgets.lua:859 [x] 97% ImGui::ArrowButton imgui_widgets.lua:891 - [x] 79% ImGui::CloseButton imgui_widgets.lua:900 + [x] 80% ImGui::CloseButton imgui_widgets.lua:900 [x] 90% ImGui::CollapseButton imgui.lua:4558 - [x] 52% ImGui::GetWindowScrollbarID imgui_widgets.lua:976 - [x] 90% ImGui::GetWindowScrollbarRect imgui_widgets.lua:989 - [x] 99% ImGui::ExtendHitBoxWhenNearViewportEdge imgui_widgets.lua:1012 - [x] 77% ImGui::Scrollbar imgui_widgets.lua:1189 - [x] 85% ImGui::ScrollbarEx imgui_widgets.lua:1040 - [x] 84% ImGui::ImageWithBg imgui_widgets.lua:1214 - [x] 28% ImGui::Image imgui_widgets.lua:1252 - [x] 92% ImGui::ImageButtonEx imgui_widgets.lua:1264 - [x] 98% ImGui::ImageButton imgui_widgets.lua:1308 - [x] 77% ImGui::Checkbox imgui_widgets.lua:1323 - [x] 79% ImGui::CheckboxFlagsT imgui_widgets.lua:1436 = ImGui . CheckboxFlags - [x] 7% ImGui::CheckboxFlags imgui_widgets.lua:1415 - [x] 5% ImGui::RadioButton imgui_widgets.lua:1510 - [x] 93% ImGui::ProgressBar imgui_widgets.lua:1522 - [x] 97% ImGui::Bullet imgui_widgets.lua:1585 - [x] 86% ImGui::TextLink imgui_widgets.lua:1612 - [x] 95% ImGui::TextLinkOpenURL imgui_widgets.lua:1667 + [x] 52% ImGui::GetWindowScrollbarID imgui_widgets.lua:950 + [x] 90% ImGui::GetWindowScrollbarRect imgui_widgets.lua:963 + [x] 99% ImGui::ExtendHitBoxWhenNearViewportEdge imgui_widgets.lua:986 + [x] 77% ImGui::Scrollbar imgui_widgets.lua:1163 + [x] 85% ImGui::ScrollbarEx imgui_widgets.lua:1014 + [x] 84% ImGui::ImageWithBg imgui_widgets.lua:1188 + [x] 28% ImGui::Image imgui_widgets.lua:1226 + [x] 92% ImGui::ImageButtonEx imgui_widgets.lua:1238 + [x] 98% ImGui::ImageButton imgui_widgets.lua:1282 + [x] 77% ImGui::Checkbox imgui_widgets.lua:1297 + [x] 79% ImGui::CheckboxFlagsT imgui_widgets.lua:1410 = ImGui . CheckboxFlags + [x] 7% ImGui::CheckboxFlags imgui_widgets.lua:1389 + [x] 5% ImGui::RadioButton imgui_widgets.lua:1484 + [x] 93% ImGui::ProgressBar imgui_widgets.lua:1496 + [x] 97% ImGui::Bullet imgui_widgets.lua:1559 + [x] 86% ImGui::TextLink imgui_widgets.lua:1586 + [x] 95% ImGui::TextLinkOpenURL imgui_widgets.lua:1641 -- Widgets: Low-level Layout helpers - [x] 82% ImGui::Spacing imgui_widgets.lua:1702 - [x] 62% ImGui::Dummy imgui_widgets.lua:1711 - [x] 96% ImGui::NewLine imgui_widgets.lua:1723 - [x] 100% ImGui::AlignTextToFramePadding imgui_widgets.lua:1743 - [x] 87% ImGui::SeparatorEx imgui_widgets.lua:1759 - [x] 87% ImGui::Separator imgui_widgets.lua:1828 - [x] 94% ImGui::SeparatorTextEx imgui_widgets.lua:1855 - [x] 100% ImGui::SeparatorText imgui_widgets.lua:1916 + [x] 82% ImGui::Spacing imgui_widgets.lua:1676 + [x] 62% ImGui::Dummy imgui_widgets.lua:1685 + [x] 96% ImGui::NewLine imgui_widgets.lua:1697 + [x] 100% ImGui::AlignTextToFramePadding imgui_widgets.lua:1717 + [x] 87% ImGui::SeparatorEx imgui_widgets.lua:1733 + [x] 87% ImGui::Separator imgui_widgets.lua:1802 + [x] 96% ImGui::SeparatorTextEx imgui_widgets.lua:1829 + [x] 100% ImGui::SeparatorText imgui_widgets.lua:1890 [x] 82% ImGui::SplitterBehavior imgui.lua:4592 [ ] ShrinkWidthItemComparer - [x] 58% ImGui::ShrinkWidths imgui_widgets.lua:10696 + [x] 58% ImGui::ShrinkWidths imgui_widgets.lua:10683 -- Widgets: ComboBox - [x] 100% CalcMaxPopupHeightFromItemCount imgui_widgets.lua:1945 - [x] 81% ImGui::BeginCombo imgui_widgets.lua:1956 - [x] 85% ImGui::BeginComboPopup imgui_widgets.lua:2072 - [x] 65% ImGui::EndCombo imgui_widgets.lua:2145 - [x] 72% ImGui::BeginComboPreview imgui_widgets.lua:2163 - [x] 80% ImGui::EndComboPreview imgui_widgets.lua:2195 - [x] 36% Items_ArrayGetter imgui_widgets.lua:2223 - [x] 41% Items_SingleStringGetter imgui_widgets.lua:2228 - [x] 67% ImGui::Combo imgui_widgets.lua:2271 + [x] 100% CalcMaxPopupHeightFromItemCount imgui_widgets.lua:1919 + [x] 81% ImGui::BeginCombo imgui_widgets.lua:1930 + [x] 85% ImGui::BeginComboPopup imgui_widgets.lua:2046 + [x] 65% ImGui::EndCombo imgui_widgets.lua:2119 + [x] 72% ImGui::BeginComboPreview imgui_widgets.lua:2137 + [x] 80% ImGui::EndComboPreview imgui_widgets.lua:2169 + [x] 36% Items_ArrayGetter imgui_widgets.lua:2197 + [x] 41% Items_SingleStringGetter imgui_widgets.lua:2202 + [x] 67% ImGui::Combo imgui_widgets.lua:2245 -- Data Type and Data Formatting Helpers [Internal] - [x] 93% ImGui::DataTypeGetInfo imgui_widgets.lua:2371 - [x] 51% ImGui::DataTypeFormatString imgui_widgets.lua:2381 - [x] 65% ImGui::DataTypeApplyOp imgui_widgets.lua:2409 - [x] 69% ImGui::DataTypeApplyFromText imgui_widgets.lua:2474 - [x] 97% DataTypeCompareT imgui_widgets.lua:2535 - [x] 47% ImGui::DataTypeCompare imgui_widgets.lua:2544 - [x] 75% DataTypeClampT imgui_widgets.lua:2563 - [x] 42% ImGui::DataTypeClamp imgui_widgets.lua:2574 - [x] 93% ImGui::DataTypeIsZero imgui_widgets.lua:2590 - [x] 53% GetMinimumStepAtDecimalPrecision imgui_widgets.lua:2601 - [x] 58% ImGui::RoundScalarWithFormatT imgui_widgets.lua:2619 + [x] 93% ImGui::DataTypeGetInfo imgui_widgets.lua:2345 + [x] 51% ImGui::DataTypeFormatString imgui_widgets.lua:2355 + [x] 65% ImGui::DataTypeApplyOp imgui_widgets.lua:2383 + [x] 69% ImGui::DataTypeApplyFromText imgui_widgets.lua:2448 + [x] 97% DataTypeCompareT imgui_widgets.lua:2509 + [x] 47% ImGui::DataTypeCompare imgui_widgets.lua:2518 + [x] 75% DataTypeClampT imgui_widgets.lua:2537 + [x] 42% ImGui::DataTypeClamp imgui_widgets.lua:2548 + [x] 93% ImGui::DataTypeIsZero imgui_widgets.lua:2564 + [x] 53% GetMinimumStepAtDecimalPrecision imgui_widgets.lua:2575 + [x] 58% ImGui::RoundScalarWithFormatT imgui_widgets.lua:2593 -- Widgets: DragScalar, DragFloat, DragInt, etc. - [x] 85% ImGui::DragBehaviorT imgui_widgets.lua:3172 + [x] 85% ImGui::DragBehaviorT imgui_widgets.lua:3146 [ ] ShortcutsForCancel - [x] 59% ImGui::DragBehavior imgui_widgets.lua:3328 - [x] 74% TempInputIsClampEnabled imgui_widgets.lua:3375 - [x] 75% ImGui::DragScalar imgui_widgets.lua:3418 - [x] 70% ImGui::DragScalarN imgui_widgets.lua:3561 - [x] 52% ImGui::DragFloat imgui_widgets.lua:3531 - [x] n/a ImGui::DragFloat2 imgui_widgets.lua:3611 = DragFloatN ( 2 ) - [x] n/a ImGui::DragFloat3 imgui_widgets.lua:3612 = DragFloatN ( 3 ) - [x] n/a ImGui::DragFloat4 imgui_widgets.lua:3613 = DragFloatN ( 4 ) - [x] 67% ImGui::DragFloatRange2 imgui_widgets.lua:3658 - [x] 52% ImGui::DragInt imgui_widgets.lua:3550 - [x] n/a ImGui::DragInt2 imgui_widgets.lua:3614 = DragIntN ( 2 ) - [x] n/a ImGui::DragInt3 imgui_widgets.lua:3615 = DragIntN ( 3 ) - [x] n/a ImGui::DragInt4 imgui_widgets.lua:3616 = DragIntN ( 4 ) - [x] 67% ImGui::DragIntRange2 imgui_widgets.lua:3662 + [x] 59% ImGui::DragBehavior imgui_widgets.lua:3302 + [x] 74% TempInputIsClampEnabled imgui_widgets.lua:3349 + [x] 75% ImGui::DragScalar imgui_widgets.lua:3392 + [x] 70% ImGui::DragScalarN imgui_widgets.lua:3535 + [x] 52% ImGui::DragFloat imgui_widgets.lua:3505 + [x] n/a ImGui::DragFloat2 imgui_widgets.lua:3585 = DragFloatN ( 2 ) + [x] n/a ImGui::DragFloat3 imgui_widgets.lua:3586 = DragFloatN ( 3 ) + [x] n/a ImGui::DragFloat4 imgui_widgets.lua:3587 = DragFloatN ( 4 ) + [x] 67% ImGui::DragFloatRange2 imgui_widgets.lua:3632 + [x] 52% ImGui::DragInt imgui_widgets.lua:3524 + [x] n/a ImGui::DragInt2 imgui_widgets.lua:3588 = DragIntN ( 2 ) + [x] n/a ImGui::DragInt3 imgui_widgets.lua:3589 = DragIntN ( 3 ) + [x] n/a ImGui::DragInt4 imgui_widgets.lua:3590 = DragIntN ( 4 ) + [x] 67% ImGui::DragIntRange2 imgui_widgets.lua:3636 -- Widgets: SliderScalar, SliderFloat, SliderInt, etc. - [x] 89% ImGui::ScaleRatioFromValueT imgui_widgets.lua:3696 - [x] 89% ImGui::ScaleValueFromRatioT imgui_widgets.lua:3773 - [x] 83% ImGui::SliderBehaviorT imgui_widgets.lua:3861 - [x] 58% ImGui::SliderBehavior imgui_widgets.lua:4040 - [x] 72% ImGui::SliderScalar imgui_widgets.lua:4093 - [x] 74% ImGui::SliderScalarN imgui_widgets.lua:4208 - [x] 71% ImGui::SliderFloat imgui_widgets.lua:4284 - [x] 100% ImGui::SliderFloat2 imgui_widgets.lua:4254 - [x] 100% ImGui::SliderFloat3 imgui_widgets.lua:4264 - [x] 100% ImGui::SliderFloat4 imgui_widgets.lua:4274 - [x] 74% ImGui::SliderAngle imgui_widgets.lua:4299 - [x] 71% ImGui::SliderInt imgui_widgets.lua:4320 - [x] 95% ImGui::SliderInt2 imgui_widgets.lua:4327 - [x] 95% ImGui::SliderInt3 imgui_widgets.lua:4331 - [x] 95% ImGui::SliderInt4 imgui_widgets.lua:4335 - [x] 80% ImGui::VSliderScalar imgui_widgets.lua:4347 - [x] 84% ImGui::VSliderFloat imgui_widgets.lua:4423 - [x] 84% ImGui::VSliderInt imgui_widgets.lua:4436 + [x] 89% ImGui::ScaleRatioFromValueT imgui_widgets.lua:3670 + [x] 89% ImGui::ScaleValueFromRatioT imgui_widgets.lua:3747 + [x] 83% ImGui::SliderBehaviorT imgui_widgets.lua:3835 + [x] 58% ImGui::SliderBehavior imgui_widgets.lua:4014 + [x] 72% ImGui::SliderScalar imgui_widgets.lua:4067 + [x] 74% ImGui::SliderScalarN imgui_widgets.lua:4182 + [x] 71% ImGui::SliderFloat imgui_widgets.lua:4258 + [x] 100% ImGui::SliderFloat2 imgui_widgets.lua:4228 + [x] 100% ImGui::SliderFloat3 imgui_widgets.lua:4238 + [x] 100% ImGui::SliderFloat4 imgui_widgets.lua:4248 + [x] 74% ImGui::SliderAngle imgui_widgets.lua:4273 + [x] 71% ImGui::SliderInt imgui_widgets.lua:4294 + [x] 95% ImGui::SliderInt2 imgui_widgets.lua:4301 + [x] 95% ImGui::SliderInt3 imgui_widgets.lua:4305 + [x] 95% ImGui::SliderInt4 imgui_widgets.lua:4309 + [x] 80% ImGui::VSliderScalar imgui_widgets.lua:4321 + [x] 84% ImGui::VSliderFloat imgui_widgets.lua:4397 + [x] 84% ImGui::VSliderInt imgui_widgets.lua:4410 -- Widgets: InputScalar, InputFloat, InputInt, etc. - [x] 44% ImParseFormatFindStart imgui_widgets.lua:2661 - [x] 46% ImParseFormatFindEnd imgui_widgets.lua:2679 - [x] 55% ImParseFormatTrimDecorations imgui_widgets.lua:2706 + [x] 44% ImParseFormatFindStart imgui_widgets.lua:2635 + [x] 46% ImParseFormatFindEnd imgui_widgets.lua:2653 + [x] 55% ImParseFormatTrimDecorations imgui_widgets.lua:2680 [ ] ImParseFormatSanitizeForPrinting - [x] 61% ImParseFormatSanitizeForScanning imgui_widgets.lua:2722 - [x] 41% ImAtoi imgui_widgets.lua:2752 - [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: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 - [x] 95% ImGui::InputFloat2 imgui_widgets.lua:3077 - [x] 84% ImGui::InputFloat3 imgui_widgets.lua:3071 - [x] 95% ImGui::InputFloat4 imgui_widgets.lua:3081 - [x] 66% ImGui::InputInt imgui_widgets.lua:3102 - [x] 100% ImGui::InputInt2 imgui_widgets.lua:3085 - [x] 100% ImGui::InputInt3 imgui_widgets.lua:3089 - [x] 100% ImGui::InputInt4 imgui_widgets.lua:3093 - [x] 65% ImGui::InputDouble imgui_widgets.lua:3132 + [x] 61% ImParseFormatSanitizeForScanning imgui_widgets.lua:2696 + [x] 41% ImAtoi imgui_widgets.lua:2726 + [x] 55% ImParseFormatPrecision imgui_widgets.lua:2751 + [x] 88% ImGui::TempInputText imgui_widgets.lua:2792 + [x] 63% ImGui::TempInputScalar imgui_widgets.lua:2836 + [x] 63% ImGui::SetNextItemRefVal imgui_widgets.lua:7439 + [x] 74% ImGui::InputScalar imgui_widgets.lua:2887 + [x] 71% ImGui::InputScalarN imgui_widgets.lua:3004 + [x] 65% ImGui::InputFloat imgui_widgets.lua:3092 + [x] 95% ImGui::InputFloat2 imgui_widgets.lua:3051 + [x] 84% ImGui::InputFloat3 imgui_widgets.lua:3045 + [x] 95% ImGui::InputFloat4 imgui_widgets.lua:3055 + [x] 66% ImGui::InputInt imgui_widgets.lua:3076 + [x] 100% ImGui::InputInt2 imgui_widgets.lua:3059 + [x] 100% ImGui::InputInt3 imgui_widgets.lua:3063 + [x] 100% ImGui::InputInt4 imgui_widgets.lua:3067 + [x] 65% ImGui::InputDouble imgui_widgets.lua:3106 -- Widgets: InputText, InputTextMultiline, InputTextWithHint - [x] 77% ImGui::InputText imgui_widgets.lua:4459 - [x] 80% ImGui::InputTextMultiline imgui_widgets.lua:4481 - [x] 77% ImGui::InputTextWithHint imgui_widgets.lua:6305 - [x] 87% InputTextCalcTextSize imgui_widgets.lua:4501 - [x] 100% STB_TEXTEDIT_STRINGLEN imgui_widgets.lua:4517 - [x] 88% STB_TEXTEDIT_GETCHAR imgui_widgets.lua:4521 - [x] 61% STB_TEXTEDIT_GETWIDTH imgui_widgets.lua:4527 - [x] 86% STB_TEXTEDIT_LAYOUTROW imgui_widgets.lua:4532 - [x] 79% IMSTB_TEXTEDIT_GETNEXTCHARINDEX_IMPL imgui_widgets.lua:4545 - [x] 70% IMSTB_TEXTEDIT_GETPREVCHARINDEX_IMPL imgui_widgets.lua:4554 - [x] 23% ImCharIsSeparatorW imgui_widgets.lua:4571 - [x] 66% is_word_boundary_from_right imgui_widgets.lua:4584 - [x] 65% is_word_boundary_from_left imgui_widgets.lua:4603 - [x] 71% STB_TEXTEDIT_MOVEWORDLEFT_IMPL imgui_widgets.lua:4621 + [x] 77% ImGui::InputText imgui_widgets.lua:4433 + [x] 80% ImGui::InputTextMultiline imgui_widgets.lua:4455 + [x] 77% ImGui::InputTextWithHint imgui_widgets.lua:6279 + [x] 87% InputTextCalcTextSize imgui_widgets.lua:4475 + [x] 100% STB_TEXTEDIT_STRINGLEN imgui_widgets.lua:4491 + [x] 88% STB_TEXTEDIT_GETCHAR imgui_widgets.lua:4495 + [x] 61% STB_TEXTEDIT_GETWIDTH imgui_widgets.lua:4501 + [x] 86% STB_TEXTEDIT_LAYOUTROW imgui_widgets.lua:4506 + [x] 79% IMSTB_TEXTEDIT_GETNEXTCHARINDEX_IMPL imgui_widgets.lua:4519 + [x] 70% IMSTB_TEXTEDIT_GETPREVCHARINDEX_IMPL imgui_widgets.lua:4528 + [x] 23% ImCharIsSeparatorW imgui_widgets.lua:4545 + [x] 66% is_word_boundary_from_right imgui_widgets.lua:4558 + [x] 65% is_word_boundary_from_left imgui_widgets.lua:4577 + [x] 71% STB_TEXTEDIT_MOVEWORDLEFT_IMPL imgui_widgets.lua:4595 [ ] STB_TEXTEDIT_MOVEWORDRIGHT_MAC [ ] STB_TEXTEDIT_MOVEWORDRIGHT_WIN - [x] 100% STB_TEXTEDIT_MOVEWORDRIGHT_IMPL imgui_widgets.lua:4653 - [x] 68% STB_TEXTEDIT_MOVELINESTART_IMPL imgui_widgets.lua:4666 - [x] 73% STB_TEXTEDIT_MOVELINEEND_IMPL imgui_widgets.lua:4705 - [x] 79% STB_TEXTEDIT_DELETECHARS imgui_widgets.lua:4738 - [x] 87% STB_TEXTEDIT_INSERTCHARS imgui_widgets.lua:4752 - [x] 81% stb_textedit_replace imgui_widgets.lua:4795 + [x] 100% STB_TEXTEDIT_MOVEWORDRIGHT_IMPL imgui_widgets.lua:4627 + [x] 68% STB_TEXTEDIT_MOVELINESTART_IMPL imgui_widgets.lua:4640 + [x] 73% STB_TEXTEDIT_MOVELINEEND_IMPL imgui_widgets.lua:4679 + [x] 79% STB_TEXTEDIT_DELETECHARS imgui_widgets.lua:4712 + [x] 87% STB_TEXTEDIT_INSERTCHARS imgui_widgets.lua:4726 + [x] 81% stb_textedit_replace imgui_widgets.lua:4769 [x] 12% ImGuiInputTextState::ImGuiInputTextState imgui_internal.lua:1705 [-] ImGuiInputTextState::~ImGuiInputTextState c++-only - [x] 93% ImGuiInputTextState::OnKeyPressed imgui_widgets.lua:4823 - [x] 63% ImGuiInputTextState::OnCharPressed imgui_widgets.lua:4838 - [x] 100% ImGuiInputTextState::CursorAnimReset imgui_widgets.lua:4850 - [x] 85% ImGuiInputTextState::CursorClamp imgui_widgets.lua:4852 - [x] 94% ImGuiInputTextState::HasSelection imgui_widgets.lua:4858 + [x] 93% ImGuiInputTextState::OnKeyPressed imgui_widgets.lua:4797 + [x] 63% ImGuiInputTextState::OnCharPressed imgui_widgets.lua:4812 + [x] 100% ImGuiInputTextState::CursorAnimReset imgui_widgets.lua:4824 + [x] 85% ImGuiInputTextState::CursorClamp imgui_widgets.lua:4826 + [x] 94% ImGuiInputTextState::HasSelection imgui_widgets.lua:4832 [ ] ImGuiInputTextState::ClearSelection [ ] ImGuiInputTextState::GetCursorPos [ ] ImGuiInputTextState::GetSelectionStart [ ] ImGuiInputTextState::GetSelectionEnd [ ] ImGuiInputTextState::SetSelection [ ] ImGuiInputTextState::GetPreferredOffsetX - [x] 74% ImGuiInputTextState::SelectAll imgui_widgets.lua:4860 + [x] 74% ImGuiInputTextState::SelectAll imgui_widgets.lua:4834 [ ] ImGuiInputTextState::ReloadUserBufAndSelectAll [ ] ImGuiInputTextState::ReloadUserBufAndKeepSelection [ ] ImGuiInputTextState::ReloadUserBufAndMoveToEnd [x] 18% ImGuiInputTextCallbackData::ImGuiInputTextCallbackData imgui_h.lua:2468 [x] 61% ImGuiInputTextCallbackData::DeleteChars imgui_h.lua:2472 [x] 33% ImGuiInputTextCallbackData::InsertChars imgui_h.lua:2489 - [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:5118 - [x] 77% InputTextLineIndexGetPosOffset imgui_widgets.lua:5214 - [x] 87% ImGui::InputTextEx imgui_widgets.lua:5259 + [x] 92% ImGui::PushPasswordFont imgui_widgets.lua:4843 + [x] 98% ImGui::PopPasswordFont imgui_widgets.lua:4858 + [x] 80% InputTextFilterCharacter imgui_widgets.lua:4878 + [x] 74% InputTextReconcileUndoState imgui_widgets.lua:5016 + [x] 86% ImGui::InputTextDeactivateHook imgui_widgets.lua:5058 + [x] 74% ImLowerBound imgui_widgets.lua:5160 + [x] 55% InputTextLineIndexBuild imgui_widgets.lua:5092 + [x] 77% InputTextLineIndexGetPosOffset imgui_widgets.lua:5188 + [x] 87% ImGui::InputTextEx imgui_widgets.lua:5233 [ ] ImGui::DebugNodeInputTextState -- Widgets: ColorEdit, ColorPicker, ColorButton, etc. - [x] 54% ImGui::ColorEdit3 imgui_widgets.lua:6683 - [x] 88% ColorEditRestoreH imgui_widgets.lua:6329 - [x] 87% ColorEditRestoreHS imgui_widgets.lua:6346 - [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] 69% ImGui::ColorButton imgui_widgets.lua:7165 + [x] 54% ImGui::ColorEdit3 imgui_widgets.lua:6657 + [x] 88% ColorEditRestoreH imgui_widgets.lua:6303 + [x] 87% ColorEditRestoreHS imgui_widgets.lua:6320 + [x] 62% ImGui::ColorEdit4 imgui_widgets.lua:6363 + [x] 70% ImGui::ColorPicker3 imgui_widgets.lua:6665 + [x] 98% RenderArrowsForVerticalBar imgui_widgets.lua:6693 + [x] 80% ImGui::ColorPicker4 imgui_widgets.lua:6712 + [x] 85% ImGui::ColorButton imgui_widgets.lua:7139 [-] ImGui::SetColorEditOptions obsolete - [x] 73% ImGui::ColorTooltip imgui_widgets.lua:7260 - [x] 72% ImGui::ColorEditOptionsPopup imgui_widgets.lua:7304 - [x] 75% ImGui::ColorPickerOptionsPopup imgui_widgets.lua:7380 + [x] 73% ImGui::ColorTooltip imgui_widgets.lua:7243 + [x] 72% ImGui::ColorEditOptionsPopup imgui_widgets.lua:7287 + [x] 75% ImGui::ColorPickerOptionsPopup imgui_widgets.lua:7363 -- Widgets: TreeNode, CollapsingHeader, etc. - [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 + [x] 78% ImGui::TreeNode imgui_widgets.lua:7448 + [x] 89% ImGui::TreeNodeV imgui_widgets.lua:7460 + [x] 69% ImGui::TreeNodeEx imgui_widgets.lua:7467 + [x] 68% ImGui::TreeNodeExV imgui_widgets.lua:7481 + [x] 73% ImGui::TreeNodeGetOpen imgui_widgets.lua:7494 + [x] 79% ImGui::TreeNodeSetOpen imgui_widgets.lua:7502 + [x] 82% ImGui::TreeNodeUpdateNextOpen imgui_widgets.lua:7510 + [x] 86% TreeNodeStoreStackData imgui_widgets.lua:7553 + [x] 82% ImGui::TreeNodeBehavior imgui_widgets.lua:7580 + [x] 91% ImGui::TreeNodeDrawLineToChildNode imgui_widgets.lua:7884 + [x] 98% ImGui::TreeNodeDrawLineToTreePop imgui_widgets.lua:7919 + [x] 67% ImGui::TreePush imgui_widgets.lua:7951 + [x] 74% ImGui::TreePushOverrideID imgui_widgets.lua:7959 + [x] 84% ImGui::TreePop imgui_widgets.lua:7967 + [x] 100% ImGui::GetTreeNodeToLabelSpacing imgui_widgets.lua:8016 + [x] 77% ImGui::SetNextItemOpen imgui_widgets.lua:8003 + [x] 85% ImGui::SetNextItemStorageID imgui_widgets.lua:8023 + [x] 81% ImGui::CollapsingHeader imgui_widgets.lua:8042 -- Widgets: Selectable - [x] 83% ImGui::Selectable imgui_widgets.lua:8112 + [x] 83% ImGui::Selectable imgui_widgets.lua:8099 -- Widgets: Typing-Select support - [x] 74% ImGui::GetTypingSelectRequest imgui_widgets.lua:8343 - [x] 48% ImStrimatchlen imgui_widgets.lua:8445 - [x] 95% ImGui::TypingSelectFindMatch imgui_widgets.lua:8468 - [x] 88% ImGui::TypingSelectFindNextSingleCharMatch imgui_widgets.lua:8485 - [x] 85% ImGui::TypingSelectFindBestLeadingMatch imgui_widgets.lua:8516 - [x] 86% ImGui::DebugNodeTypingSelectState imgui_widgets.lua:8534 + [x] 74% ImGui::GetTypingSelectRequest imgui_widgets.lua:8330 + [x] 48% ImStrimatchlen imgui_widgets.lua:8432 + [x] 95% ImGui::TypingSelectFindMatch imgui_widgets.lua:8455 + [x] 88% ImGui::TypingSelectFindNextSingleCharMatch imgui_widgets.lua:8472 + [x] 85% ImGui::TypingSelectFindBestLeadingMatch imgui_widgets.lua:8503 + [x] 86% ImGui::DebugNodeTypingSelectState imgui_widgets.lua:8521 -- Widgets: Box-Select support - [x] 67% BoxSelectPreStartDrag imgui_widgets.lua:8555 - [x] 89% BoxSelectActivateDrag imgui_widgets.lua:8569 - [x] 99% BoxSelectDeactivateDrag imgui_widgets.lua:8582 - [x] 81% BoxSelectScrollWithMouseDrag imgui_widgets.lua:8592 - [x] 49% ImGui::BeginBoxSelect imgui_widgets.lua:8629 - [x] 90% ImGui::EndBoxSelect imgui_widgets.lua:8725 + [x] 67% BoxSelectPreStartDrag imgui_widgets.lua:8542 + [x] 89% BoxSelectActivateDrag imgui_widgets.lua:8556 + [x] 99% BoxSelectDeactivateDrag imgui_widgets.lua:8569 + [x] 81% BoxSelectScrollWithMouseDrag imgui_widgets.lua:8579 + [x] 49% ImGui::BeginBoxSelect imgui_widgets.lua:8616 + [x] 90% ImGui::EndBoxSelect imgui_widgets.lua:8712 -- Widgets: Multi-Select support - [x] 74% DebugLogMultiSelectRequests imgui_widgets.lua:8769 - [x] 61% CalcScopeRect imgui_widgets.lua:8777 - [x] 80% ImGui::BeginMultiSelect imgui_widgets.lua:8808 - [x] 83% ImGui::EndMultiSelect imgui_widgets.lua:8955 - [x] 73% ImGui::SetNextItemSelectionUserData imgui_widgets.lua:9045 - [x] 84% ImGui::MultiSelectItemHeader imgui_widgets.lua:9076 - [x] 86% ImGui::MultiSelectItemFooter imgui_widgets.lua:9146 - [x] 59% ImGui::MultiSelectAddSetAll imgui_widgets.lua:9360 - [x] 31% ImGui::MultiSelectAddSetRange imgui_widgets.lua:9372 - [x] 84% ImGui::DebugNodeMultiSelectState imgui_widgets.lua:9390 + [x] 74% DebugLogMultiSelectRequests imgui_widgets.lua:8756 + [x] 61% CalcScopeRect imgui_widgets.lua:8764 + [x] 80% ImGui::BeginMultiSelect imgui_widgets.lua:8795 + [x] 83% ImGui::EndMultiSelect imgui_widgets.lua:8942 + [x] 73% ImGui::SetNextItemSelectionUserData imgui_widgets.lua:9032 + [x] 84% ImGui::MultiSelectItemHeader imgui_widgets.lua:9063 + [x] 86% ImGui::MultiSelectItemFooter imgui_widgets.lua:9133 + [x] 59% ImGui::MultiSelectAddSetAll imgui_widgets.lua:9347 + [x] 31% ImGui::MultiSelectAddSetRange imgui_widgets.lua:9359 + [x] 84% ImGui::DebugNodeMultiSelectState imgui_widgets.lua:9377 -- Widgets: Multi-Select helpers - [x] 46% ImGuiSelectionBasicStorage::ImGuiSelectionBasicStorage imgui_widgets.lua:9435 - [x] 61% ImGuiSelectionBasicStorage::Clear imgui_widgets.lua:9447 - [x] 53% ImGuiSelectionBasicStorage::Swap imgui_widgets.lua:9454 - [x] 57% ImGuiSelectionBasicStorage::Contains imgui_widgets.lua:9462 - [x] 12% PairComparerByValueInt imgui_widgets.lua:9467 - [x] 26% ImGuiSelectionBasicStorage::GetNextSelectedItem imgui_widgets.lua:9476 - [x] 50% ImGuiSelectionBasicStorage::SetItemSelected imgui_widgets.lua:9507 - [x] 42% ImGuiSelectionBasicStorage_BatchSetItemSelected imgui_widgets.lua:9520 - [~] 0% ImGuiSelectionBasicStorage_BatchFinish imgui_widgets.lua:9535 stub - [x] 78% ImGuiSelectionBasicStorage::ApplyRequests imgui_widgets.lua:9554 - [x] 48% ImGuiSelectionExternalStorage::ImGuiSelectionExternalStorage imgui_widgets.lua:9619 - [x] 84% ImGuiSelectionExternalStorage::ApplyRequests imgui_widgets.lua:9630 + [x] 46% ImGuiSelectionBasicStorage::ImGuiSelectionBasicStorage imgui_widgets.lua:9422 + [x] 61% ImGuiSelectionBasicStorage::Clear imgui_widgets.lua:9434 + [x] 53% ImGuiSelectionBasicStorage::Swap imgui_widgets.lua:9441 + [x] 57% ImGuiSelectionBasicStorage::Contains imgui_widgets.lua:9449 + [x] 12% PairComparerByValueInt imgui_widgets.lua:9454 + [x] 26% ImGuiSelectionBasicStorage::GetNextSelectedItem imgui_widgets.lua:9463 + [x] 50% ImGuiSelectionBasicStorage::SetItemSelected imgui_widgets.lua:9494 + [x] 42% ImGuiSelectionBasicStorage_BatchSetItemSelected imgui_widgets.lua:9507 + [~] 0% ImGuiSelectionBasicStorage_BatchFinish imgui_widgets.lua:9522 stub + [x] 78% ImGuiSelectionBasicStorage::ApplyRequests imgui_widgets.lua:9541 + [x] 48% ImGuiSelectionExternalStorage::ImGuiSelectionExternalStorage imgui_widgets.lua:9606 + [x] 84% ImGuiSelectionExternalStorage::ApplyRequests imgui_widgets.lua:9617 -- Widgets: ListBox - [x] 92% ImGui::BeginListBox imgui_widgets.lua:9663 - [x] 78% ImGui::EndListBox imgui_widgets.lua:9704 - [x] 63% ImGui::ListBox imgui_widgets.lua:9719 + [x] 92% ImGui::BeginListBox imgui_widgets.lua:9650 + [x] 78% ImGui::EndListBox imgui_widgets.lua:9691 + [x] 63% ImGui::ListBox imgui_widgets.lua:9706 -- Widgets: PlotLines, PlotHistogram - [x] 89% ImGui::PlotEx imgui_widgets.lua:9791 - [x] 86% ImGuiPlotArrayGetterData::ImGuiPlotArrayGetterData imgui_widgets.lua:9921 - [x] 48% Plot_ArrayGetter imgui_widgets.lua:9932 - [x] 41% ImGui::PlotLines imgui_widgets.lua:9946 - [x] 41% ImGui::PlotHistogram imgui_widgets.lua:9972 + [x] 89% ImGui::PlotEx imgui_widgets.lua:9778 + [x] 86% ImGuiPlotArrayGetterData::ImGuiPlotArrayGetterData imgui_widgets.lua:9908 + [x] 48% Plot_ArrayGetter imgui_widgets.lua:9919 + [x] 41% ImGui::PlotLines imgui_widgets.lua:9933 + [x] 41% ImGui::PlotHistogram imgui_widgets.lua:9959 -- Widgets: Value helpers [x] 21% ImGui::Value imgui_widgets.lua:384 -- MenuItem, BeginMenu, EndMenu, etc. - [x] 49% ImGuiMenuColumns::Update imgui_widgets.lua:10004 - [x] 77% ImGuiMenuColumns::CalcNextTotalWidth imgui_widgets.lua:10016 - [x] 64% ImGuiMenuColumns::DeclColumns imgui_widgets.lua:10039 - [x] 91% ImGui::BeginMenuBar imgui_widgets.lua:10052 - [x] 92% ImGui::EndMenuBar imgui_widgets.lua:10086 - [x] 85% ImGui::BeginViewportSideBar imgui_widgets.lua:10149 - [x] 90% ImGui::BeginMainMenuBar imgui_widgets.lua:10185 - [x] 90% ImGui::EndMainMenuBar imgui_widgets.lua:10211 - [x] 91% IsRootOfOpenMenuSet imgui_widgets.lua:10227 - [x] 89% ImGui::BeginMenuEx imgui_widgets.lua:10255 - [x] 67% ImGui::BeginMenu imgui_widgets.lua:10486 - [x] 92% ImGui::EndMenu imgui_widgets.lua:10492 - [x] 85% ImGui::MenuItemEx imgui_widgets.lua:10516 - [x] 67% ImGui::MenuItem imgui_widgets.lua:10623 + [x] 49% ImGuiMenuColumns::Update imgui_widgets.lua:9991 + [x] 77% ImGuiMenuColumns::CalcNextTotalWidth imgui_widgets.lua:10003 + [x] 64% ImGuiMenuColumns::DeclColumns imgui_widgets.lua:10026 + [x] 91% ImGui::BeginMenuBar imgui_widgets.lua:10039 + [x] 92% ImGui::EndMenuBar imgui_widgets.lua:10073 + [x] 85% ImGui::BeginViewportSideBar imgui_widgets.lua:10136 + [x] 90% ImGui::BeginMainMenuBar imgui_widgets.lua:10172 + [x] 90% ImGui::EndMainMenuBar imgui_widgets.lua:10198 + [x] 91% IsRootOfOpenMenuSet imgui_widgets.lua:10214 + [x] 89% ImGui::BeginMenuEx imgui_widgets.lua:10242 + [x] 67% ImGui::BeginMenu imgui_widgets.lua:10473 + [x] 92% ImGui::EndMenu imgui_widgets.lua:10479 + [x] 85% ImGui::MenuItemEx imgui_widgets.lua:10503 + [x] 67% ImGui::MenuItem imgui_widgets.lua:10610 -- Widgets: BeginTabBar, EndTabBar, etc. - [x] 19% ImGuiTabBarSection::ImGuiTabBarSection imgui_widgets.lua:10691 + [x] 19% ImGuiTabBarSection::ImGuiTabBarSection imgui_widgets.lua:10678 [x] 16% ImGuiTabBar::ImGuiTabBar imgui_internal.lua:2210 - [x] 65% TabItemGetSectionIdx imgui_widgets.lua:10658 + [x] 65% TabItemGetSectionIdx imgui_widgets.lua:10645 [ ] TabItemComparerBySection [ ] TabItemComparerByBeginOrder [ ] GetTabBarFromTabBarRef [ ] GetTabBarRefFromTabBar - [x] 60% ImGui::TabBarFindByID imgui_widgets.lua:10779 - [x] 77% ImGui::TabBarRemove imgui_widgets.lua:10785 - [x] 92% ImGui::BeginTabBar imgui_widgets.lua:10790 - [x] 82% ImGui::BeginTabBarEx imgui_widgets.lua:10808 - [x] 90% ImGui::EndTabBar imgui_widgets.lua:10872 - [x] 68% TabBarCalcScrollableWidth imgui_widgets.lua:10684 - [x] 81% ImGui::TabBarLayout imgui_widgets.lua:10907 - [x] 75% ImGui::TabBarCalcTabID imgui_widgets.lua:11178 - [x] 62% ImGui::TabBarCalcMaxTabWidth imgui_widgets.lua:11188 - [x] 71% ImGui::TabBarFindTabByID imgui_widgets.lua:11192 - [x] 90% ImGui::TabBarFindTabByOrder imgui_widgets.lua:11204 - [x] 85% ImGui::TabBarFindMostRecentlySelectedTabForActiveWindow imgui_widgets.lua:11216 - [x] 93% ImGui::TabBarGetCurrentTab imgui_widgets.lua:11227 - [x] 55% ImGui::TabBarGetTabName imgui_widgets.lua:11232 - [x] 89% ImGui::TabBarGetTabPos imgui_widgets.lua:11238 - [x] 92% ImGui::TabBarAddTab imgui_widgets.lua:11247 - [x] 91% ImGui::TabBarRemoveTab imgui_widgets.lua:11264 - [x] 92% ImGui::TabBarCloseTab imgui_widgets.lua:11273 - [x] 97% ImGui::TabBarScrollClamp imgui_widgets.lua:11291 - [x] 89% ImGui::TabBarScrollToTab imgui_widgets.lua:11297 - [x] 67% ImGui::TabBarQueueFocus imgui_widgets.lua:11335 - [x] 100% ImGui::TabBarQueueReorder imgui_widgets.lua:11344 - [x] 85% ImGui::TabBarQueueReorderFromMousePos imgui_widgets.lua:11351 - [x] 64% ImGui::TabBarProcessReorder imgui_widgets.lua:11385 - [x] 85% ImGui::TabBarScrollingButtons imgui_widgets.lua:11408 - [x] 80% ImGui::TabBarTabListPopupButton imgui_widgets.lua:11468 + [x] 60% ImGui::TabBarFindByID imgui_widgets.lua:10766 + [x] 77% ImGui::TabBarRemove imgui_widgets.lua:10772 + [x] 92% ImGui::BeginTabBar imgui_widgets.lua:10777 + [x] 82% ImGui::BeginTabBarEx imgui_widgets.lua:10795 + [x] 90% ImGui::EndTabBar imgui_widgets.lua:10859 + [x] 68% TabBarCalcScrollableWidth imgui_widgets.lua:10671 + [x] 81% ImGui::TabBarLayout imgui_widgets.lua:10894 + [x] 75% ImGui::TabBarCalcTabID imgui_widgets.lua:11165 + [x] 62% ImGui::TabBarCalcMaxTabWidth imgui_widgets.lua:11175 + [x] 71% ImGui::TabBarFindTabByID imgui_widgets.lua:11179 + [x] 90% ImGui::TabBarFindTabByOrder imgui_widgets.lua:11191 + [x] 85% ImGui::TabBarFindMostRecentlySelectedTabForActiveWindow imgui_widgets.lua:11203 + [x] 93% ImGui::TabBarGetCurrentTab imgui_widgets.lua:11214 + [x] 55% ImGui::TabBarGetTabName imgui_widgets.lua:11219 + [x] 89% ImGui::TabBarGetTabPos imgui_widgets.lua:11225 + [x] 92% ImGui::TabBarAddTab imgui_widgets.lua:11234 + [x] 91% ImGui::TabBarRemoveTab imgui_widgets.lua:11251 + [x] 92% ImGui::TabBarCloseTab imgui_widgets.lua:11260 + [x] 97% ImGui::TabBarScrollClamp imgui_widgets.lua:11278 + [x] 89% ImGui::TabBarScrollToTab imgui_widgets.lua:11284 + [x] 67% ImGui::TabBarQueueFocus imgui_widgets.lua:11322 + [x] 100% ImGui::TabBarQueueReorder imgui_widgets.lua:11331 + [x] 85% ImGui::TabBarQueueReorderFromMousePos imgui_widgets.lua:11338 + [x] 64% ImGui::TabBarProcessReorder imgui_widgets.lua:11372 + [x] 85% ImGui::TabBarScrollingButtons imgui_widgets.lua:11395 + [x] 80% ImGui::TabBarTabListPopupButton imgui_widgets.lua:11455 -- Widgets: BeginTabItem, EndTabItem, etc. - [x] 78% ImGui::BeginTabItem imgui_widgets.lua:11516 - [x] 85% ImGui::EndTabItem imgui_widgets.lua:11535 - [x] 81% ImGui::TabItemButton imgui_widgets.lua:11549 - [x] 84% ImGui::TabItemSpacing imgui_widgets.lua:11559 - [x] 79% ImGui::TabItemEx imgui_widgets.lua:11570 - [x] 88% ImGui::SetTabItemClosed imgui_widgets.lua:11856 - [x] 79% ImGui::TabItemCalcSize imgui_widgets.lua:11878 - [x] 92% ImGui::TabItemBackground imgui_widgets.lua:11894 - [x] 86% ImGui::TabItemLabelAndCloseButton imgui_widgets.lua:11915 + [x] 78% ImGui::BeginTabItem imgui_widgets.lua:11503 + [x] 85% ImGui::EndTabItem imgui_widgets.lua:11522 + [x] 81% ImGui::TabItemButton imgui_widgets.lua:11536 + [x] 84% ImGui::TabItemSpacing imgui_widgets.lua:11546 + [x] 79% ImGui::TabItemEx imgui_widgets.lua:11557 + [x] 88% ImGui::SetTabItemClosed imgui_widgets.lua:11843 + [x] 79% ImGui::TabItemCalcSize imgui_widgets.lua:11865 + [x] 93% ImGui::TabItemBackground imgui_widgets.lua:11881 + [x] 86% ImGui::TabItemLabelAndCloseButton imgui_widgets.lua:11902 ==================================================================================================== imgui_draw.cpp @@ -1314,13 +1314,13 @@ imgui_draw.cpp [x] 63% ImDrawList::_PathArcToN imgui_draw.lua:6761 [x] 10% ImDrawList::PathArcToFast imgui_draw.lua:6747 [x] 46% ImDrawList::PathArcTo imgui_draw.lua:6787 - [x] 61% ImDrawList::PathEllipticalArcTo imgui_draw.lua:7384 - [x] 88% ImBezierCubicCalc imgui_draw.lua:7396 - [x] 89% ImBezierQuadraticCalc imgui_draw.lua:7402 - [x] 85% PathBezierCubicCurveToCasteljau imgui_draw.lua:7409 - [x] 90% PathBezierQuadraticCurveToCasteljau imgui_draw.lua:7427 - [x] 91% ImDrawList::PathBezierCubicCurveTo imgui_draw.lua:7441 - [x] 90% ImDrawList::PathBezierQuadraticCurveTo imgui_draw.lua:7453 + [x] 61% ImDrawList::PathEllipticalArcTo imgui_draw.lua:7377 + [x] 88% ImBezierCubicCalc imgui_draw.lua:7389 + [x] 89% ImBezierQuadraticCalc imgui_draw.lua:7395 + [x] 85% PathBezierCubicCurveToCasteljau imgui_draw.lua:7402 + [x] 90% PathBezierQuadraticCurveToCasteljau imgui_draw.lua:7420 + [x] 91% ImDrawList::PathBezierCubicCurveTo imgui_draw.lua:7434 + [x] 90% ImDrawList::PathBezierQuadraticCurveTo imgui_draw.lua:7446 [x] 8% ImDrawList::PathRect imgui_draw.lua:5234 [x] 46% ImDrawList::_AddLine imgui_draw.lua:5366 [x] 4% ImDrawList::AddLine imgui_draw.lua:5375 @@ -1364,7 +1364,7 @@ imgui_draw.cpp [ ] ImTriangulator::FlipNodeList [ ] ImTriangulator::IsEar [ ] ImTriangulator::ReclassifyNode - [x] 17% ImDrawList::AddConcavePolyFilled imgui_draw.lua:7467 + [x] 17% ImDrawList::AddConcavePolyFilled imgui_draw.lua:7460 -- ImDrawListSplitter [x] 58% ImDrawListSplitter::ClearFreeMemory imgui_draw.lua:4201 @@ -1556,14 +1556,14 @@ imgui_draw.cpp -- ImGui Internal Render Helpers [x] 58% ImGui::RenderArrow imgui_draw.lua:7100 [x] 88% ImGui::RenderBullet imgui_draw.lua:7132 - [x] 63% ImGui::RenderCheckMark imgui_draw.lua:7144 + [x] 66% ImGui::RenderCheckMark imgui_draw.lua:7144 [x] 90% ImGui::RenderArrowPointingAt imgui_draw.lua:7169 [x] 93% ImGui::RenderArrowDockMenu imgui.lua:4551 [x] 100% ImAcos01 imgui_draw.lua:7182 [x] 95% ImGui::RenderRectFilledInRangeH imgui_draw.lua:7198 - [x] 80% ImGui::RenderRectFilledWithHole imgui_draw.lua:7362 + [x] 80% ImGui::RenderRectFilledWithHole imgui_draw.lua:7355 [x] 81% ImGui::CalcRoundingFlagsForRectInRect imgui_draw.lua:7253 - [x] 70% ImGui::RenderColorRectWithAlphaCheckerboard imgui_draw.lua:7289 + [x] 79% ImGui::RenderColorRectWithAlphaCheckerboard imgui_draw.lua:7289 -- Decompression code [ ] stb_decompress_length @@ -1697,8 +1697,8 @@ imgui_tables.cpp -- Tables: Debugging [ ] DebugNodeTableGetSizingPolicyDesc - [x] 16% ImGui::DebugNodeTable imgui.lua:20778 - [x] 69% ImGui::DebugNodeTableSettings imgui.lua:20760 + [x] 16% ImGui::DebugNodeTable imgui.lua:20783 + [x] 69% ImGui::DebugNodeTableSettings imgui.lua:20765 -- Columns, BeginColumns, EndColumns, etc. [x] 24% ImGui::SetWindowClipRectBeforeSetChannel imgui_tables.lua:2070 @@ -1955,7 +1955,7 @@ imgui.h [ ] IM_MSVC_RUNTIME_CHECKS_RESTORE::HSV -- Multi-Select API flags and structures (ImGuiMultiSelectFlags, ImGuiSelectionRequestType, ImGuiSelectionRequest, ImGuiMultiSelectIO, ImGuiSelectionBasicStorage) - [x] 100% ImGuiSelectionBasicStorage::GetStorageIdFromIndex imgui_widgets.lua:9516 + [x] 100% ImGuiSelectionBasicStorage::GetStorageIdFromIndex imgui_widgets.lua:9503 -- Drawing API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawList, ImDrawData) [x] 14% ImDrawCmd::ImDrawCmd imgui_h.lua:507 @@ -1969,7 +1969,7 @@ imgui.h [x] 16% ImDrawList::PathLineTo imgui_internal.lua:1033 [x] 48% ImDrawList::PathLineToMergeDuplicate imgui_internal.lua:1043 [x] 94% ImDrawList::PathFillConvex imgui_internal.lua:1053 - [x] 94% ImDrawList::PathFillConcave imgui_draw.lua:7508 + [x] 94% ImDrawList::PathFillConcave imgui_draw.lua:7501 [x] 75% ImDrawList::PathStroke imgui_internal.lua:1061 [x] 89% ImDrawList::ChannelsSplit imgui_draw.lua:4377 [x] 80% ImDrawList::ChannelsMerge imgui_draw.lua:4378 @@ -2073,7 +2073,7 @@ imgui_internal.h [ ] ImModPositive [x] 100% ImDot imgui_internal.lua:453 [x] 98% ImRotate imgui_internal.lua:447 - [x] 100% ImLinearSweep imgui_widgets.lua:10652 + [x] 100% ImLinearSweep imgui_widgets.lua:10639 [x] 100% ImLinearRemapClamp imgui_internal.lua:399 [x] 97% ImMul imgui_internal.lua:460 [ ] ImIsFloatAboveGuaranteedIntegerPrecision @@ -2177,7 +2177,7 @@ imgui_internal.h [ ] ImGuiPackedDate::SubtractMonths -- ImDrawList support - [x] 27% ImDrawDataBuilder::ImDrawDataBuilder imgui_internal.lua:3015 + [x] 27% ImDrawDataBuilder::ImDrawDataBuilder imgui_internal.lua:3016 -- Style support [ ] ImGuiStyleVarInfo::GetVarPtr @@ -2185,7 +2185,7 @@ imgui_internal.h -- Widgets support: flags, enums, data structures [x] 21% ImGuiComboPreviewData::ImGuiComboPreviewData imgui_internal.lua:1665 - [x] 12% ImGuiMenuColumns::ImGuiMenuColumns imgui_internal.lua:2682 + [x] 12% ImGuiMenuColumns::ImGuiMenuColumns imgui_internal.lua:2683 [x] 20% ImGuiInputTextDeactivatedState::ImGuiInputTextDeactivatedState imgui_internal.lua:1751 [ ] ImGuiInputTextDeactivatedState::ClearFreeMemory [ ] ImGuiInputTextState::ClearText @@ -2200,10 +2200,10 @@ imgui_internal.h [ ] ImGuiPtrOrIndex::ImGuiPtrOrIndex -- Popup support - [x] 36% ImGuiPopupData::ImGuiPopupData imgui_internal.lua:3569 + [x] 36% ImGuiPopupData::ImGuiPopupData imgui_internal.lua:3570 -- Inputs support - [x] 9% ImGuiInputEvent::ImGuiInputEvent imgui_internal.lua:3363 + [x] 9% ImGuiInputEvent::ImGuiInputEvent imgui_internal.lua:3364 [x] 73% ImGuiKeyRoutingData::ImGuiKeyRoutingData imgui_internal.lua:1772 [x] 10% ImGuiKeyRoutingTable::ImGuiKeyRoutingTable imgui_internal.lua:1799 [ ] ImGuiKeyRoutingTable::Clear @@ -2252,18 +2252,18 @@ imgui_internal.h [x] 20% ImGuiDockContext::ImGuiDockContext imgui.lua:1040 -- Viewport support - [x] 36% ImGuiViewportP::ImGuiViewportP imgui_internal.lua:3102 + [x] 36% ImGuiViewportP::ImGuiViewportP imgui_internal.lua:3103 [-] ImGuiViewportP::~ImGuiViewportP c++-only - [x] 78% ImGuiViewportP::ClearRequestFlags imgui_internal.lua:3057 - [x] 94% ImGuiViewportP::CalcWorkRectPos imgui_internal.lua:3064 - [x] 98% ImGuiViewportP::CalcWorkRectSize imgui_internal.lua:3068 - [x] 87% ImGuiViewportP::UpdateWorkRect imgui_internal.lua:3073 - [x] 92% ImGuiViewportP::GetMainRect imgui_internal.lua:3080 - [x] 92% ImGuiViewportP::GetWorkRect imgui_internal.lua:3087 - [x] 96% ImGuiViewportP::GetBuildWorkRect imgui_internal.lua:3094 + [x] 78% ImGuiViewportP::ClearRequestFlags imgui_internal.lua:3058 + [x] 94% ImGuiViewportP::CalcWorkRectPos imgui_internal.lua:3065 + [x] 98% ImGuiViewportP::CalcWorkRectSize imgui_internal.lua:3069 + [x] 87% ImGuiViewportP::UpdateWorkRect imgui_internal.lua:3074 + [x] 92% ImGuiViewportP::GetMainRect imgui_internal.lua:3081 + [x] 92% ImGuiViewportP::GetWorkRect imgui_internal.lua:3088 + [x] 96% ImGuiViewportP::GetBuildWorkRect imgui_internal.lua:3095 -- Settings support - [x] 18% ImGuiWindowSettings::ImGuiWindowSettings imgui_internal.lua:2649 + [x] 18% ImGuiWindowSettings::ImGuiWindowSettings imgui_internal.lua:2650 [ ] ImGuiWindowSettings::GetName [x] 13% ImGuiSettingsHandler::ImGuiSettingsHandler imgui_h.lua:2898 @@ -2277,9 +2277,9 @@ imgui_internal.h [ ] ImGuiContextHook::ImGuiContextHook -- ImGuiWindowTempData, ImGuiWindow - [x] 92% ImGuiWindow::Rect imgui_internal.lua:2823 - [x] 84% ImGuiWindow::TitleBarRect imgui_internal.lua:2829 - [x] 91% ImGuiWindow::MenuBarRect imgui_internal.lua:2835 + [x] 92% ImGuiWindow::Rect imgui_internal.lua:2824 + [x] 84% ImGuiWindow::TitleBarRect imgui_internal.lua:2830 + [x] 91% ImGuiWindow::MenuBarRect imgui_internal.lua:2836 -- Tab bar, Tab item support [x] 50% ImGuiTabItem::ImGuiTabItem imgui_internal.lua:2191 @@ -2309,7 +2309,7 @@ imgui_internal.h [ ] GetPixelDensity [x] 55% GetRoundedFontSize imgui_internal.lua:658 [x] 15% GetForegroundDrawList imgui.lua:13675 - [x] 80% LocalizeGetMsg imgui_internal.lua:3673 + [x] 80% LocalizeGetMsg imgui_internal.lua:3674 [ ] ScrollToBringRectIntoView [ ] GetItemStatusFlags [ ] GetActiveID @@ -2338,22 +2338,22 @@ imgui_internal.h [x] 91% GetBoxSelectState imgui_internal.lua:2065 [x] 95% GetMultiSelectState imgui_internal.lua:2068 [ ] GetCurrentTabBar - [x] 35% TabBarGetTabOrder imgui_widgets.lua:11210 + [x] 35% TabBarGetTabOrder imgui_widgets.lua:11197 [-] RenderNavHighlight obsolete - [x] 100% TempInputIsActive imgui_internal.lua:3680 - [x] 88% GetInputTextState imgui_internal.lua:3688 + [x] 100% TempInputIsActive imgui_internal.lua:3681 + [x] 88% GetInputTextState imgui_internal.lua:3689 [ ] IsItemActiveAsInputText [x] 80% SetNextItemColorMarker imgui_internal.lua:1083 -- ImFontLoader - [x] 6% ImFontLoader::ImFontLoader imgui_internal.lua:3164 + [x] 6% ImFontLoader::ImFontLoader imgui_internal.lua:3165 -- ImFontAtlas internal API [-] operator== c++-only [-] operator!= c++-only - [x] 75% ImFontAtlasRectId_GetIndex imgui_internal.lua:3216 - [x] 62% ImFontAtlasRectId_GetGeneration imgui_internal.lua:3220 - [x] 77% ImFontAtlasRectId_Make imgui_internal.lua:3225 + [x] 75% ImFontAtlasRectId_GetIndex imgui_internal.lua:3217 + [x] 62% ImFontAtlasRectId_GetGeneration imgui_internal.lua:3221 + [x] 77% ImFontAtlasRectId_Make imgui_internal.lua:3226 [x] 18% ImFontAtlasBuilder::ImFontAtlasBuilder imgui_internal.lua:1184 ==================================================================================================== @@ -2527,7 +2527,7 @@ Struct fields (name found in the port / total; missing listed). Field names are ImGuiBoxSelectState 16 / 16 ImGuiColorMod 2 / 2 ImGuiComboPreviewData 6 / 9 missing: BackupWorkRectMaxX, BackupContentRectMaxX, WithinPreview - ImGuiContext 312 / 338 missing: TestEngineHookItems, CurrentPixelDensity, TestEngine, InputEventsTrail, MixedValueLabel, DebugBreakInShortcutRouting, DebugLocateId, NavJustMovedToIsInit, DragDropPayloadBufHeap, DragDropPayloadBufLocal, ClipboardHandlerData, SessionDate, DemoMarkerCallback, DebugLogIndex, DebugLogSkippedErrors, DebugLocateFrames, DebugBreakInLocateId, DebugBreakKeyChord, DebugItemPickerActive, DebugItemPickerMouseButton, DebugItemPickerBreakId, DebugFlashStyleColorTime, DebugFlashStyleColorBackup, DebugDrawIdConflictsAliveCount, DebugDrawIdConflictsHighlightSet, TempKeychordName + ImGuiContext 313 / 338 missing: TestEngineHookItems, CurrentPixelDensity, TestEngine, InputEventsTrail, DebugBreakInShortcutRouting, DebugLocateId, NavJustMovedToIsInit, DragDropPayloadBufHeap, DragDropPayloadBufLocal, ClipboardHandlerData, 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 diff --git a/imgui.lua b/imgui.lua index d31e5cf..91ef3ab 100644 --- a/imgui.lua +++ b/imgui.lua @@ -10459,7 +10459,7 @@ local function RenderWindowOuterBorders(window) if g.Style.FrameBorderSize > 0 and (bit32.band(window.Flags, ImGuiWindowFlags.NoTitleBar) == 0) and not window.DockIsActive then local y = window.Pos.y + window.TitleBarHeight - 1 - window.DrawList:AddLineH(window.Pos.x + border_size * 0.5, window.Pos.x + window.Size.x - border_size * 0.5, y, border_col, g.Style.FrameBorderSize) + window.DrawList:AddLineH(window.Pos.x + border_size, window.Pos.x + window.Size.x - border_size, y, border_col, g.Style.FrameBorderSize, ImDrawFlags.StrokeCenterBiased) end end @@ -10540,7 +10540,7 @@ local function RenderWindowDecorations(window, title_bar_rect, title_bar_is_high menu_bar_rect:ClipWith(window:Rect()) -- Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them. window.DrawList:AddRectFilled(menu_bar_rect.Min, menu_bar_rect.Max, ImGui.GetColorU32(ImGuiCol.MenuBarBg), (bit32.band(flags, ImGuiWindowFlags.NoTitleBar) ~= 0) and window_rounding or 0.0, ImDrawFlags.RoundTop) if style.FrameBorderSize > 0.0 and menu_bar_rect.Max.y < window.Pos.y + window.Size.y then - window.DrawList:AddLineH(menu_bar_rect.Min.x + window_border_size * 0.5, menu_bar_rect.Max.x - window_border_size * 0.5, menu_bar_rect.Max.y, ImGui.GetColorU32(ImGuiCol.Border), style.FrameBorderSize) + window.DrawList:AddLineH(menu_bar_rect.Min.x + window_border_size, menu_bar_rect.Max.x - window_border_size, menu_bar_rect.Max.y, ImGui.GetColorU32(ImGuiCol.Border), style.FrameBorderSize, ImDrawFlags.StrokeCenterBiased) end end @@ -19039,7 +19039,7 @@ function ImGui.RenderDimmedBackgrounds() window.DrawList:ChannelsMerge() if window.DrawList.CmdBuffer.Size == 0 then window.DrawList:AddDrawCmd() end window.DrawList:PushClipRect(viewport.Pos, viewport.Pos + viewport.Size) - window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(ImGuiCol.NavWindowingHighlight, g.NavWindowingHighlightAlpha), window.WindowRounding, 0, 3.0) -- FIXME-DPI + window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(ImGuiCol.NavWindowingHighlight, g.NavWindowingHighlightAlpha), window.WindowRounding, 3.0) -- FIXME-DPI window.DrawList:PopClipRect() end end @@ -20685,8 +20685,7 @@ function ImGui.DebugNodeDrawList(window, viewport, draw_list, label) else local cr = pcmd.ClipRect local open = ImGui.TreeNode(cmd_n, "DrawCmd:%5d tris, Tex %s, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)", math.floor(pcmd.ElemCount / 3), tostring(pcmd.TexRef and (pcmd.TexRef._TexID or pcmd.TexRef._TexData)), cr.x, cr.y, cr.z, cr.w) - local function ShowMesh(show_mesh, show_aabb) - if not fg_draw_list then return end + local function ShowMeshImpl(show_mesh, show_aabb) local clip_rect = ImRect(cr.x, cr.y, cr.z, cr.w) local vtxs_rect = ImRect(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX) local base = pcmd.IdxOffset @@ -20705,6 +20704,12 @@ function ImGui.DebugNodeDrawList(window, viewport, draw_list, label) fg_draw_list:AddRect(ImTrunc(vtxs_rect.Min), ImTrunc(vtxs_rect.Max), IM_COL32(0, 255, 255, 255)) -- In cyan: bounding box of triangles end end + local function ShowMesh(show_mesh, show_aabb) -- DebugNodeDrawCmdShowMeshAndBoundingBox() + if not fg_draw_list then return end + fg_draw_list:PushDrawFlag(ImDrawFlags.AALines, false) -- Disable AA on triangle outlines is more readable for very large and thin triangles. + ShowMeshImpl(show_mesh, show_aabb) + fg_draw_list:PopDrawFlag() + end if ImGui.IsItemHovered() and (cfg.ShowDrawCmdMesh or cfg.ShowDrawCmdBoundingBoxes) then ShowMesh(cfg.ShowDrawCmdMesh, cfg.ShowDrawCmdBoundingBoxes) end if open then ImGui.Selectable(string.format("Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d", pcmd.ElemCount, pcmd.VtxOffset, pcmd.IdxOffset)) @@ -20733,8 +20738,8 @@ function ImGui.DebugNodeTabBar(tab_bar, label) if is_active and ImGui.IsItemHovered() then local dl = FG(tab_bar.Window) dl:AddRect(tab_bar.BarRect.Min, tab_bar.BarRect.Max, IM_COL32(255, 255, 0, 255)) - dl:AddLine(ImVec2(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Min.y), ImVec2(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Max.y), IM_COL32(0, 255, 0, 255)) - dl:AddLine(ImVec2(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Min.y), ImVec2(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Max.y), IM_COL32(0, 255, 0, 255)) + dl:AddLineV(tab_bar.ScrollingRectMinX, tab_bar.BarRect.Min.y, tab_bar.BarRect.Max.y, IM_COL32(0, 255, 0, 255)) + dl:AddLineV(tab_bar.ScrollingRectMaxX, tab_bar.BarRect.Min.y, tab_bar.BarRect.Max.y, IM_COL32(0, 255, 0, 255)) end if open then for tab_n, tab in tab_bar.Tabs:iter() do diff --git a/imgui_draw.lua b/imgui_draw.lua index 9a9a20f..9710ff7 100644 --- a/imgui_draw.lua +++ b/imgui_draw.lua @@ -7157,7 +7157,7 @@ function ImGui.RenderCheckMark(draw_list, pos, col, sz) draw_list:PathLineTo(p) p.x = bx + third * 2.0; p.y = by - third * 2.0 draw_list:PathLineTo(p) - draw_list:PathStroke(col, thickness) + draw_list:PathStroke(col, thickness, ImDrawFlags.AALineEnds) end -- Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side. @@ -7243,7 +7243,7 @@ function ImGui.RenderRectFilledInRangeH(draw_list, rect, col, fill_x0, fill_x1, end end - draw_list:PathFillConvex(col) + draw_list:PathFillConvex(col, ImDrawFlags.JoinMiter) end --- @param r_in ImRect @@ -7277,16 +7277,16 @@ end -- Helper for ColorPicker4() -- NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that. -- Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding altogether. --- FIXME: uses ImGui.GetColorU32 --- @param draw_list ImDrawList --- @param p_min ImVec2 --- @param p_max ImVec2 --- @param col ImU32 +--- @param alpha float --- @param grid_step float --- @param grid_off ImVec2 --- @param rounding? float --- @param flags? ImDrawFlags -function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col, grid_step, grid_off, rounding, flags) +function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col, alpha, grid_step, grid_off, rounding, flags) if rounding == nil then rounding = 0.0 end if flags == nil then flags = 0 end @@ -7295,60 +7295,53 @@ function ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, p_min, p_max, col end if bit32.rshift(bit32.band(col, IM_COL32_A_MASK), IM_COL32_A_SHIFT) < 0xFF then - local col_bg1 = ImGui.GetColorU32(ImStd.ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col), nil, true) - local col_bg2 = ImGui.GetColorU32(ImStd.ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col), nil, true) - draw_list:AddRectFilled(p_min, p_max, col_bg1, rounding, flags) + IM_ASSERT(alpha >= 0.0 and alpha <= 1.0) + local a_mask = bit32.lshift(ImTrunc(alpha * 255.0), IM_COL32_A_SHIFT) + local col_bg1 = bit32.bor(bit32.band(ImStd.ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col), bit32.bnot(IM_COL32_A_MASK)), a_mask) + local col_bg2 = bit32.bor(bit32.band(ImStd.ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col), bit32.bnot(IM_COL32_A_MASK)), a_mask) + local dual_layer = (alpha == 1.0) -- Dual layer is faster but incorrect if blending. + if dual_layer then + draw_list:AddRectFilled(p_min, p_max, col_bg1, rounding, flags) + end local yi = 0 local y = p_min.y + grid_off.y - local x_start - local x - local cell_flags while y < p_max.y do - repeat - local y1 = ImClamp(y, p_min.y, p_max.y) - local y2 = ImMin(y + grid_step, p_max.y) + local y1 = ImClamp(ImTrunc(y), p_min.y, p_max.y) + local y2 = ImMin(ImTrunc(y + grid_step), p_max.y) + if y2 > y1 then + local x_start_off = dual_layer and (((yi + 1) % 2) * grid_step) or 0.0 + local x_step = dual_layer and (grid_step * 2.0) or grid_step + local xi = 0 + local x = p_min.x + grid_off.x + x_start_off + while x < p_max.x do + local x1 = ImClamp(ImTrunc(x), p_min.x, p_max.x) + local x2 = ImMin(ImTrunc(x + grid_step), p_max.x) + if x2 > x1 then + local cell_flags = ImDrawFlags.RoundNone -- FIXME: Could use CalcRoundingFlagsForRectInRect() + if y1 <= p_min.y then + if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundTopLeft) end + if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundTopRight) end + end + if y2 >= p_max.y then + if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundBottomLeft) end + if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundBottomRight) end + end - if y2 <= y1 then - break + -- Combine flags + if flags == ImDrawFlags.RoundNone or cell_flags == ImDrawFlags.RoundNone then + cell_flags = ImDrawFlags.RoundNone + else + cell_flags = bit32.band(cell_flags, flags) + end + local col_bg + if dual_layer then col_bg = col_bg2 elseif (yi + xi) % 2 == 1 then col_bg = col_bg2 else col_bg = col_bg1 end + draw_list:AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg, rounding, cell_flags) + end + x = x + x_step + xi = xi + 1 + end end - - x_start = p_min.x + grid_off.x + ((yi + 1) % 2) * grid_step - x = x_start - while x < p_max.x do - repeat - local x1 = ImClamp(x, p_min.x, p_max.x) - local x2 = ImMin(x + grid_step, p_max.x) - - if x2 <= x1 then - break - end - - cell_flags = ImDrawFlags.RoundNone -- FIXME: Could use CalcRoundingFlagsForRectInRect() - if y1 <= p_min.y then - if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundTopLeft) end - if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundTopRight) end - end - if y2 >= p_max.y then - if x1 <= p_min.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundBottomLeft) end - if x2 >= p_max.x then cell_flags = bit32.bor(cell_flags, ImDrawFlags.RoundBottomRight) end - end - - -- Combine flags - if flags == ImDrawFlags.RoundNone or cell_flags == ImDrawFlags.RoundNone then - cell_flags = ImDrawFlags.RoundNone - else - cell_flags = bit32.band(cell_flags, flags) - end - draw_list:AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding, cell_flags) - - until true - - x = x + grid_step * 2.0 - end - - until true - y = y + grid_step yi = yi + 1 end diff --git a/imgui_internal.lua b/imgui_internal.lua index 2583dcd..3c7b522 100644 --- a/imgui_internal.lua +++ b/imgui_internal.lua @@ -2508,6 +2508,7 @@ function ImGuiContext(shared_font_atlas) -- TODO: tidy up / complete this struct DisabledAlphaBackup = 0.0, -- Backup for style.Alpha for BeginDisabled() DisabledStackSize = 0, + MixedValueLabel = "-", -- Value replacement when displaying a mixed value. ItemFlagsStack = ImVector(), -- Stack for PushItemFlag()/PopItemFlag() - inherited by Begin() GroupStack = ImVector(), -- Stack for BeginGroup()/EndGroup() - not inherited by Begin() diff --git a/imgui_widgets.lua b/imgui_widgets.lua index 21d0aa6..458a38f 100644 --- a/imgui_widgets.lua +++ b/imgui_widgets.lua @@ -934,7 +934,7 @@ function ImGui.CloseButton(id, pos) window.DrawList:AddRectFilled(bb.Min, bb.Max, bg_col) end - local cross_center = bb:GetCenter() - ImVec2(0.5, 0.5) + local cross_center = bb:GetCenter() local cross_extent = g.FontSize * 0.5 * 0.7071 - 1 local cross_col = ImGui.GetColorU32(ImGuiCol.Text) local cross_thickness = 1.0 -- FIXME-DPI @@ -944,32 +944,6 @@ function ImGui.CloseButton(id, pos) return pressed end ---- @return bool -function ImGui.CollapseButton(id, pos) - local g = GImGui - - local window = g.CurrentWindow - - local bb = ImRect(pos, pos + ImVec2(g.FontSize, g.FontSize)) - - local is_clipped = not ImGui.ItemAdd(bb, id) - - local pressed, hovered = ImGui.ButtonBehavior(bb, id) - - -- Render - if hovered then - window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(ImGuiCol.ButtonHovered)) - end - - if window.Collapsed then - ImGui.RenderArrow(window.DrawList, bb.Min, ImGui.GetColorU32(ImGuiCol.Text), ImGuiDir.Right, 1) - else - ImGui.RenderArrow(window.DrawList, bb.Min, ImGui.GetColorU32(ImGuiCol.Text), ImGuiDir.Down, 1) - end - - return pressed -end - --- @param window ImGuiWindow --- @param axis ImGuiAxis --- @return ImGuiID @@ -1874,7 +1848,7 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) local sep1_x1 = pos.x local sep2_x2 = bb.Max.x - local seps_y = ImTrunc((bb.Min.y + bb.Max.y) * 0.5 + 0.999) + local seps_y = ImTrunc((bb.Min.y + bb.Max.y) * 0.5) + 1.0 local label_avail_w = ImMax(0.0, sep2_x2 - sep1_x1 - padding.x * 2.0) local label_pos = ImVec2(pos.x + padding.x + ImMax(0.0, (label_avail_w - label_size.x - extra_w) * style.SeparatorTextAlign.x), pos.y + text_baseline_y) -- FIXME-ALIGN @@ -1889,11 +1863,11 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) local sep2_x1 = label_pos.x + label_size.x + extra_w + style.ItemSpacing.x if sep1_x2 > sep1_x1 and separator_thickness > 0.0 then - window.DrawList:AddLineH(sep1_x1, sep1_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep1_x1, sep1_x2, seps_y, separator_col, separator_thickness, ImDrawFlags.StrokeCenterBiased) end if sep2_x2 > sep2_x1 and separator_thickness > 0.0 then - window.DrawList:AddLineH(sep2_x1, sep2_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep2_x1, sep2_x2, seps_y, separator_col, separator_thickness, ImDrawFlags.StrokeCenterBiased) end if g.LogEnabled then @@ -1907,7 +1881,7 @@ function ImGui.SeparatorTextEx(id, label, label_end, extra_w) end if separator_thickness > 0.0 then - window.DrawList:AddLineH(sep1_x1, sep2_x2, seps_y, separator_col, separator_thickness) + window.DrawList:AddLineH(sep1_x1, sep2_x2, seps_y, separator_col, separator_thickness, ImDrawFlags.StrokeCenterBiased) end end end @@ -6236,10 +6210,10 @@ function ImGui.InputTextEx(label, hint, buf, buf_size, size_arg, flags, callback local cursor_is_visible = (not g.IO.ConfigInputTextCursorBlink) or (state.CursorAnim <= 0.0) or (ImFmod(state.CursorAnim, 1.20) <= 0.80) local cursor_screen_pos = ImTrunc(draw_pos + cursor_offset - draw_scroll) - local cursor_screen_rect = ImRect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5, cursor_screen_pos.x + 1.0, cursor_screen_pos.y - 1.5) + local cursor_screen_rect = ImRect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 1.0, cursor_screen_pos.x + 1.0, cursor_screen_pos.y - 1.0) if cursor_is_visible and cursor_screen_rect:Overlaps(clip_rect) then - draw_window.DrawList:AddLineV(cursor_screen_rect.Min.x, cursor_screen_rect.Min.y, cursor_screen_rect.Max.y, ImGui.GetColorU32(ImGuiCol.InputTextCursor), style.InputTextCursorSize) + draw_window.DrawList:AddLineV(cursor_screen_rect.Min.x, cursor_screen_rect.Min.y, cursor_screen_rect.Max.y, ImGui.GetColorU32(ImGuiCol.InputTextCursor), style.InputTextCursorSize, ImDrawFlags.StrokeInside) end -- Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.) @@ -7117,7 +7091,7 @@ function ImGui.ColorPicker4(label, col, flags, ref_col) if alpha_bar then local alpha = ImSaturate(col[4]) local bar1_bb = ImRect(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size) - ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb:GetWidth() / 2.0, ImVec2(0.0, 0.0)) + ImGui.RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, IM_COL32(0, 0, 0, 0), style.Alpha, bar1_bb:GetWidth() / 2.0, ImVec2(0.0, 0.0)) draw_list:AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, bit32.band(user_col32_striped_of_alpha, bit32.bnot(IM_COL32_A_MASK)), bit32.band(user_col32_striped_of_alpha, bit32.bnot(IM_COL32_A_MASK))) local bar1_line_y = IM_ROUND(picker_pos.y + (1.0 - alpha) * sv_picker_size) @@ -7195,36 +7169,45 @@ function ImGui.ColorButton(desc_id, col, flags, size_arg) local col_rgb_without_alpha = ImVec4(col_rgb.x, col_rgb.y, col_rgb.z, 1.0) local grid_step = ImMin(size.x, size.y) / 2.99 local rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5) - local bb_inner = ImRect() - ImRect_Copy(bb_inner, bb) - local off = 0.0 - if bit32.band(flags, ImGuiColorEditFlags.NoBorder) == 0 then - off = -0.75 - bb_inner:Expand(off) + local is_mixed = bit32.band(g.LastItemData.ItemFlags, ImGuiItemFlags.MixedValue) ~= 0 + + local backup_alpha = g.Style.Alpha + if g.DisabledStackSize > 0 then + g.Style.Alpha = g.DisabledAlphaBackup -- Cancel out effect of BeginDisabled() for color swatches. end - if bit32.band(flags, ImGuiColorEditFlags.AlphaPreviewHalf) ~= 0 and col_rgb.w < 1.0 then - local mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5) - if bit32.band(flags, ImGuiColorEditFlags.AlphaNoBg) == 0 then - ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, ImGui.GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawFlags.RoundRight) - else - window.DrawList:AddRectFilled(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, ImGui.GetColorU32(col_rgb), rounding, ImDrawFlags.RoundRight) + if is_mixed then + window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(ImGuiCol.FrameBg), rounding) + ImGui.PushStyleColor(ImGuiCol.Text, g.Style.Colors[ImGuiCol.TextDisabled]) -- ImGuiCol_TextMixedValue + if g.MixedValueLabel ~= nil then + ImGui.RenderTextClipped(ImVec2(bb.Min.x, bb.Min.y + g.Style.FramePadding.y), bb.Max, g.MixedValueLabel, nil, nil, ImVec2(0.5, 0.0)) end - window.DrawList:AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), ImGui.GetColorU32(col_rgb_without_alpha), rounding, ImDrawFlags.RoundLeft) + ImGui.PopStyleColor() + elseif bit32.band(flags, ImGuiColorEditFlags.AlphaPreviewHalf) ~= 0 and col_rgb.w < 1.0 then + local mid_x = IM_ROUND((bb.Min.x + bb.Max.x) * 0.5) + if bit32.band(flags, ImGuiColorEditFlags.AlphaNoBg) == 0 then + ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, ImVec2(bb.Min.x + grid_step, bb.Min.y), bb.Max, ImGui.ColorConvertFloat4ToU32(col_rgb), g.Style.Alpha, grid_step, ImVec2(-grid_step, 0.0), rounding, ImDrawFlags.RoundRight) + else + window.DrawList:AddRectFilled(ImVec2(bb.Min.x + grid_step, bb.Min.y), bb.Max, ImGui.GetColorU32(col_rgb), rounding, ImDrawFlags.RoundRight) + end + window.DrawList:AddRectFilled(bb.Min, ImVec2(mid_x, bb.Max.y), ImGui.GetColorU32(col_rgb_without_alpha), rounding, ImDrawFlags.RoundLeft) else -- Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha local col_source = (bit32.band(flags, ImGuiColorEditFlags.AlphaOpaque) ~= 0) and col_rgb_without_alpha or col_rgb if col_source.w < 1.0 and bit32.band(flags, ImGuiColorEditFlags.AlphaNoBg) == 0 then - ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, bb_inner.Min, bb_inner.Max, ImGui.GetColorU32(col_source), grid_step, ImVec2(off, off), rounding) + ImGui.RenderColorRectWithAlphaCheckerboard(window.DrawList, bb.Min, bb.Max, ImGui.ColorConvertFloat4ToU32(col_source), g.Style.Alpha, grid_step, ImVec2(0.0, 0.0), rounding) else - window.DrawList:AddRectFilled(bb_inner.Min, bb_inner.Max, ImGui.GetColorU32(col_source), rounding) + window.DrawList:AddRectFilled(bb.Min, bb.Max, ImGui.GetColorU32(col_source), rounding) end end + if g.DisabledStackSize > 0 then + g.Style.Alpha = backup_alpha + end ImGui.RenderNavCursor(bb, id) if bit32.band(flags, ImGuiColorEditFlags.NoBorder) == 0 then if g.Style.FrameBorderSize > 0.0 then ImGui.RenderFrameBorder(bb.Min, bb.Max, rounding) else - window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(ImGuiCol.FrameBg), rounding) -- Color buttons are often in need of some sort of border + window.DrawList:AddRect(bb.Min, bb.Max, ImGui.GetColorU32(ImGuiCol.FrameBg), rounding, 1.0 * ImTrunc(g.Style._MainScale)) -- Color buttons are often in need of some sort of border -- FIXME-DPI end end @@ -7907,23 +7890,27 @@ function ImGui.TreeNodeDrawLineToChildNode(target_pos) -- FIXME: Could this be simplified using new stroke flags? local parent_data = g.TreeNodeStack.Data[g.TreeNodeStack.Size] - local x1 = ImTrunc(parent_data.DrawLinesX1) + local half_size = g.Style.TreeLinesSize * 0.5 + local x1 = ImTrunc(parent_data.DrawLinesX1 - half_size) + half_size -- Draw line centered at X1, but snap to pixels boundary. local x2 = ImTrunc(target_pos.x - g.Style.ItemInnerSpacing.x) - local y = ImTrunc(target_pos.y) + local y = ImTrunc(target_pos.y - half_size) + half_size local rounding = (g.Style.TreeLinesRounding > 0.0) and ImMin(x2 - x1, g.Style.TreeLinesRounding) or 0.0 parent_data.DrawLinesToNodesY2 = ImMax(parent_data.DrawLinesToNodesY2, y - rounding) if x1 >= x2 then return end - if rounding > 0.0 then - x1 = x1 + 0.5 + rounding + if rounding > 0.0 and rounding > half_size then + x1 = x1 + rounding window.DrawList:PathArcToFast(ImVec2(x1, y - rounding), rounding, 6, 3) if x1 < x2 then window.DrawList:PathLineTo(ImVec2(x2, y)) end window.DrawList:PathStroke(ImGui.GetColorU32(ImGuiCol.TreeLines), g.Style.TreeLinesSize) else - window.DrawList:AddLineH(x1, x2, y, ImGui.GetColorU32(ImGuiCol.TreeLines), g.Style.TreeLinesSize) + -- We use AddLine() instead of AddLineH() as we provide coordinates for line center, + -- in order to make the code use same coordinates for both rounded and non-rounded version. (FIXME-OPT) + x1 = x1 + half_size -- Avoid overdraw + window.DrawList:AddLine(ImVec2(x1, y), ImVec2(x2, y), ImGui.GetColorU32(ImGuiCol.TreeLines), g.Style.TreeLinesSize) end end @@ -11905,7 +11892,7 @@ function ImGui.TabItemBackground(draw_list, bb, flags, col) draw_list:PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9) draw_list:PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12) draw_list:PathLineTo(ImVec2(bb.Max.x, y2)) - draw_list:PathStroke(ImGui.GetColorU32(ImGuiCol.Border), g.Style.TabBorderSize) + draw_list:PathStroke(ImGui.GetColorU32(ImGuiCol.Border), g.Style.TabBorderSize, ImDrawFlags.StrokeCenterBiased) -- Use _StrokeInside? end end diff --git a/tools/test/love/run.sh b/tools/test/love/run.sh index 71d97e5..d291529 100755 --- a/tools/test/love/run.sh +++ b/tools/test/love/run.sh @@ -4,4 +4,4 @@ set -e cd "$(dirname "$0")/../../.." python3 tools/bundle.py --target love >/dev/null nix-shell -p luajit --run "luajit tools/test/love/t_drawhash.lua 150 Widgets,Basic && luajit tools/test/love/t_drawhash.lua 150 all && luajit tools/test/love/t_examples.lua" -echo "expected (Luau, tools/test/scripts/t_drawhash.luau): 1746012297 / 1639427837" +echo "expected (Luau, tools/test/scripts/t_drawhash.luau): 154977593 / 62816915"