@ -612,7 +612,7 @@ static void             ClosePopupToLevel(int remaining); 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void              ClosePopup ( ImGuiID  id ) ;  
					 
					 
					 
					static  void              ClosePopup ( ImGuiID  id ) ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  bool              IsPopupOpen ( ImGuiID  id ) ;  
					 
					 
					 
					static  bool              IsPopupOpen ( ImGuiID  id ) ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImGuiWindow *      GetFrontMostModalRootWindow ( ) ;  
					 
					 
					 
					static  ImGuiWindow *      GetFrontMostModalRootWindow ( ) ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImVec2            FindBestPopupWindowPos ( const  ImVec2 &  base_pos ,  const  ImVec2 &  size ,  ImGuiWindowFlags  flags ,  int *  last_dir ,  const  ImRect &  r_inner  ) ;  
					 
					 
					 
					static  ImVec2            FindBestPopupWindowPos ( const  ImVec2 &  base_pos ,  const  ImVec2 &  size ,  int *  last_dir ,  const  ImRect &  rect_to_avoid  ) ;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  bool              InputTextFilterCharacter ( unsigned  int *  p_char ,  ImGuiInputTextFlags  flags ,  ImGuiTextEditCallback  callback ,  void *  user_data ) ;  
					 
					 
					 
					static  bool              InputTextFilterCharacter ( unsigned  int *  p_char ,  ImGuiInputTextFlags  flags ,  ImGuiTextEditCallback  callback ,  void *  user_data ) ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int               InputTextCalcTextLenAndLineCount ( const  char *  text_begin ,  const  char * *  out_text_end ) ;  
					 
					 
					 
					static  int               InputTextCalcTextLenAndLineCount ( const  char *  text_begin ,  const  char * *  out_text_end ) ;  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -3415,7 +3415,7 @@ static void CheckStacksSize(ImGuiWindow* window, bool write) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    IM_ASSERT ( p_backup  = =  window - > DC . StackSizesBackup  +  IM_ARRAYSIZE ( window - > DC . StackSizesBackup ) ) ;   
					 
					 
					 
					    IM_ASSERT ( p_backup  = =  window - > DC . StackSizesBackup  +  IM_ARRAYSIZE ( window - > DC . StackSizesBackup ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImVec2  FindBestPopupWindowPos ( const  ImVec2 &  base_pos ,  const  ImVec2 &  size ,  ImGuiWindowFlags  flags ,  int *  last_dir ,  const  ImRect &  r_inner )  
					 
					 
					 
					static  ImVec2  FindBestPopupWindowPos ( const  ImVec2 &  base_pos ,  const  ImVec2 &  size ,  int *  last_dir ,  const  ImRect &  r_inner )  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  ImGuiStyle &  style  =  GImGui - > Style ;   
					 
					 
					 
					    const  ImGuiStyle &  style  =  GImGui - > Style ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -3425,7 +3425,7 @@ static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    r_outer . Reduce ( ImVec2 ( ( size . x  -  r_outer . GetWidth ( )  >  safe_padding . x * 2 )  ?  safe_padding . x  :  0.0f ,  ( size . y  -  r_outer . GetHeight ( )  >  safe_padding . y * 2 )  ?  safe_padding . y  :  0.0f ) ) ;   
					 
					 
					 
					    r_outer . Reduce ( ImVec2 ( ( size . x  -  r_outer . GetWidth ( )  >  safe_padding . x * 2 )  ?  safe_padding . x  :  0.0f ,  ( size . y  -  r_outer . GetHeight ( )  >  safe_padding . y * 2 )  ?  safe_padding . y  :  0.0f ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImVec2  base_pos_clamped  =  ImClamp ( base_pos ,  r_outer . Min ,  r_outer . Max  -  size ) ;   
					 
					 
					 
					    ImVec2  base_pos_clamped  =  ImClamp ( base_pos ,  r_outer . Min ,  r_outer . Max  -  size ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    for  ( int  n  =  ( * last_dir  ! =  - 1 )  ?  - 1  :  0 ;  n  <  4 ;  n + + )    // Right, down, up, left. Favor last used direction.
   
					 
					 
					 
					    for  ( int  n  =  ( * last_dir  ! =  - 1 )  ?  - 1  :  0 ;  n  <  4 ;  n + + )    // Last,  Right, down, up, left. ( Favor last used direction) .
   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  int  dir  =  ( n  = =  - 1 )  ?  * last_dir  :  n ;   
					 
					 
					 
					        const  int  dir  =  ( n  = =  - 1 )  ?  * last_dir  :  n ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ImRect  rect ( dir  = =  0  ?  r_inner . Max . x  :  r_outer . Min . x ,  dir  = =  1  ?  r_inner . Max . y  :  r_outer . Min . y ,  dir  = =  3  ?  r_inner . Min . x  :  r_outer . Max . x ,  dir  = =  2  ?  r_inner . Min . y  :  r_outer . Max . y ) ;   
					 
					 
					 
					        ImRect  rect ( dir  = =  0  ?  r_inner . Max . x  :  r_outer . Min . x ,  dir  = =  1  ?  r_inner . Max . y  :  r_outer . Min . y ,  dir  = =  3  ?  r_inner . Min . x  :  r_outer . Max . x ,  dir  = =  2  ?  r_inner . Min . y  :  r_outer . Max . y ) ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -3435,12 +3435,8 @@ static ImVec2 FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  ImVec2 ( dir  = =  0  ?  r_inner . Max . x  :  dir  = =  3  ?  r_inner . Min . x  -  size . x  :  base_pos_clamped . x ,  dir  = =  1  ?  r_inner . Max . y  :  dir  = =  2  ?  r_inner . Min . y  -  size . y  :  base_pos_clamped . y ) ;   
					 
					 
					 
					        return  ImVec2 ( dir  = =  0  ?  r_inner . Max . x  :  dir  = =  3  ?  r_inner . Min . x  -  size . x  :  base_pos_clamped . x ,  dir  = =  1  ?  r_inner . Max . y  :  dir  = =  2  ?  r_inner . Min . y  -  size . y  :  base_pos_clamped . y ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Fallback
   
					 
					 
					 
					    // Fallback, try to keep within display 
   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    * last_dir  =  - 1 ;   
					 
					 
					 
					    * last_dir  =  - 1 ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( flags  &  ImGuiWindowFlags_Tooltip )  // For tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  base_pos  +  ImVec2 ( 2 , 2 ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Otherwise try to keep within display
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImVec2  pos  =  base_pos ;   
					 
					 
					 
					    ImVec2  pos  =  base_pos ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    pos . x  =  ImMax ( ImMin ( pos . x  +  size . x ,  r_outer . Max . x )  -  size . x ,  r_outer . Min . x ) ;   
					 
					 
					 
					    pos . x  =  ImMax ( ImMin ( pos . x  +  size . x ,  r_outer . Max . x )  -  size . x ,  r_outer . Min . x ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    pos . y  =  ImMax ( ImMin ( pos . y  +  size . y ,  r_outer . Max . y )  -  size . y ,  r_outer . Min . y ) ;   
					 
					 
					 
					    pos . y  =  ImMax ( ImMin ( pos . y  +  size . y ,  r_outer . Max . y )  -  size . y ,  r_outer . Min . y ) ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -3804,19 +3800,21 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                rect_to_avoid  =  ImRect ( - FLT_MAX ,  parent_window - > Pos . y  +  parent_window - > TitleBarHeight ( ) ,  FLT_MAX ,  parent_window - > Pos . y  +  parent_window - > TitleBarHeight ( )  +  parent_window - > MenuBarHeight ( ) ) ;   
					 
					 
					 
					                rect_to_avoid  =  ImRect ( - FLT_MAX ,  parent_window - > Pos . y  +  parent_window - > TitleBarHeight ( ) ,  FLT_MAX ,  parent_window - > Pos . y  +  parent_window - > TitleBarHeight ( )  +  parent_window - > MenuBarHeight ( ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            else   
					 
					 
					 
					            else   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                rect_to_avoid  =  ImRect ( parent_window - > Pos . x  +  style . ItemSpacing . x ,  - FLT_MAX ,  parent_window - > Pos . x  +  parent_window - > Size . x  -  style . ItemSpacing . x  -  parent_window - > ScrollbarSizes . x ,  FLT_MAX ) ;  // We want some overlap to convey the relative depth of each popup (here hard-coded to 4)
   
					 
					 
					 
					                rect_to_avoid  =  ImRect ( parent_window - > Pos . x  +  style . ItemSpacing . x ,  - FLT_MAX ,  parent_window - > Pos . x  +  parent_window - > Size . x  -  style . ItemSpacing . x  -  parent_window - > ScrollbarSizes . x ,  FLT_MAX ) ;  // We want some overlap to convey the relative depth of each popup (here hard-coded to 4)
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            window - > PosFloat  =  FindBestPopupWindowPos ( window - > PosFloat ,  window - > Size ,  flags ,  & window - > AutoPosLastDirection ,  rect_to_avoid ) ;   
					 
					 
					 
					            window - > PosFloat  =  FindBestPopupWindowPos ( window - > PosFloat ,  window - > Size ,  & window - > AutoPosLastDirection ,  rect_to_avoid ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        else  if  ( ( flags  &  ImGuiWindowFlags_Popup )  ! =  0  & &  ! window_pos_set_by_api  & &  window_appearing_after_being_hidden )   
					 
					 
					 
					        else  if  ( ( flags  &  ImGuiWindowFlags_Popup )  ! =  0  & &  ! window_pos_set_by_api  & &  window_appearing_after_being_hidden )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        {   
					 
					 
					 
					        {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            ImRect  rect_to_avoid ( window - > PosFloat . x  -  1 ,  window - > PosFloat . y  -  1 ,  window - > PosFloat . x  +  1 ,  window - > PosFloat . y  +  1 ) ;   
					 
					 
					 
					            ImRect  rect_to_avoid ( window - > PosFloat . x  -  1 ,  window - > PosFloat . y  -  1 ,  window - > PosFloat . x  +  1 ,  window - > PosFloat . y  +  1 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            window - > PosFloat  =  FindBestPopupWindowPos ( window - > PosFloat ,  window - > Size ,  flags ,  & window - > AutoPosLastDirection ,  rect_to_avoid ) ;   
					 
					 
					 
					            window - > PosFloat  =  FindBestPopupWindowPos ( window - > PosFloat ,  window - > Size ,  & window - > AutoPosLastDirection ,  rect_to_avoid ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Position tooltip (always follows mouse)
   
					 
					 
					 
					        // Position tooltip (always follows mouse)
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( ( flags  &  ImGuiWindowFlags_Tooltip )  ! =  0  & &  ! window_pos_set_by_api )   
					 
					 
					 
					        if  ( ( flags  &  ImGuiWindowFlags_Tooltip )  ! =  0  & &  ! window_pos_set_by_api )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        {   
					 
					 
					 
					        {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            ImRect  rect_to_avoid ( g . IO . MousePos . x  -  16 ,  g . IO . MousePos . y  -  8 ,  g . IO . MousePos . x  +  24 ,  g . IO . MousePos . y  +  24 ) ;  // FIXME: Completely hard-coded. Perhaps center on cursor hit-point instead?
   
					 
					 
					 
					            ImRect  rect_to_avoid ( g . IO . MousePos . x  -  16 ,  g . IO . MousePos . y  -  8 ,  g . IO . MousePos . x  +  24 ,  g . IO . MousePos . y  +  24 ) ;  // FIXME: Completely hard-coded. Perhaps center on cursor hit-point instead?
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            window - > PosFloat  =  FindBestPopupWindowPos ( g . IO . MousePos ,  window - > Size ,  flags ,  & window - > AutoPosLastDirection ,  rect_to_avoid ) ;   
					 
					 
					 
					            window - > PosFloat  =  FindBestPopupWindowPos ( g . IO . MousePos ,  window - > Size ,  & window - > AutoPosLastDirection ,  rect_to_avoid ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            if  ( window - > AutoPosLastDirection  = =  - 1 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                window - > PosFloat  =  g . IO . MousePos  +  ImVec2 ( 2 , 2 ) ;  // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // User moving window (at the beginning of the frame to avoid input lag or sheering). Only valid for root windows.
   
					 
					 
					 
					        // User moving window (at the beginning of the frame to avoid input lag or sheering). Only valid for root windows.