@ -1046,6 +1046,7 @@ static ImGuiWindow*     NavRestoreLastChildNavWindow(ImGuiWindow* window); 
			
		
	
		
			
				
					static  void              UpdateMouseInputs ( ) ;  
			
		
	
		
			
				
					static  void              UpdateMouseWheel ( ) ;  
			
		
	
		
			
				
					static  void              UpdateManualResize ( ImGuiWindow *  window ,  const  ImVec2 &  size_auto_fit ,  int *  border_held ,  int  resize_grip_count ,  ImU32  resize_grip_col [ 4 ] ) ;  
			
		
	
		
			
				
					static  void              RenderOuterBorders ( ImGuiWindow *  window ,  int  border_held ) ;  
			
		
	
		
			
				
					static  void              EndFrameDrawDimmedBackgrounds ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Viewports
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -4971,12 +4972,12 @@ static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& co 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					struct  ImGuiResizeGripDef  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImVec2   CornerPos ;   
			
		
	
		
			
				
					    ImVec2   CornerPosN  ;   
			
		
	
		
			
				
					    ImVec2   InnerDir ;   
			
		
	
		
			
				
					    int      AngleMin12 ,  AngleMax12 ;   
			
		
	
		
			
				
					} ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					const  ImGuiResizeGripDef  resize_grip_def [ 4 ]  =  
			
		
	
		
			
				
					static  const  ImGuiResizeGripDef  resize_grip_def [ 4 ]  =  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    {  ImVec2 ( 1 , 1 ) ,  ImVec2 ( - 1 , - 1 ) ,  0 ,  3  } ,  // Lower right
   
			
		
	
		
			
				
					    {  ImVec2 ( 0 , 1 ) ,  ImVec2 ( + 1 , - 1 ) ,  3 ,  6  } ,  // Lower left
   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -4988,10 +4989,10 @@ static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_ 
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImRect  rect  =  window - > Rect ( ) ;   
			
		
	
		
			
				
					    if  ( thickness  = =  0.0f )  rect . Max  - =  ImVec2 ( 1 , 1 ) ;   
			
		
	
		
			
				
					    if  ( border_n  = =  0 )  return  ImRect ( rect . Min . x  +  perp_padding ,  rect . Min . y  -  thickness ,     rect . Max . x  -  perp_padding ,  rect . Min . y  +  thickness ) ;   
			
		
	
		
			
				
					    if  ( border_n  = =  1 )  return  ImRect ( rect . Max . x  -  thickness ,     rect . Min . y  +  perp_padding ,  rect . Max . x  +  thickness ,     rect . Max . y  -  perp_padding ) ;   
			
		
	
		
			
				
					    if  ( border_n  = =  2 )  return  ImRect ( rect . Min . x  +  perp_padding ,  rect . Max . y  -  thickness ,     rect . Max . x  -  perp_padding ,  rect . Max . y  +  thickness ) ;   
			
		
	
		
			
				
					    if  ( border_n  = =  3 )  return  ImRect ( rect . Min . x  -  thickness ,     rect . Min . y  +  perp_padding ,  rect . Min . x  +  thickness ,     rect . Max . y  -  perp_padding ) ;   
			
		
	
		
			
				
					    if  ( border_n  = =  0 )  return  ImRect ( rect . Min . x  +  perp_padding ,  rect . Min . y  -  thickness ,     rect . Max . x  -  perp_padding ,  rect . Min . y  +  thickness ) ;       // Top
    
			
		
	
		
			
				
					    if  ( border_n  = =  1 )  return  ImRect ( rect . Max . x  -  thickness ,     rect . Min . y  +  perp_padding ,  rect . Max . x  +  thickness ,     rect . Max . y  -  perp_padding ) ;    // Right
    
			
		
	
		
			
				
					    if  ( border_n  = =  2 )  return  ImRect ( rect . Min . x  +  perp_padding ,  rect . Max . y  -  thickness ,     rect . Max . x  -  perp_padding ,  rect . Max . y  +  thickness ) ;       // Bottom
    
			
		
	
		
			
				
					    if  ( border_n  = =  3 )  return  ImRect ( rect . Min . x  -  thickness ,     rect . Min . y  +  perp_padding ,  rect . Min . x  +  thickness ,     rect . Max . y  -  perp_padding ) ;    // Left
    
			
		
	
		
			
				
					    IM_ASSERT ( 0 ) ;   
			
		
	
		
			
				
					    return  ImRect ( ) ;   
			
		
	
		
			
				
					}  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5019,7 +5020,7 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au 
			
		
	
		
			
				
					    for  ( int  resize_grip_n  =  0 ;  resize_grip_n  <  resize_grip_count ;  resize_grip_n + + )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        const  ImGuiResizeGripDef &  grip  =  resize_grip_def [ resize_grip_n ] ;   
			
		
	
		
			
				
					        const  ImVec2  corner  =  ImLerp ( window - > Pos ,  window - > Pos  +  window - > Size ,  grip . CornerPos ) ;   
			
		
	
		
			
				
					        const  ImVec2  corner  =  ImLerp ( window - > Pos ,  window - > Pos  +  window - > Size ,  grip . CornerPosN  ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
   
			
		
	
		
			
				
					        ImRect  resize_rect ( corner  -  grip . InnerDir  *  grip_hover_outer_size ,  corner  +  grip . InnerDir  *  grip_hover_inner_size ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5041,8 +5042,8 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au 
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            // Resize from any of the four corners
   
			
		
	
		
			
				
					            // We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
   
			
		
	
		
			
				
					            ImVec2  corner_target  =  g . IO . MousePos  -  g . ActiveIdClickOffset  +  ImLerp ( grip . InnerDir  *  grip_hover_outer_size ,  grip . InnerDir  *  - grip_hover_inner_size ,  grip . CornerPos ) ;  // Corner of the window corresponding to our corner grip
   
			
		
	
		
			
				
					            CalcResizePosSizeFromAnyCorner ( window ,  corner_target ,  grip . CornerPos ,  & pos_target ,  & size_target ) ;   
			
		
	
		
			
				
					            ImVec2  corner_target  =  g . IO . MousePos  -  g . ActiveIdClickOffset  +  ImLerp ( grip . InnerDir  *  grip_hover_outer_size ,  grip . InnerDir  *  - grip_hover_inner_size ,  grip . CornerPosN  ) ;  // Corner of the window corresponding to our corner grip
   
			
		
	
		
			
				
					            CalcResizePosSizeFromAnyCorner ( window ,  corner_target ,  grip . CornerPosN  ,  & pos_target ,  & size_target ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if  ( resize_grip_n  = =  0  | |  held  | |  hovered )   
			
		
	
		
			
				
					            resize_grip_col [ resize_grip_n ]  =  GetColorU32 ( held  ?  ImGuiCol_ResizeGripActive  :  hovered  ?  ImGuiCol_ResizeGripHovered  :  ImGuiCol_ResizeGrip ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5056,16 +5057,17 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au 
			
		
	
		
			
				
					        if  ( ( hovered  & &  g . HoveredIdTimer  >  WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER )  | |  held )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            g . MouseCursor  =  ( border_n  &  1 )  ?  ImGuiMouseCursor_ResizeEW  :  ImGuiMouseCursor_ResizeNS ;   
			
		
	
		
			
				
					            if  ( held )  * border_held  =  border_n ;   
			
		
	
		
			
				
					            if  ( held )  
  
			
		
	
		
			
				
					                * border_held  =  border_n ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if  ( held )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            ImVec2  border_target  =  window - > Pos ;   
			
		
	
		
			
				
					            ImVec2  border_posn ;   
			
		
	
		
			
				
					            if  ( border_n  = =  0 )  {  border_posn  =  ImVec2 ( 0 ,  0 ) ;  border_target . y  =  ( g . IO . MousePos . y  -  g . ActiveIdClickOffset . y  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }   
			
		
	
		
			
				
					            if  ( border_n  = =  1 )  {  border_posn  =  ImVec2 ( 1 ,  0 ) ;  border_target . x  =  ( g . IO . MousePos . x  -  g . ActiveIdClickOffset . x  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }   
			
		
	
		
			
				
					            if  ( border_n  = =  2 )  {  border_posn  =  ImVec2 ( 0 ,  1 ) ;  border_target . y  =  ( g . IO . MousePos . y  -  g . ActiveIdClickOffset . y  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }   
			
		
	
		
			
				
					            if  ( border_n  = =  3 )  {  border_posn  =  ImVec2 ( 0 ,  0 ) ;  border_target . x  =  ( g . IO . MousePos . x  -  g . ActiveIdClickOffset . x  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }   
			
		
	
		
			
				
					            if  ( border_n  = =  0 )  {  border_posn  =  ImVec2 ( 0 ,  0 ) ;  border_target . y  =  ( g . IO . MousePos . y  -  g . ActiveIdClickOffset . y  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }  // Top
    
			
		
	
		
			
				
					            if  ( border_n  = =  1 )  {  border_posn  =  ImVec2 ( 1 ,  0 ) ;  border_target . x  =  ( g . IO . MousePos . x  -  g . ActiveIdClickOffset . x  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }  // Right
    
			
		
	
		
			
				
					            if  ( border_n  = =  2 )  {  border_posn  =  ImVec2 ( 0 ,  1 ) ;  border_target . y  =  ( g . IO . MousePos . y  -  g . ActiveIdClickOffset . y  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }  // Bottom
    
			
		
	
		
			
				
					            if  ( border_n  = =  3 )  {  border_posn  =  ImVec2 ( 0 ,  0 ) ;  border_target . x  =  ( g . IO . MousePos . x  -  g . ActiveIdClickOffset . x  +  WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS ) ;  }  // Left
    
			
		
	
		
			
				
					            CalcResizePosSizeFromAnyCorner ( window ,  border_target ,  border_posn ,  & pos_target ,  & size_target ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5113,6 +5115,41 @@ static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& rect, cons 
			
		
	
		
			
				
					    window - > Pos  =  ImMin ( rect . Max  -  padding ,  ImMax ( window - > Pos  +  size_for_clamping ,  rect . Min  +  padding )  -  size_for_clamping ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  ImGui : : RenderOuterBorders ( ImGuiWindow *  window ,  int  border_held )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    float  rounding  =  window - > WindowRounding ;   
			
		
	
		
			
				
					    float  border_size  =  window - > WindowBorderSize ;   
			
		
	
		
			
				
					    if  ( border_size  >  0.0f  & &  ! ( window - > Flags  &  ImGuiWindowFlags_NoBackground ) )   
			
		
	
		
			
				
					        window - > DrawList - > AddRect ( window - > Pos ,  window - > Pos  +  window - > Size ,  GetColorU32 ( ImGuiCol_Border ) ,  rounding ,  ImDrawCornerFlags_All ,  border_size ) ;   
			
		
	
		
			
				
					    if  ( border_held  ! =  - 1 )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        struct  ImGuiResizeBorderDef   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            ImVec2  InnerDir ;   
			
		
	
		
			
				
					            ImVec2  CornerPosN1 ,  CornerPosN2 ;   
			
		
	
		
			
				
					            float   OuterAngle ;   
			
		
	
		
			
				
					        } ;   
			
		
	
		
			
				
					        static  const  ImGuiResizeBorderDef  resize_border_def [ 4 ]  =   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            {  ImVec2 ( 0 , + 1 ) ,  ImVec2 ( 0 , 0 ) ,  ImVec2 ( 1 , 0 ) ,  IM_PI * 1.50f  } ,  // Top
   
			
		
	
		
			
				
					            {  ImVec2 ( - 1 , 0 ) ,  ImVec2 ( 1 , 0 ) ,  ImVec2 ( 1 , 1 ) ,  IM_PI * 0.00f  } ,  // Right
   
			
		
	
		
			
				
					            {  ImVec2 ( 0 , - 1 ) ,  ImVec2 ( 1 , 1 ) ,  ImVec2 ( 0 , 1 ) ,  IM_PI * 0.50f  } ,  // Bottom
   
			
		
	
		
			
				
					            {  ImVec2 ( + 1 , 0 ) ,  ImVec2 ( 0 , 1 ) ,  ImVec2 ( 0 , 0 ) ,  IM_PI * 1.00f  }   // Left
   
			
		
	
		
			
				
					        } ;   
			
		
	
		
			
				
					        const  ImGuiResizeBorderDef &  def  =  resize_border_def [ border_held ] ;   
			
		
	
		
			
				
					        ImRect  border_r  =  GetResizeBorderRect ( window ,  border_held ,  rounding ,  0.0f ) ;   
			
		
	
		
			
				
					        window - > DrawList - > PathArcTo ( ImLerp ( border_r . Min ,  border_r . Max ,  def . CornerPosN1 )  +  ImVec2 ( 0.5f ,  0.5f )  +  def . InnerDir  *  rounding ,  rounding ,  def . OuterAngle  -  IM_PI * 0.25f ,  def . OuterAngle ) ;   
			
		
	
		
			
				
					        window - > DrawList - > PathArcTo ( ImLerp ( border_r . Min ,  border_r . Max ,  def . CornerPosN2 )  +  ImVec2 ( 0.5f ,  0.5f )  +  def . InnerDir  *  rounding ,  rounding ,  def . OuterAngle ,  def . OuterAngle  +  IM_PI * 0.25f ) ;   
			
		
	
		
			
				
					        window - > DrawList - > PathStroke ( GetColorU32 ( ImGuiCol_SeparatorActive ) ,  false ,  ImMax ( 2.0f ,  border_size ) ) ;  // Thicker than usual
   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    if  ( g . Style . FrameBorderSize  >  0  & &  ! ( window - > Flags  &  ImGuiWindowFlags_NoTitleBar )  & &  ! window - > DockIsActive )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        float  y  =  window - > Pos . y  +  window - > TitleBarHeight ( )  -  1 ;   
			
		
	
		
			
				
					        window - > DrawList - > AddLine ( ImVec2 ( window - > Pos . x  +  border_size ,  y ) ,  ImVec2 ( window - > Pos . x  +  window - > Size . x  -  border_size ,  y ) ,  GetColorU32 ( ImGuiCol_Border ) ,  g . Style . FrameBorderSize ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  ImGui : : UpdateWindowParentAndRootLinks ( ImGuiWindow *  window ,  ImGuiWindowFlags  flags ,  ImGuiWindow *  parent_window )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    window - > ParentWindow  =  parent_window ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5693,7 +5730,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
			
		
	
		
			
				
					                for  ( int  resize_grip_n  =  0 ;  resize_grip_n  <  resize_grip_count ;  resize_grip_n + + )   
			
		
	
		
			
				
					                {   
			
		
	
		
			
				
					                    const  ImGuiResizeGripDef &  grip  =  resize_grip_def [ resize_grip_n ] ;   
			
		
	
		
			
				
					                    const  ImVec2  corner  =  ImLerp ( window - > Pos ,  window - > Pos  +  window - > Size ,  grip . CornerPos ) ;   
			
		
	
		
			
				
					                    const  ImVec2  corner  =  ImLerp ( window - > Pos ,  window - > Pos  +  window - > Size ,  grip . CornerPosN  ) ;   
			
		
	
		
			
				
					                    window - > DrawList - > PathLineTo ( corner  +  grip . InnerDir  *  ( ( resize_grip_n  &  1 )  ?  ImVec2 ( window_border_size ,  grip_draw_size )  :  ImVec2 ( grip_draw_size ,  window_border_size ) ) ) ;   
			
		
	
		
			
				
					                    window - > DrawList - > PathLineTo ( corner  +  grip . InnerDir  *  ( ( resize_grip_n  &  1 )  ?  ImVec2 ( grip_draw_size ,  window_border_size )  :  ImVec2 ( window_border_size ,  grip_draw_size ) ) ) ;   
			
		
	
		
			
				
					                    window - > DrawList - > PathArcToFast ( ImVec2 ( corner . x  +  grip . InnerDir . x  *  ( window_rounding  +  window_border_size ) ,  corner . y  +  grip . InnerDir . y  *  ( window_rounding  +  window_border_size ) ) ,  window_rounding ,  grip . AngleMin12 ,  grip . AngleMax12 ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5702,15 +5739,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // Borders
   
			
		
	
		
			
				
					            if  ( window_border_size  >  0.0f  & &  ! ( flags  &  ImGuiWindowFlags_NoBackground ) )   
			
		
	
		
			
				
					                window - > DrawList - > AddRect ( window - > Pos ,  window - > Pos  +  window - > Size ,  GetColorU32 ( ImGuiCol_Border ) ,  window_rounding ,  ImDrawCornerFlags_All ,  window_border_size ) ;   
			
		
	
		
			
				
					            if  ( border_held  ! =  - 1 )   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                ImRect  border  =  GetResizeBorderRect ( window ,  border_held ,  grip_draw_size ,  0.0f ) ;   
			
		
	
		
			
				
					                window - > DrawList - > AddLine ( border . Min ,  border . Max ,  GetColorU32 ( ImGuiCol_SeparatorActive ) ,  ImMax ( 1.0f ,  window_border_size ) ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            if  ( style . FrameBorderSize  >  0  & &  ! ( flags  &  ImGuiWindowFlags_NoTitleBar )  & &  ! window - > DockIsActive )   
			
		
	
		
			
				
					                window - > DrawList - > AddLine ( title_bar_rect . GetBL ( )  +  ImVec2 ( style . WindowBorderSize ,  - 1 ) ,  title_bar_rect . GetBR ( )  +  ImVec2 ( - style . WindowBorderSize ,  - 1 ) ,  GetColorU32 ( ImGuiCol_Border ) ,  style . FrameBorderSize ) ;   
			
		
	
		
			
				
					            RenderOuterBorders ( window ,  border_held ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Store a backup of SizeFull which we will use next frame to decide if we need scrollbars.