@ -2268,7 +2268,7 @@ void ImGui::CalcListClipping(int items_count, float items_height, int* out_items
if ( g . NavMoveScoringItems )
unclipped_rect . Add ( g . NavScoringRect ) ;
if ( g . NavJustMovedToId & & window - > NavLastIds [ 0 ] = = g . NavJustMovedToId )
unclipped_rect . Add ( ImRect( window - > Pos + window - > NavRectRel [ 0 ] . Min , window - > Pos + window - > NavRectRel [ 0 ] . Max ) ) ; // Could store and use NavJustMovedToRectRel
unclipped_rect . Add ( WindowRectRelToAbs( window , window - > NavRectRel [ 0 ] ) ) ; // Could store and use NavJustMovedToRectRel
const ImVec2 pos = window - > DC . CursorPos ;
int start = ( int ) ( ( unclipped_rect . Min . y - pos . y ) / items_height ) ;
@ -7127,7 +7127,7 @@ void ImGui::SetItemDefaultFocus()
g . NavInitRequest = false ;
g . NavInitResultId = g . LastItemData . ID ;
g . NavInitResultRectRel = ImRect( g . LastItemData . Rect . Min - window - > Pos , g . LastItemData . Rect . Max - window - > Pos ) ;
g . NavInitResultRectRel = WindowRectAbsToRel( window , g . LastItemData . Rect ) ;
NavUpdateAnyRequestFlag ( ) ;
// Scroll could be done in NavInitRequestApplyResult() via a opt-in flag (we however don't want regular init requests to scroll)
@ -8829,7 +8829,7 @@ void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window)
g . NavFocusScopeId = window - > DC . NavFocusScopeIdCurrent ;
window - > NavLastIds [ nav_layer ] = id ;
if ( g . LastItemData . ID = = id )
window - > NavRectRel [ nav_layer ] = ImRect( g . LastItemData . NavRect . Min - window - > Pos , g . LastItemData . NavRect . Max - window - > Pos ) ;
window - > NavRectRel [ nav_layer ] = WindowRectAbsToRel( window , g . LastItemData . NavRect ) ;
if ( g . ActiveIdSource = = ImGuiInputSource_Nav )
g . NavDisableMouseHover = true ;
@ -9009,7 +9009,7 @@ static void ImGui::NavApplyItemToResult(ImGuiNavItemData* result)
result - > ID = g . LastItemData . ID ;
result - > FocusScopeId = window - > DC . NavFocusScopeIdCurrent ;
result - > InFlags = g . LastItemData . InFlags ;
result - > RectRel = ImRect( g . LastItemData . NavRect . Min - window - > Pos , g . LastItemData . NavRect . Max - window - > Pos ) ;
result - > RectRel = WindowRectAbsToRel( window , g . LastItemData . NavRect ) ;
}
// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above)
@ -9030,7 +9030,7 @@ static void ImGui::NavProcessItem()
if ( candidate_for_nav_default_focus | | g . NavInitResultId = = 0 )
{
g . NavInitResultId = id ;
g . NavInitResultRectRel = ImRect( nav_bb . Min - window - > Pos , nav_bb . Max - window - > Pos ) ;
g . NavInitResultRectRel = WindowRectAbsToRel( window , nav_bb ) ;
}
if ( candidate_for_nav_default_focus )
{
@ -9077,7 +9077,7 @@ static void ImGui::NavProcessItem()
g . NavLayer = window - > DC . NavLayerCurrent ;
g . NavFocusScopeId = window - > DC . NavFocusScopeIdCurrent ;
g . NavIdIsAlive = true ;
window - > NavRectRel [ window - > DC . NavLayerCurrent ] = ImRect( nav_bb . Min - window - > Pos , nav_bb . Max - window - > Pos ) ; // Store item bounding box (relative to window position)
window - > NavRectRel [ window - > DC . NavLayerCurrent ] = WindowRectAbsToRel( window , nav_bb ) ; // Store item bounding box (relative to window position)
}
}
@ -9242,8 +9242,8 @@ static ImVec2 ImGui::NavCalcPreferredRefPos()
else
{
// When navigation is active and mouse is disabled, decide on an arbitrary position around the bottom left of the currently navigated item.
const ImRect & rect_rel = g. NavWindow - > NavRectRel [ g . NavLayer ] ;
ImVec2 pos = g. NavWindow - > Pos + ImVec2( rect_rel . Min . x + ImMin ( g . Style . FramePadding . x * 4 , rect_rel . GetWidth ( ) ) , rect_rel . Max . y - ImMin ( g . Style . FramePadding . y , rect_rel . GetHeight ( ) ) ) ;
ImRect rect_rel = WindowRectRelToAbs( g . NavWindow , g. NavWindow - > NavRectRel [ g . NavLayer ] ) ;
ImVec2 pos = ImVec2( rect_rel . Min . x + ImMin ( g . Style . FramePadding . x * 4 , rect_rel . GetWidth ( ) ) , rect_rel . Max . y - ImMin ( g . Style . FramePadding . y , rect_rel . GetHeight ( ) ) ) ;
ImGuiViewport * viewport = GetMainViewport ( ) ;
return ImFloor ( ImClamp ( pos , viewport - > Pos , viewport - > Pos + viewport - > Size ) ) ; // ImFloor() is important because non-integer mouse position application in backend might be lossy and result in undesirable non-zero delta.
}
@ -9456,7 +9456,7 @@ static void ImGui::NavUpdate()
if ( g . NavWindow )
{
ImDrawList * draw_list = GetForegroundDrawList ( g . NavWindow ) ;
if ( 1 ) { for ( int layer = 0 ; layer < 2 ; layer + + ) draw_list - > AddRect ( g . NavWindow - > Pos + g . NavWindow - > NavRectRel [ layer ] .Min , g . NavWindow - > Pos + g . NavWindow - > NavRectRel [ layer ] . Max , IM_COL32 ( 255 , 200 , 0 , 255 ) ) ; } // [DEBUG]
if ( 1 ) { for ( int layer = 0 ; layer < 2 ; layer + + ) { ImRect r = WindowRectRelToAbs ( g . NavWindow , g . NavWindow - > NavRectRel [ layer ] ); draw_list - > AddRect ( r . Min , r . Max , IM_COL32 ( 255 , 200 , 0 , 255 ) ) ; } // [DEBUG]
if ( 1 ) { ImU32 col = ( ! g . NavWindow - > Hidden ) ? IM_COL32 ( 255 , 0 , 255 , 255 ) : IM_COL32 ( 255 , 0 , 0 , 255 ) ; ImVec2 p = NavCalcPreferredRefPos ( ) ; char buf [ 32 ] ; ImFormatString ( buf , 32 , " %d " , g . NavLayer ) ; draw_list - > AddCircleFilled ( p , 3.0f , col ) ; draw_list - > AddText ( NULL , 13.0f , p + ImVec2 ( 8 , - 4 ) , col , buf ) ; }
}
# endif
@ -9549,7 +9549,7 @@ void ImGui::NavUpdateCreateMoveRequest()
// (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 )
{
ImRect window_rect_rel ( window - > InnerRect . Min - window - > Pos - ImVec2 ( 1 , 1 ) , window - > InnerRect . Max - window - > Pos + ImVec2 ( 1 , 1 ) ) ;
ImRect window_rect_rel = WindowRectAbsToRel ( window , ImRect ( window - > InnerRect . Min - ImVec2 ( 1 , 1 ) , window - > InnerRect . Max + ImVec2 ( 1 , 1 ) ) ) ;
if ( ! window_rect_rel . Contains ( window - > NavRectRel [ g . NavLayer ] ) )
{
IMGUI_DEBUG_LOG_NAV ( " [nav] NavMoveRequest: clamp NavRectRel \n " ) ;
@ -9565,7 +9565,7 @@ void ImGui::NavUpdateCreateMoveRequest()
if ( window ! = NULL )
{
ImRect nav_rect_rel = ! window - > NavRectRel [ g . NavLayer ] . IsInverted ( ) ? window - > NavRectRel [ g . NavLayer ] : ImRect ( 0 , 0 , 0 , 0 ) ;
scoring_rect = ImRect( window - > Pos + nav_rect_rel . Min , window - > Pos + nav_rect_rel . Max ) ;
scoring_rect = WindowRectRelToAbs( window , nav_rect_rel ) ;
scoring_rect . TranslateY ( scoring_rect_offset_y ) ;
scoring_rect . Min . x = ImMin ( scoring_rect . Min . x + 1.0f , scoring_rect . Max . x ) ;
scoring_rect . Max . x = scoring_rect . Min . x ;
@ -9624,7 +9624,7 @@ void ImGui::NavMoveRequestApplyResult()
}
else
{
ImRect rect_abs = ImRect( result - > RectRel . Min + result - > Window - > Pos , result - > RectRel . Max + result - > Window - > Pos ) ;
ImRect rect_abs = WindowRectRelToAbs( result - > Window , result - > RectRel ) ;
delta_scroll = ScrollToRectEx ( result - > Window , rect_abs , g . NavMoveScrollFlags ) ;
}
@ -9699,7 +9699,7 @@ static void ImGui::NavUpdateCancelRequest()
IM_ASSERT ( child_window - > ChildId ! = 0 ) ;
ImRect child_rect = child_window - > Rect ( ) ;
FocusWindow ( parent_window ) ;
SetNavID ( child_window - > ChildId , ImGuiNavLayer_Main , 0 , ImRect( child_rect . Min - parent_window - > Pos , child_rect . Max - parent_window - > Pos ) ) ;
SetNavID ( child_window - > ChildId , ImGuiNavLayer_Main , 0 , WindowRectAbsToRel( parent_window , child_rect ) ) ;
}
else if ( g . OpenPopupStack . Size > 0 )
{