| 14457 | } |
| 14458 | |
| 14459 | static void ImGui::NavUpdateCreateWrappingRequest() |
| 14460 | { |
| 14461 | ImGuiContext& g = *GImGui; |
| 14462 | ImGuiWindow* window = g.NavWindow; |
| 14463 | |
| 14464 | bool do_forward = false; |
| 14465 | ImRect bb_rel = window->NavRectRel[g.NavLayer]; |
| 14466 | ImGuiDir clip_dir = g.NavMoveDir; |
| 14467 | |
| 14468 | const ImGuiNavMoveFlags move_flags = g.NavMoveFlags; |
| 14469 | //const ImGuiAxis move_axis = (g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down) ? ImGuiAxis_Y : ImGuiAxis_X; |
| 14470 | |
| 14471 | // Menu layer does not maintain scrolling / content size (#9178) |
| 14472 | ImVec2 wrap_size = (g.NavLayer == ImGuiNavLayer_Menu) ? window->Size : window->ContentSize + window->WindowPadding; |
| 14473 | |
| 14474 | if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX))) |
| 14475 | { |
| 14476 | bb_rel.Min.x = bb_rel.Max.x = wrap_size.x; |
| 14477 | if (move_flags & ImGuiNavMoveFlags_WrapX) |
| 14478 | { |
| 14479 | bb_rel.TranslateY(-bb_rel.GetHeight()); // Previous row |
| 14480 | clip_dir = ImGuiDir_Up; |
| 14481 | } |
| 14482 | do_forward = true; |
| 14483 | } |
| 14484 | if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX))) |
| 14485 | { |
| 14486 | bb_rel.Min.x = bb_rel.Max.x = -window->WindowPadding.x; |
| 14487 | if (move_flags & ImGuiNavMoveFlags_WrapX) |
| 14488 | { |
| 14489 | bb_rel.TranslateY(+bb_rel.GetHeight()); // Next row |
| 14490 | clip_dir = ImGuiDir_Down; |
| 14491 | } |
| 14492 | do_forward = true; |
| 14493 | } |
| 14494 | if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY))) |
| 14495 | { |
| 14496 | bb_rel.Min.y = bb_rel.Max.y = wrap_size.y; |
| 14497 | if (move_flags & ImGuiNavMoveFlags_WrapY) |
| 14498 | { |
| 14499 | bb_rel.TranslateX(-bb_rel.GetWidth()); // Previous column |
| 14500 | clip_dir = ImGuiDir_Left; |
| 14501 | } |
| 14502 | do_forward = true; |
| 14503 | } |
| 14504 | if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY))) |
| 14505 | { |
| 14506 | bb_rel.Min.y = bb_rel.Max.y = -window->WindowPadding.y; |
| 14507 | if (move_flags & ImGuiNavMoveFlags_WrapY) |
| 14508 | { |
| 14509 | bb_rel.TranslateX(+bb_rel.GetWidth()); // Next column |
| 14510 | clip_dir = ImGuiDir_Right; |
| 14511 | } |
| 14512 | do_forward = true; |
| 14513 | } |
| 14514 | if (!do_forward) |
| 14515 | return; |
| 14516 | window->NavRectRel[g.NavLayer] = bb_rel; |
nothing calls this directly
no outgoing calls
no test coverage detected