@ -3747,62 +3747,60 @@ static bool IsWindowActiveAndVisible(ImGuiWindow* window) 
			
		
	
		
			
				
					static  void  ImGui : : UpdateMouseInputs ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiIO &  io  =  g . IO ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well)
   
			
		
	
		
			
				
					    if  ( IsMousePosValid ( & g . IO . MousePos ) )   
			
		
	
		
			
				
					        g . IO . MousePos  =  g . MouseLastValidPos  =  ImFloor ( g . IO . MousePos ) ;   
			
		
	
		
			
				
					    if  ( IsMousePosValid ( & io . MousePos ) )   
			
		
	
		
			
				
					        io . MousePos  =  g . MouseLastValidPos  =  ImFloor ( io . MousePos ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta
   
			
		
	
		
			
				
					    if  ( IsMousePosValid ( & g . IO . MousePos )  & &  IsMousePosValid ( & g . IO . MousePosPrev ) )   
			
		
	
		
			
				
					        g . IO . MouseDelta  =  g . IO . MousePos  -  g . IO . MousePosPrev ;   
			
		
	
		
			
				
					    if  ( IsMousePosValid ( & io . MousePos )  & &  IsMousePosValid ( & io . MousePosPrev ) )   
			
		
	
		
			
				
					        io . MouseDelta  =  io . MousePos  -  io . MousePosPrev ;   
			
		
	
		
			
				
					    else   
			
		
	
		
			
				
					        g . IO . MouseDelta  =  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					        io . MouseDelta  =  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // If mouse moved we re-enable mouse hovering in case it was disabled by gamepad/keyboard. In theory should use a >0.0f threshold but would need to reset in everywhere we set this to true.
   
			
		
	
		
			
				
					    if  ( g . IO . MouseDelta . x  ! =  0.0f  | |  g . IO . MouseDelta . y  ! =  0.0f )   
			
		
	
		
			
				
					    if  ( io . MouseDelta . x  ! =  0.0f  | |  io . MouseDelta . y  ! =  0.0f )   
			
		
	
		
			
				
					        g . NavDisableMouseHover  =  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    g . IO . MousePosPrev  =  g . IO . MousePos ;   
			
		
	
		
			
				
					    for  ( int  i  =  0 ;  i  <  IM_ARRAYSIZE ( g . IO . MouseDown ) ;  i + + )   
			
		
	
		
			
				
					    io . MousePosPrev  =  io . MousePos ;   
			
		
	
		
			
				
					    for  ( int  i  =  0 ;  i  <  IM_ARRAYSIZE ( io . MouseDown ) ;  i + + )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        g . IO . MouseClicked [ i ]  =  g . IO . MouseDown [ i ]  & &  g . IO . MouseDownDuration [ i ]  <  0.0f ;   
			
		
	
		
			
				
					        g . IO . MouseClickedCount [ i ]  =  0 ;  // Will be filled below
   
			
		
	
		
			
				
					        g . IO . MouseReleased [ i ]  =  ! g . IO . MouseDown [ i ]  & &  g . IO . MouseDownDuration [ i ]  > =  0.0f ;   
			
		
	
		
			
				
					        g . IO . MouseDownDurationPrev [ i ]  =  g . IO . MouseDownDuration [ i ] ;   
			
		
	
		
			
				
					        g . IO . MouseDownDuration [ i ]  =  g . IO . MouseDown [ i ]  ?  ( g . IO . MouseDownDuration [ i ]  <  0.0f  ?  0.0f  :  g . IO . MouseDownDuration [ i ]  +  g . IO . DeltaTime )  :  - 1.0f ;   
			
		
	
		
			
				
					        if  ( g . IO . MouseClicked [ i ] )   
			
		
	
		
			
				
					        io . MouseClicked [ i ]  =  io . MouseDown [ i ]  & &  io . MouseDownDuration [ i ]  <  0.0f ;   
			
		
	
		
			
				
					        io . MouseClickedCount [ i ]  =  0 ;  // Will be filled below
   
			
		
	
		
			
				
					        io . MouseReleased [ i ]  =  ! io . MouseDown [ i ]  & &  io . MouseDownDuration [ i ]  > =  0.0f ;   
			
		
	
		
			
				
					        io . MouseDownDurationPrev [ i ]  =  io . MouseDownDuration [ i ] ;   
			
		
	
		
			
				
					        io . MouseDownDuration [ i ]  =  io . MouseDown [ i ]  ?  ( io . MouseDownDuration [ i ]  <  0.0f  ?  0.0f  :  io . MouseDownDuration [ i ]  +  io . DeltaTime )  :  - 1.0f ;   
			
		
	
		
			
				
					        if  ( io . MouseClicked [ i ] )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            bool  is_repeated_click  =  false ;   
			
		
	
		
			
				
					            if  ( ( float ) ( g . Time  -  g . IO . MouseClickedTime [ i ] )  <  g . IO . MouseDoubleClickTime )   
			
		
	
		
			
				
					            if  ( ( float ) ( g . Time  -  io . MouseClickedTime [ i ] )  <  io . MouseDoubleClickTime )   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                ImVec2  delta_from_click_pos  =  IsMousePosValid ( & g . IO . MousePos )  ?  ( g . IO . MousePos  -  g . IO . MouseClickedPos [ i ] )  :  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					                if  ( ImLengthSqr ( delta_from_click_pos )  <  g . IO . MouseDoubleClickMaxDist  *  g . IO . MouseDoubleClickMaxDist )   
			
		
	
		
			
				
					                ImVec2  delta_from_click_pos  =  IsMousePosValid ( & io . MousePos )  ?  ( io . MousePos  -  io . MouseClickedPos [ i ] )  :  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					                if  ( ImLengthSqr ( delta_from_click_pos )  <  io . MouseDoubleClickMaxDist  *  io . MouseDoubleClickMaxDist )   
			
		
	
		
			
				
					                    is_repeated_click  =  true ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            if  ( is_repeated_click )   
			
		
	
		
			
				
					                g . IO . MouseClickedLastCount [ i ] + + ;   
			
		
	
		
			
				
					                io . MouseClickedLastCount [ i ] + + ;   
			
		
	
		
			
				
					            else   
			
		
	
		
			
				
					                g . IO . MouseClickedLastCount [ i ]  =  1 ;   
			
		
	
		
			
				
					            g . IO . MouseClickedTime [ i ]  =  g . Time ;   
			
		
	
		
			
				
					            g . IO . MouseClickedPos [ i ]  =  g . IO . MousePos ;   
			
		
	
		
			
				
					            g . IO . MouseClickedCount [ i ]  =  g . IO . MouseClickedLastCount [ i ] ;   
			
		
	
		
			
				
					            g . IO . MouseDragMaxDistanceAbs [ i ]  =  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					            g . IO . MouseDragMaxDistanceSqr [ i ]  =  0.0f ;   
			
		
	
		
			
				
					                io . MouseClickedLastCount [ i ]  =  1 ;   
			
		
	
		
			
				
					            io . MouseClickedTime [ i ]  =  g . Time ;   
			
		
	
		
			
				
					            io . MouseClickedPos [ i ]  =  io . MousePos ;   
			
		
	
		
			
				
					            io . MouseClickedCount [ i ]  =  io . MouseClickedLastCount [ i ] ;   
			
		
	
		
			
				
					            io . MouseDragMaxDistanceSqr [ i ]  =  0.0f ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        else  if  ( g . IO . MouseDown [ i ] )   
			
		
	
		
			
				
					        else  if  ( io . MouseDown [ i ] )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold
   
			
		
	
		
			
				
					            ImVec2  delta_from_click_pos  =  IsMousePosValid ( & g . IO . MousePos )  ?  ( g . IO . MousePos  -  g . IO . MouseClickedPos [ i ] )  :  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					            g . IO . MouseDragMaxDistanceSqr [ i ]  =  ImMax ( g . IO . MouseDragMaxDistanceSqr [ i ] ,  ImLengthSqr ( delta_from_click_pos ) ) ;   
			
		
	
		
			
				
					            g . IO . MouseDragMaxDistanceAbs [ i ] . x  =  ImMax ( g . IO . MouseDragMaxDistanceAbs [ i ] . x ,  delta_from_click_pos . x  <  0.0f  ?  - delta_from_click_pos . x  :  delta_from_click_pos . x ) ;   
			
		
	
		
			
				
					            g . IO . MouseDragMaxDistanceAbs [ i ] . y  =  ImMax ( g . IO . MouseDragMaxDistanceAbs [ i ] . y ,  delta_from_click_pos . y  <  0.0f  ?  - delta_from_click_pos . y  :  delta_from_click_pos . y ) ;   
			
		
	
		
			
				
					            float  delta_sqr_click_pos  =  IsMousePosValid ( & io . MousePos )  ?  ImLengthSqr ( io . MousePos  -  io . MouseClickedPos [ i ] )  :  0.0f ;   
			
		
	
		
			
				
					            io . MouseDragMaxDistanceSqr [ i ]  =  ImMax ( io . MouseDragMaxDistanceSqr [ i ] ,  delta_sqr_click_pos ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // We provide io.MouseDoubleClicked[] as a legacy service
   
			
		
	
		
			
				
					        g . IO . MouseDoubleClicked [ i ]  =  ( g . IO . MouseClickedCount [ i ]  = =  2 ) ;   
			
		
	
		
			
				
					        io . MouseDoubleClicked [ i ]  =  ( io . MouseClickedCount [ i ]  = =  2 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation
   
			
		
	
		
			
				
					        if  ( g . IO . MouseClicked [ i ] )   
			
		
	
		
			
				
					        if  ( io . MouseClicked [ i ] )   
			
		
	
		
			
				
					            g . NavDisableMouseHover  =  false ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}