@ -11262,16 +11262,21 @@ void ImGui::NavUpdateCreateMoveRequest()
}
// When using gamepad, we project the reference nav bounding box into window visible area.
// This is to allow resuming navigation inside the visible area after doing a large amount of scrolling, since with gamepad all movements are relative
// (can't focus a visible object like we can with the mouse).
// This is to allow resuming navigation inside the visible area after doing a large amount of scrolling,
// since with gamepad all movements are relative (can't focus a visible object like we can with the mouse).
if ( g . NavMoveSubmitted & & g . NavInputSource = = ImGuiInputSource_Gamepad & & g . NavLayer = = ImGuiNavLayer_Main & & window ! = NULL ) // && (g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded))
{
bool clamp_x = ( g . NavMoveFlags & ( ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_WrapX ) ) = = 0 ;
bool clamp_y = ( g . NavMoveFlags & ( ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapY ) ) = = 0 ;
ImRect inner_rect_rel = WindowRectAbsToRel ( window , ImRect ( window - > InnerRect . Min - ImVec2 ( 1 , 1 ) , window - > InnerRect . Max + ImVec2 ( 1 , 1 ) ) ) ;
// Take account of changing scroll to handle triggering a new move request on a scrolling frame. (#6171)
// Otherwise 'inner_rect_rel' would be off on the move result frame.
inner_rect_rel . Translate ( CalcNextScrollFromScrollTargetAndClamp ( window ) - window - > Scroll ) ;
if ( ( clamp_x | | clamp_y ) & & ! inner_rect_rel . Contains ( window - > NavRectRel [ g . NavLayer ] ) )
{
//IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n");
IMGUI_DEBUG_LOG_NAV ( " [nav] NavMoveRequest: clamp NavRectRel for gamepad move \n " ) ;
float pad_x = ImMin ( inner_rect_rel . GetWidth ( ) , window - > CalcFontSize ( ) * 0.5f ) ;
float pad_y = ImMin ( inner_rect_rel . GetHeight ( ) , window - > CalcFontSize ( ) * 0.5f ) ; // Terrible approximation for the intent of starting navigation from first fully visible item
inner_rect_rel . Min . x = clamp_x ? ( inner_rect_rel . Min . x + pad_x ) : - FLT_MAX ;