| 10239 | } |
| 10240 | |
| 10241 | void ImGui::NavUpdateCreateMoveRequest() |
| 10242 | { |
| 10243 | ImGuiContext& g = *GImGui; |
| 10244 | ImGuiIO& io = g.IO; |
| 10245 | ImGuiWindow* window = g.NavWindow; |
| 10246 | |
| 10247 | if (g.NavMoveForwardToNextFrame && window != NULL) |
| 10248 | { |
| 10249 | // Forwarding previous request (which has been modified, e.g. wrap around menus rewrite the requests with a starting rectangle at the other side of the window) |
| 10250 | // (preserve most state, which were already set by the NavMoveRequestForward() function) |
| 10251 | IM_ASSERT(g.NavMoveDir != ImGuiDir_None && g.NavMoveClipDir != ImGuiDir_None); |
| 10252 | IM_ASSERT(g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded); |
| 10253 | IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequestForward %d\n", g.NavMoveDir); |
| 10254 | } |
| 10255 | else |
| 10256 | { |
| 10257 | // Initiate directional inputs request |
| 10258 | g.NavMoveDir = ImGuiDir_None; |
| 10259 | g.NavMoveFlags = ImGuiNavMoveFlags_None; |
| 10260 | g.NavMoveScrollFlags = ImGuiScrollFlags_None; |
| 10261 | if (window && !g.NavWindowingTarget && !(window->Flags & ImGuiWindowFlags_NoNavInputs)) |
| 10262 | { |
| 10263 | const ImGuiInputReadMode read_mode = ImGuiInputReadMode_Repeat; |
| 10264 | if (!IsActiveIdUsingNavDir(ImGuiDir_Left) && (IsNavInputTest(ImGuiNavInput_DpadLeft, read_mode) || IsNavInputTest(ImGuiNavInput_KeyLeft_, read_mode))) { g.NavMoveDir = ImGuiDir_Left; } |
| 10265 | if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && (IsNavInputTest(ImGuiNavInput_DpadRight, read_mode) || IsNavInputTest(ImGuiNavInput_KeyRight_, read_mode))) { g.NavMoveDir = ImGuiDir_Right; } |
| 10266 | if (!IsActiveIdUsingNavDir(ImGuiDir_Up) && (IsNavInputTest(ImGuiNavInput_DpadUp, read_mode) || IsNavInputTest(ImGuiNavInput_KeyUp_, read_mode))) { g.NavMoveDir = ImGuiDir_Up; } |
| 10267 | if (!IsActiveIdUsingNavDir(ImGuiDir_Down) && (IsNavInputTest(ImGuiNavInput_DpadDown, read_mode) || IsNavInputTest(ImGuiNavInput_KeyDown_, read_mode))) { g.NavMoveDir = ImGuiDir_Down; } |
| 10268 | } |
| 10269 | g.NavMoveClipDir = g.NavMoveDir; |
| 10270 | g.NavScoringNoClipRect = ImRect(+FLT_MAX, +FLT_MAX, -FLT_MAX, -FLT_MAX); |
| 10271 | } |
| 10272 | |
| 10273 | // Update PageUp/PageDown/Home/End scroll |
| 10274 | // FIXME-NAV: Consider enabling those keys even without the master ImGuiConfigFlags_NavEnableKeyboard flag? |
| 10275 | const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0; |
| 10276 | float scoring_rect_offset_y = 0.0f; |
| 10277 | if (window && g.NavMoveDir == ImGuiDir_None && nav_keyboard_active) |
| 10278 | scoring_rect_offset_y = NavUpdatePageUpPageDown(); |
| 10279 | if (scoring_rect_offset_y != 0.0f) |
| 10280 | { |
| 10281 | g.NavScoringNoClipRect = window->InnerRect; |
| 10282 | g.NavScoringNoClipRect.TranslateY(scoring_rect_offset_y); |
| 10283 | } |
| 10284 | |
| 10285 | // [DEBUG] Always send a request |
| 10286 | #if IMGUI_DEBUG_NAV_SCORING |
| 10287 | if (io.KeyCtrl && IsKeyPressed(ImGuiKey_C)) |
| 10288 | g.NavMoveDirForDebug = (ImGuiDir)((g.NavMoveDirForDebug + 1) & 3); |
| 10289 | if (io.KeyCtrl && g.NavMoveDir == ImGuiDir_None) |
| 10290 | { |
| 10291 | g.NavMoveDir = g.NavMoveDirForDebug; |
| 10292 | g.NavMoveFlags |= ImGuiNavMoveFlags_DebugNoResult; |
| 10293 | } |
| 10294 | #endif |
| 10295 | |
| 10296 | // Submit |
| 10297 | g.NavMoveForwardToNextFrame = false; |
| 10298 | if (g.NavMoveDir != ImGuiDir_None) |
nothing calls this directly
no test coverage detected