mirror of
https://github.com/ocornut/imgui.git
synced 2026-01-09 23:54:20 +00:00
Nav: fixed scoring when using PageUp/PageDown from a focused item which is outside of visible boundaries. (#9079)
We only use ImGuiNavMoveFlags_AlsoScoreVisibleSet when starting point is visible.
This commit is contained in:
parent
0faa0dba15
commit
4ab86e1d61
2 changed files with 12 additions and 6 deletions
16
imgui.cpp
16
imgui.cpp
|
|
@ -13891,11 +13891,17 @@ void ImGui::NavUpdateCreateMoveRequest()
|
||||||
{
|
{
|
||||||
ImRect nav_rect_rel = !window->NavRectRel[g.NavLayer].IsInverted() ? window->NavRectRel[g.NavLayer] : ImRect(0, 0, 0, 0);
|
ImRect nav_rect_rel = !window->NavRectRel[g.NavLayer].IsInverted() ? window->NavRectRel[g.NavLayer] : ImRect(0, 0, 0, 0);
|
||||||
scoring_rect = WindowRectRelToAbs(window, nav_rect_rel);
|
scoring_rect = WindowRectRelToAbs(window, nav_rect_rel);
|
||||||
if (scoring_page_offset_y != 0.0f)
|
|
||||||
|
if (g.NavMoveFlags & ImGuiNavMoveFlags_IsPageMove)
|
||||||
|
{
|
||||||
|
// When we start from a visible location, score visible items and prioritize this result.
|
||||||
|
if (window->InnerRect.Contains(scoring_rect))
|
||||||
|
g.NavMoveFlags |= ImGuiNavMoveFlags_AlsoScoreVisibleSet;
|
||||||
g.NavScoringNoClipRect = scoring_rect;
|
g.NavScoringNoClipRect = scoring_rect;
|
||||||
scoring_rect.TranslateY(scoring_page_offset_y);
|
scoring_rect.TranslateY(scoring_page_offset_y);
|
||||||
if (scoring_page_offset_y != 0.0f)
|
|
||||||
g.NavScoringNoClipRect.Add(scoring_rect);
|
g.NavScoringNoClipRect.Add(scoring_rect);
|
||||||
|
}
|
||||||
|
|
||||||
//GetForegroundDrawList()->AddRectFilled(scoring_rect.Min - ImVec2(1, 1), scoring_rect.Max + ImVec2(1, 1), IM_COL32(255, 100, 0, 80)); // [DEBUG] Pre-bias
|
//GetForegroundDrawList()->AddRectFilled(scoring_rect.Min - ImVec2(1, 1), scoring_rect.Max + ImVec2(1, 1), IM_COL32(255, 100, 0, 80)); // [DEBUG] Pre-bias
|
||||||
if (g.NavMoveSubmitted)
|
if (g.NavMoveSubmitted)
|
||||||
NavBiasScoringRect(scoring_rect, window->RootWindowForNav->NavPreferredScoringPosRel[g.NavLayer], g.NavMoveDir, g.NavMoveFlags);
|
NavBiasScoringRect(scoring_rect, window->RootWindowForNav->NavPreferredScoringPosRel[g.NavLayer], g.NavMoveDir, g.NavMoveFlags);
|
||||||
|
|
@ -14147,14 +14153,14 @@ static float ImGui::NavUpdatePageUpPageDown()
|
||||||
nav_scoring_rect_offset_y = -page_offset_y;
|
nav_scoring_rect_offset_y = -page_offset_y;
|
||||||
g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item)
|
g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item)
|
||||||
g.NavMoveClipDir = ImGuiDir_Up;
|
g.NavMoveClipDir = ImGuiDir_Up;
|
||||||
g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet | ImGuiNavMoveFlags_IsPageMove;
|
g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_IsPageMove; // ImGuiNavMoveFlags_AlsoScoreVisibleSet may be added later
|
||||||
}
|
}
|
||||||
else if (IsKeyPressed(ImGuiKey_PageDown, true))
|
else if (IsKeyPressed(ImGuiKey_PageDown, true))
|
||||||
{
|
{
|
||||||
nav_scoring_rect_offset_y = +page_offset_y;
|
nav_scoring_rect_offset_y = +page_offset_y;
|
||||||
g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item)
|
g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item)
|
||||||
g.NavMoveClipDir = ImGuiDir_Down;
|
g.NavMoveClipDir = ImGuiDir_Down;
|
||||||
g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet | ImGuiNavMoveFlags_IsPageMove;
|
g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_IsPageMove; // ImGuiNavMoveFlags_AlsoScoreVisibleSet may be added later
|
||||||
}
|
}
|
||||||
else if (home_pressed)
|
else if (home_pressed)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
2
imgui.h
2
imgui.h
|
|
@ -29,7 +29,7 @@
|
||||||
// Library Version
|
// Library Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
|
||||||
#define IMGUI_VERSION "1.92.5 WIP"
|
#define IMGUI_VERSION "1.92.5 WIP"
|
||||||
#define IMGUI_VERSION_NUM 19247
|
#define IMGUI_VERSION_NUM 19248
|
||||||
#define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000
|
#define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000
|
||||||
#define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198
|
#define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue