From 0e355af09e8dd949c12f9069090c9811d6b3fb2e Mon Sep 17 00:00:00 2001 From: ocornut Date: Wed, 24 Jun 2026 18:33:43 +0200 Subject: [PATCH] RenderNavCursor: take rounding as input. Removed ImGuiNavRenderCursorFlags_NoRounding. Toward #7589 --- imgui.cpp | 10 ++++++++-- imgui_internal.h | 4 ++-- imgui_tables.cpp | 2 +- imgui_widgets.cpp | 6 +++--- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/imgui.cpp b/imgui.cpp index 93d188782..c9b23bc4f 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -4026,7 +4026,7 @@ void ImGui::RenderColorComponentMarker(const ImRect& bb, ImU32 col, float roundi RenderRectFilledInRangeH(window->DrawList, bb, col, bb.Min.x, ImMin(bb.Min.x + g.Style.ColorMarkerSize, bb.Max.x), rounding); } -void ImGui::RenderNavCursor(const ImRect& bb, ImGuiID id, ImGuiNavRenderCursorFlags flags) +void ImGui::RenderNavCursor(const ImRect& bb, ImGuiID id, ImGuiNavRenderCursorFlags flags, float rounding) { ImGuiContext& g = *GImGui; if (id != g.NavId) @@ -4042,7 +4042,13 @@ void ImGui::RenderNavCursor(const ImRect& bb, ImGuiID id, ImGuiNavRenderCursorFl if (window->DC.NavHideHighlightOneFrame) return; - float rounding = (flags & ImGuiNavRenderCursorFlags_NoRounding) ? 0.0f : g.Style.FrameRounding; +#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + if (rounding < 0.0f && (flags & ImGuiNavRenderCursorFlags_NoRounding)) + rounding = 0.0f; +#endif + if (rounding < 0.0f) + rounding = g.Style.FrameRounding; + ImRect display_rect = bb; display_rect.ClipWith(window->ClipRect); const float scale_factor = GetScale(); // FIXME-DPI diff --git a/imgui_internal.h b/imgui_internal.h index 0bec47037..df7ea651e 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -1728,8 +1728,8 @@ enum ImGuiNavRenderCursorFlags_ ImGuiNavRenderCursorFlags_None = 0, ImGuiNavRenderCursorFlags_Compact = 1 << 1, // Compact highlight, no padding/distance from focused item ImGuiNavRenderCursorFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) even when g.NavCursorVisible == false, aka even when using the mouse. - ImGuiNavRenderCursorFlags_NoRounding = 1 << 3, #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + ImGuiNavRenderCursorFlags_NoRounding = 1 << 3, ImGuiNavHighlightFlags_None = ImGuiNavRenderCursorFlags_None, // Renamed in 1.91.4 ImGuiNavHighlightFlags_Compact = ImGuiNavRenderCursorFlags_Compact, // Renamed in 1.91.4 ImGuiNavHighlightFlags_AlwaysDraw = ImGuiNavRenderCursorFlags_AlwaysDraw, // Renamed in 1.91.4 @@ -3679,7 +3679,7 @@ namespace ImGui IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f); IMGUI_API void RenderColorComponentMarker(const ImRect& bb, ImU32 col, float rounding); IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0); - IMGUI_API void RenderNavCursor(const ImRect& bb, ImGuiID id, ImGuiNavRenderCursorFlags flags = ImGuiNavRenderCursorFlags_None); // Navigation highlight + IMGUI_API void RenderNavCursor(const ImRect& bb, ImGuiID id, ImGuiNavRenderCursorFlags flags = ImGuiNavRenderCursorFlags_None, float rounding = -1.0f); // Navigation highlight #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS inline void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavRenderCursorFlags flags = ImGuiNavRenderCursorFlags_None) { RenderNavCursor(bb, id, flags); } // Renamed in 1.91.4 #endif diff --git a/imgui_tables.cpp b/imgui_tables.cpp index 128cd0136..d59658942 100644 --- a/imgui_tables.cpp +++ b/imgui_tables.cpp @@ -3395,7 +3395,7 @@ void ImGui::TableHeader(const char* label) if ((table->RowFlags & ImGuiTableRowFlags_Headers) == 0) TableSetBgColor(ImGuiTableBgTarget_CellBg, GetColorU32(ImGuiCol_TableHeaderBg), table->CurrentColumn); } - RenderNavCursor(bb, id, ImGuiNavRenderCursorFlags_Compact | ImGuiNavRenderCursorFlags_NoRounding); + RenderNavCursor(bb, id, ImGuiNavRenderCursorFlags_Compact, 0.0f); if (held) table->HeldHeaderColumn = (ImGuiTableColumnIdx)column_n; window->DC.CursorPos.y -= g.Style.ItemSpacing.y * 0.5f; diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index 3fb634be5..045e8096d 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -7118,7 +7118,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header); RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, false, 0.0f); } - RenderNavCursor(frame_bb, id, nav_render_cursor_flags | ImGuiNavRenderCursorFlags_NoRounding); + RenderNavCursor(frame_bb, id, nav_render_cursor_flags, 0.0f); if (span_all_columns && !span_all_columns_label) TablePopBackgroundChannel(); if (flags & ImGuiTreeNodeFlags_Bullet) @@ -7502,10 +7502,10 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl } if (g.NavId == id) { - ImGuiNavRenderCursorFlags nav_render_cursor_flags = ImGuiNavRenderCursorFlags_Compact | ImGuiNavRenderCursorFlags_NoRounding; + ImGuiNavRenderCursorFlags nav_render_cursor_flags = ImGuiNavRenderCursorFlags_Compact; if (is_multi_select) nav_render_cursor_flags |= ImGuiNavRenderCursorFlags_AlwaysDraw; // Always show the nav rectangle - RenderNavCursor(bb, id, nav_render_cursor_flags); + RenderNavCursor(bb, id, nav_render_cursor_flags, 0.0f); } }