@ -946,7 +946,8 @@ static bool             UpdateWindowManualResize(ImGuiWindow* window, const ImVe 
			
		
	
		
			
				
					static  void              RenderWindowOuterBorders ( ImGuiWindow *  window ) ;  
			
		
	
		
			
				
					static  void              RenderWindowDecorations ( ImGuiWindow *  window ,  const  ImRect &  title_bar_rect ,  bool  title_bar_is_highlight ,  int  resize_grip_count ,  const  ImU32  resize_grip_col [ 4 ] ,  float  resize_grip_draw_size ) ;  
			
		
	
		
			
				
					static  void              RenderWindowTitleBarContents ( ImGuiWindow *  window ,  const  ImRect &  title_bar_rect ,  const  char *  name ,  bool *  p_open ) ;  
			
		
	
		
			
				
					static  void              EndFrameDrawDimmedBackgrounds ( ) ;  
			
		
	
		
			
				
					static  void              RenderDimmedBackgroundBehindWindow ( ImGuiWindow *  window ,  ImU32  col ) ;  
			
		
	
		
			
				
					static  void              RenderDimmedBackgrounds ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Viewports
  
			
		
	
		
			
				
					static  void              UpdateViewportsNewFrame ( ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -4442,9 +4443,58 @@ void ImGui::PopClipRect() 
			
		
	
		
			
				
					    window - > ClipRect  =  window - > DrawList - > _ClipRectStack . back ( ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  ImGui : : EndFrameDrawDimmedBackgrounds ( )  
			
		
	
		
			
				
					static  void  ImGui : : RenderDimmedBackgroundBehindWindow ( ImGuiWindow *  window ,  ImU32  col )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    // (This is currently empty, left here to facilitate sync/merge with docking branch)
   
			
		
	
		
			
				
					    if  ( ( col  &  IM_COL32_A_MASK )  = =  0 )   
			
		
	
		
			
				
					        return ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ImGuiViewportP *  viewport  =  ( ImGuiViewportP * ) GetMainViewport ( ) ;   
			
		
	
		
			
				
					    ImRect  viewport_rect  =  viewport - > GetMainRect ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Draw behind window by moving the draw command at the FRONT of the draw list
   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        ImDrawList *  draw_list  =  window - > RootWindow - > DrawList ;   
			
		
	
		
			
				
					        draw_list - > AddDrawCmd ( ) ;   
			
		
	
		
			
				
					        draw_list - > PushClipRect ( viewport_rect . Min  -  ImVec2 ( 1 ,  1 ) ,  viewport_rect . Max  +  ImVec2 ( 1 ,  1 ) ,  false ) ;  // Ensure ImDrawCmd are not merged
   
			
		
	
		
			
				
					        draw_list - > AddRectFilled ( viewport_rect . Min ,  viewport_rect . Max ,  col ) ;   
			
		
	
		
			
				
					        ImDrawCmd  cmd  =  draw_list - > CmdBuffer . back ( ) ;   
			
		
	
		
			
				
					        IM_ASSERT ( cmd . ElemCount  = =  6 ) ;   
			
		
	
		
			
				
					        draw_list - > CmdBuffer . pop_back ( ) ;   
			
		
	
		
			
				
					        draw_list - > CmdBuffer . push_front ( cmd ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  ImGui : : RenderDimmedBackgrounds ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  modal_window  =  GetTopMostAndVisiblePopupModal ( ) ;   
			
		
	
		
			
				
					    const  bool  dim_bg_for_modal  =  ( modal_window  ! =  NULL ) ;   
			
		
	
		
			
				
					    const  bool  dim_bg_for_window_list  =  ( g . NavWindowingTargetAnim  ! =  NULL  & &  g . NavWindowingTargetAnim - > Active ) ;   
			
		
	
		
			
				
					    if  ( ! dim_bg_for_modal  & &  ! dim_bg_for_window_list )   
			
		
	
		
			
				
					        return ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( dim_bg_for_modal )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        // Draw dimming behind modal
   
			
		
	
		
			
				
					        RenderDimmedBackgroundBehindWindow ( modal_window ,  GetColorU32 ( ImGuiCol_ModalWindowDimBg ,  g . DimBgRatio ) ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    else  if  ( dim_bg_for_window_list )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        // Draw dimming behind CTRL+Tab target window
   
			
		
	
		
			
				
					        RenderDimmedBackgroundBehindWindow ( g . NavWindowingTargetAnim ,  GetColorU32 ( ImGuiCol_NavWindowingDimBg ,  g . DimBgRatio ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Draw border around CTRL+Tab target window
   
			
		
	
		
			
				
					        ImGuiWindow *  window  =  g . NavWindowingTargetAnim ;   
			
		
	
		
			
				
					        ImGuiViewport *  viewport  =  GetMainViewport ( ) ;   
			
		
	
		
			
				
					        float  distance  =  g . FontSize ;   
			
		
	
		
			
				
					        ImRect  bb  =  window - > Rect ( ) ;   
			
		
	
		
			
				
					        bb . Expand ( distance ) ;   
			
		
	
		
			
				
					        if  ( bb . GetWidth ( )  > =  viewport - > Size . x  & &  bb . GetHeight ( )  > =  viewport - > Size . y )   
			
		
	
		
			
				
					            bb . Expand ( - distance  -  1.0f ) ;  // If a window fits the entire viewport, adjust its highlight inward
   
			
		
	
		
			
				
					        window - > DrawList - > PushClipRect ( viewport - > Pos ,  viewport - > Pos  +  viewport - > Size ) ;   
			
		
	
		
			
				
					        window - > DrawList - > AddRect ( bb . Min ,  bb . Max ,  GetColorU32 ( ImGuiCol_NavWindowingHighlight ,  g . NavWindowingHighlightAlpha ) ,  window - > WindowRounding ,  0 ,  3.0f ) ;   
			
		
	
		
			
				
					        window - > DrawList - > PopClipRect ( ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal.
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -4502,9 +4552,6 @@ void ImGui::EndFrame() 
			
		
	
		
			
				
					    // Initiate moving window + handle left-click and right-click focus
   
			
		
	
		
			
				
					    UpdateMouseMovingWindowEndFrame ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Draw modal/window whitening backgrounds
   
			
		
	
		
			
				
					    EndFrameDrawDimmedBackgrounds ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Sort the window list so that all child windows are after their parent
   
			
		
	
		
			
				
					    // We cannot do that on FocusWindow() because children may not exist yet
   
			
		
	
		
			
				
					    g . WindowsTempSortBuffer . resize ( 0 ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -4574,6 +4621,10 @@ void ImGui::Render() 
			
		
	
		
			
				
					        if  ( windows_to_render_top_most [ n ]  & &  IsWindowActiveAndVisible ( windows_to_render_top_most [ n ] ) )  // NavWindowingTarget is always temporarily displayed as the top-most window
   
			
		
	
		
			
				
					            AddRootWindowToDrawData ( windows_to_render_top_most [ n ] ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Draw modal/window whitening backgrounds
   
			
		
	
		
			
				
					    if  ( first_render_of_frame )   
			
		
	
		
			
				
					        RenderDimmedBackgrounds ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Setup ImDrawData structures for end-user
   
			
		
	
		
			
				
					    g . IO . MetricsRenderVertices  =  g . IO . MetricsRenderIndices  =  0 ;   
			
		
	
		
			
				
					    for  ( int  n  =  0 ;  n  <  g . Viewports . Size ;  n + + )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -6248,24 +6299,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
			
		
	
		
			
				
					        window - > DrawList - > PushTextureID ( g . Font - > ContainerAtlas - > TexID ) ;   
			
		
	
		
			
				
					        PushClipRect ( host_rect . Min ,  host_rect . Max ,  false ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Draw modal window background (darkens what is behind them, all viewports)
   
			
		
	
		
			
				
					        const  bool  dim_bg_for_modal  =  ( flags  &  ImGuiWindowFlags_Modal )  & &  window  = =  GetTopMostPopupModal ( )  & &  window - > HiddenFramesCannotSkipItems  < =  0 ;   
			
		
	
		
			
				
					        const  bool  dim_bg_for_window_list  =  g . NavWindowingTargetAnim  & &  ( window  = =  g . NavWindowingTargetAnim - > RootWindow ) ;   
			
		
	
		
			
				
					        if  ( dim_bg_for_modal  | |  dim_bg_for_window_list )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            const  ImU32  dim_bg_col  =  GetColorU32 ( dim_bg_for_modal  ?  ImGuiCol_ModalWindowDimBg  :  ImGuiCol_NavWindowingDimBg ,  g . DimBgRatio ) ;   
			
		
	
		
			
				
					            window - > DrawList - > AddRectFilled ( viewport_rect . Min ,  viewport_rect . Max ,  dim_bg_col ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Draw navigation selection/windowing rectangle background
   
			
		
	
		
			
				
					        if  ( dim_bg_for_window_list  & &  window  = =  g . NavWindowingTargetAnim )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            ImRect  bb  =  window - > Rect ( ) ;   
			
		
	
		
			
				
					            bb . Expand ( g . FontSize ) ;   
			
		
	
		
			
				
					            if  ( ! bb . Contains ( viewport_rect ) )  // Avoid drawing if the window covers all the viewport anyway
   
			
		
	
		
			
				
					                window - > DrawList - > AddRectFilled ( bb . Min ,  bb . Max ,  GetColorU32 ( ImGuiCol_NavWindowingHighlight ,  g . NavWindowingHighlightAlpha  *  0.25f ) ,  g . Style . WindowRounding ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Child windows can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call (since 1.71)
   
			
		
	
		
			
				
					        // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order.
   
			
		
	
		
			
				
					        // FIXME: User code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected (github #4493)
   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -6293,20 +6326,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
			
		
	
		
			
				
					                window - > DrawList  =  & window - > DrawListInst ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Draw navigation selection/windowing rectangle border
   
			
		
	
		
			
				
					        if  ( g . NavWindowingTargetAnim  = =  window )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            float  rounding  =  ImMax ( window - > WindowRounding ,  g . Style . WindowRounding ) ;   
			
		
	
		
			
				
					            ImRect  bb  =  window - > Rect ( ) ;   
			
		
	
		
			
				
					            bb . Expand ( g . FontSize ) ;   
			
		
	
		
			
				
					            if  ( bb . Contains ( viewport_rect ) )  // If a window fits the entire viewport, adjust its highlight inward
   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                bb . Expand ( - g . FontSize  -  1.0f ) ;   
			
		
	
		
			
				
					                rounding  =  window - > WindowRounding ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            window - > DrawList - > AddRect ( bb . Min ,  bb . Max ,  GetColorU32 ( ImGuiCol_NavWindowingHighlight ,  g . NavWindowingHighlightAlpha ) ,  rounding ,  0 ,  3.0f ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING)
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // Work rectangle.
   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -8363,6 +8382,16 @@ ImGuiWindow* ImGui::GetTopMostPopupModal() 
			
		
	
		
			
				
					    return  NULL ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					ImGuiWindow *  ImGui : : GetTopMostAndVisiblePopupModal ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    for  ( int  n  =  g . OpenPopupStack . Size  -  1 ;  n  > =  0 ;  n - - )   
			
		
	
		
			
				
					        if  ( ImGuiWindow *  popup  =  g . OpenPopupStack . Data [ n ] . Window )   
			
		
	
		
			
				
					            if  ( ( popup - > Flags  &  ImGuiWindowFlags_Modal )  & &  IsWindowActiveAndVisible ( popup ) )   
			
		
	
		
			
				
					                return  popup ;   
			
		
	
		
			
				
					    return  NULL ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  ImGui : : OpenPopup ( const  char *  str_id ,  ImGuiPopupFlags  popup_flags )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;