From 64a51327d3d87b98644311600cea202df6da9809 Mon Sep 17 00:00:00 2001 From: omar Date: Tue, 3 Oct 2017 13:25:40 -0700 Subject: [PATCH] Nav: Added NavMoveResultParentId internal info to record when the parent/context of a given NavId. Useful for various algorithms (currently looking at range selection stuff) (#787) --- imgui.cpp | 2 ++ imgui_internal.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/imgui.cpp b/imgui.cpp index 711b9ab5..112ce24e 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -2220,6 +2220,7 @@ bool ImGui::ItemAdd(const ImRect& bb, const ImGuiID* id, const ImRect* nav_bb_ar if (new_best) { g.NavMoveResultId = *id; + g.NavMoveResultParentId = window->IDStack.back(); g.NavMoveResultRectRel = nav_bb_rel; } @@ -2856,6 +2857,7 @@ static void NavUpdate() // Reset search g.NavMoveResultId = 0; + g.NavMoveResultParentId = 0; g.NavMoveResultDistAxial = g.NavMoveResultDistBox = g.NavMoveResultDistCenter = FLT_MAX; // When we have manually scrolled (without using navigation) and NavId becomes out of bounds, we clamp its bounding box (used for search) to the visible area to restart navigation within visible items diff --git a/imgui_internal.h b/imgui_internal.h index 8c3a1764..3798e7fa 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -480,6 +480,7 @@ struct ImGuiContext ImGuiDir NavMoveDir; // West/East/North/South ImGuiDir NavMoveDirLast; // ImGuiID NavMoveResultId; // Best move request candidate + ImGuiID NavMoveResultParentId; // float NavMoveResultDistBox; // Best move request candidate box distance to current NavId float NavMoveResultDistCenter; // Best move request candidate center distance to current NavId float NavMoveResultDistAxial; @@ -590,6 +591,7 @@ struct ImGuiContext NavMoveRequestForwardStep = 0; NavMoveDir = NavMoveDirLast = ImGuiDir_None; NavMoveResultId = 0; + NavMoveResultParentId = 0; NavMoveResultDistBox = NavMoveResultDistCenter = NavMoveResultDistAxial = 0.0f; SetNextWindowPosVal = ImVec2(0.0f, 0.0f);