@ -5712,9 +5712,9 @@ static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& s 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( ! ( window - > Flags  &  ( ImGuiWindowFlags_ChildWindow  |  ImGuiWindowFlags_AlwaysAutoResize ) ) )   
					 
					 
					 
					    if  ( ! ( window - > Flags  &  ( ImGuiWindowFlags_ChildWindow  |  ImGuiWindowFlags_AlwaysAutoResize ) ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ImGuiWindow *  window_for_height  =  GetWindowForTitleAndMenuHeight ( window ) ;   
					 
					 
					 
					        ImGuiWindow *  window_for_height  =  GetWindowForTitleAndMenuHeight ( window ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  float  decoration_up_height  =  window_for_height - > TitleBarHeight ( )  +  window_for_height - > MenuBarHeight ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        new_size  =  ImMax ( new_size ,  g . Style . WindowMinSize ) ;   
					 
					 
					 
					        new_size  =  ImMax ( new_size ,  g . Style . WindowMinSize ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        new_size . y  =  ImMax ( new_size . y ,  decoration_up_height  +  ImMax ( 0.0f ,  g . Style . WindowRounding  -  1.0f ) ) ;  // Reduce artifacts with very small windows
   
					 
					 
					 
					        const  float  minimum_height  =  window_for_height - > TitleBarHeight ( )  +  window_for_height - > MenuBarHeight ( )  +  ImMax ( 0.0f ,  g . Style . WindowRounding  -  1.0f ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        new_size . y  =  ImMax ( new_size . y ,  minimum_height ) ;  // Reduce artifacts with very small windows
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    return  new_size ;   
					 
					 
					 
					    return  new_size ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -5743,9 +5743,10 @@ static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_cont 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImGuiContext &  g  =  * GImGui ;   
					 
					 
					 
					    ImGuiContext &  g  =  * GImGui ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImGuiStyle &  style  =  g . Style ;   
					 
					 
					 
					    ImGuiStyle &  style  =  g . Style ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  float  decoration_up_height  =  window - > TitleBarHeight ( )  +  window - > MenuBarHeight ( ) ;   
					 
					 
					 
					    const  float  decoration_w_without_scrollbars  =  window - > DecoOuterSizeX1  +  window - > DecoOuterSizeX2  -  window - > ScrollbarSizes . x ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    const  float  decoration_h_without_scrollbars  =  window - > DecoOuterSizeY1  +  window - > DecoOuterSizeY2  -  window - > ScrollbarSizes . y ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImVec2  size_pad  =  window - > WindowPadding  *  2.0f ;   
					 
					 
					 
					    ImVec2  size_pad  =  window - > WindowPadding  *  2.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImVec2  size_desired  =  size_contents  +  size_pad  +  ImVec2 ( 0.0f ,  decoration_up_height ) ;   
					 
					 
					 
					    ImVec2  size_desired  =  size_contents  +  size_pad  +  ImVec2 ( decoration_w_without_scrollbars ,  decoration_h_without_scrollbars ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( window - > Flags  &  ImGuiWindowFlags_Tooltip )   
					 
					 
					 
					    if  ( window - > Flags  &  ImGuiWindowFlags_Tooltip )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Tooltip always resize
   
					 
					 
					 
					        // Tooltip always resize
   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -5771,8 +5772,8 @@ static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_cont 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // When the window cannot fit all contents (either because of constraints, either because screen is too small),
   
					 
					 
					 
					        // When the window cannot fit all contents (either because of constraints, either because screen is too small),
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding.
   
					 
					 
					 
					        // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ImVec2  size_auto_fit_after_constraint  =  CalcWindowSizeAfterConstraint ( window ,  size_auto_fit ) ;   
					 
					 
					 
					        ImVec2  size_auto_fit_after_constraint  =  CalcWindowSizeAfterConstraint ( window ,  size_auto_fit ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        bool  will_have_scrollbar_x  =  ( size_auto_fit_after_constraint . x  -  size_pad . x  -  0.0f                   <  size_contents . x  & &  ! ( window - > Flags  &  ImGuiWindowFlags_NoScrollbar )  & &  ( window - > Flags  &  ImGuiWindowFlags_HorizontalScrollbar ) )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysHorizontalScrollbar ) ;   
					 
					 
					 
					        bool  will_have_scrollbar_x  =  ( size_auto_fit_after_constraint . x  -  size_pad . x  -  decoration_w_without_scrollbars   <  size_contents . x    & &  ! ( window - > Flags  &  ImGuiWindowFlags_NoScrollbar )  & &  ( window - > Flags  &  ImGuiWindowFlags_HorizontalScrollbar ) )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysHorizontalScrollbar ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        bool  will_have_scrollbar_y  =  ( size_auto_fit_after_constraint . y  -  size_pad . y  -  decoration_up_height   <  size_contents . y  & &  ! ( window - > Flags  &  ImGuiWindowFlags_NoScrollbar ) )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysVerticalScrollbar ) ;   
					 
					 
					 
					        bool  will_have_scrollbar_y  =  ( size_auto_fit_after_constraint . y  -  size_pad . y  -  decoration_h_without_scrollbars   <  size_contents . y  & &  ! ( window - > Flags  &  ImGuiWindowFlags_NoScrollbar ) )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysVerticalScrollbar ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( will_have_scrollbar_x )   
					 
					 
					 
					        if  ( will_have_scrollbar_x )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            size_auto_fit . y  + =  style . ScrollbarSize ;   
					 
					 
					 
					            size_auto_fit . y  + =  style . ScrollbarSize ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( will_have_scrollbar_y )   
					 
					 
					 
					        if  ( will_have_scrollbar_y )   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -6659,6 +6660,15 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // SIZE
   
					 
					 
					 
					        // SIZE
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        // Outer Decoration Sizes
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        // (we need to clear ScrollbarSize immediatly as CalcWindowAutoFitSize() needs it and can be called from other locations).
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        const  ImVec2  scrollbar_sizes_from_last_frame  =  window - > ScrollbarSizes ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        window - > DecoOuterSizeX1  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        window - > DecoOuterSizeX2  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        window - > DecoOuterSizeY1  =  window - > TitleBarHeight ( )  +  window - > MenuBarHeight ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        window - > DecoOuterSizeY2  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        window - > ScrollbarSizes  =  ImVec2 ( 0.0f ,  0.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Calculate auto-fit size, handle automatic resize
   
					 
					 
					 
					        // Calculate auto-fit size, handle automatic resize
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  ImVec2  size_auto_fit  =  CalcWindowAutoFitSize ( window ,  window - > ContentSizeIdeal ) ;   
					 
					 
					 
					        const  ImVec2  size_auto_fit  =  CalcWindowAutoFitSize ( window ,  window - > ContentSizeIdeal ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( ( flags  &  ImGuiWindowFlags_AlwaysAutoResize )  & &  ! window - > Collapsed )   
					 
					 
					 
					        if  ( ( flags  &  ImGuiWindowFlags_AlwaysAutoResize )  & &  ! window - > Collapsed )   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -6697,9 +6707,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > SizeFull  =  CalcWindowSizeAfterConstraint ( window ,  window - > SizeFull ) ;   
					 
					 
					 
					        window - > SizeFull  =  CalcWindowSizeAfterConstraint ( window ,  window - > SizeFull ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > Size  =  window - > Collapsed  & &  ! ( flags  &  ImGuiWindowFlags_ChildWindow )  ?  window - > TitleBarRect ( ) . GetSize ( )  :  window - > SizeFull ;   
					 
					 
					 
					        window - > Size  =  window - > Collapsed  & &  ! ( flags  &  ImGuiWindowFlags_ChildWindow )  ?  window - > TitleBarRect ( ) . GetSize ( )  :  window - > SizeFull ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Decoration size
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  float  decoration_up_height  =  window - > TitleBarHeight ( )  +  window - > MenuBarHeight ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // POSITION
   
					 
					 
					 
					        // POSITION
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Popup latch its initial position, will position itself when it appears next frame
   
					 
					 
					 
					        // Popup latch its initial position, will position itself when it appears next frame
   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -6857,9 +6864,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( ! window - > Collapsed )   
					 
					 
					 
					        if  ( ! window - > Collapsed )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        {   
					 
					 
					 
					        {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            // When reading the current size we need to read it after size constraints have been applied.
   
					 
					 
					 
					            // When reading the current size we need to read it after size constraints have been applied.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            // When we use InnerRect here we are intentionally reading last frame size, same for ScrollbarSizes values before we set them again.
   
					 
					 
					 
					            // Intentionally use previous frame values for InnerRect and ScrollbarSizes.
   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            ImVec2  avail_size_from_current_frame  =  ImVec2 ( window - > SizeFull . x ,  window - > SizeFull . y  -  decoration_up_height ) ;   
					 
					 
					 
					            // And when we use window->DecorationUp here it doesn't have ScrollbarSizes.y applied yet.
   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            ImVec2  avail_size_from_last_frame  =  window - > InnerRect . GetSize ( )  +  window - > ScrollbarSizes ;   
					 
					 
					 
					            ImVec2  avail_size_from_current_frame  =  ImVec2 ( window - > SizeFull . x ,  window - > SizeFull . y  -  ( window - > DecoOuterSizeY1  +  window - > DecoOuterSizeY2 ) ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            ImVec2  avail_size_from_last_frame  =  window - > InnerRect . GetSize ( )  +  scrollbar_sizes_from_last_frame ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            ImVec2  needed_size_from_last_frame  =  window_just_created  ?  ImVec2 ( 0 ,  0 )  :  window - > ContentSize  +  window - > WindowPadding  *  2.0f ;   
					 
					 
					 
					            ImVec2  needed_size_from_last_frame  =  window_just_created  ?  ImVec2 ( 0 ,  0 )  :  window - > ContentSize  +  window - > WindowPadding  *  2.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            float  size_x_for_scrollbars  =  use_current_size_for_scrollbar_x  ?  avail_size_from_current_frame . x  :  avail_size_from_last_frame . x ;   
					 
					 
					 
					            float  size_x_for_scrollbars  =  use_current_size_for_scrollbar_x  ?  avail_size_from_current_frame . x  :  avail_size_from_last_frame . x ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            float  size_y_for_scrollbars  =  use_current_size_for_scrollbar_y  ?  avail_size_from_current_frame . y  :  avail_size_from_last_frame . y ;   
					 
					 
					 
					            float  size_y_for_scrollbars  =  use_current_size_for_scrollbar_y  ?  avail_size_from_current_frame . y  :  avail_size_from_last_frame . y ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -6869,6 +6877,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            if  ( window - > ScrollbarX  & &  ! window - > ScrollbarY )   
					 
					 
					 
					            if  ( window - > ScrollbarX  & &  ! window - > ScrollbarY )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                window - > ScrollbarY  =  ( needed_size_from_last_frame . y  >  size_y_for_scrollbars )  & &  ! ( flags  &  ImGuiWindowFlags_NoScrollbar ) ;   
					 
					 
					 
					                window - > ScrollbarY  =  ( needed_size_from_last_frame . y  >  size_y_for_scrollbars )  & &  ! ( flags  &  ImGuiWindowFlags_NoScrollbar ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            window - > ScrollbarSizes  =  ImVec2 ( window - > ScrollbarY  ?  style . ScrollbarSize  :  0.0f ,  window - > ScrollbarX  ?  style . ScrollbarSize  :  0.0f ) ;   
					 
					 
					 
					            window - > ScrollbarSizes  =  ImVec2 ( window - > ScrollbarY  ?  style . ScrollbarSize  :  0.0f ,  window - > ScrollbarX  ?  style . ScrollbarSize  :  0.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            // Amend the partially filled window->DecorationXXX values.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            window - > DecoOuterSizeX2  + =  window - > ScrollbarSizes . x ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            window - > DecoOuterSizeY2  + =  window - > ScrollbarSizes . y ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
   
					 
					 
					 
					        // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -6894,10 +6906,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // - ScrollToRectEx()
   
					 
					 
					 
					        // - ScrollToRectEx()
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // - NavUpdatePageUpPageDown()
   
					 
					 
					 
					        // - NavUpdatePageUpPageDown()
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // - Scrollbar()
   
					 
					 
					 
					        // - Scrollbar()
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > InnerRect . Min . x  =  window - > Pos . x ;   
					 
					 
					 
					        window - > InnerRect . Min . x  =  window - > Pos . x  +  window - > DecoOuterSizeX1  ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > InnerRect . Min . y  =  window - > Pos . y  +  decoration_up_height ;   
					 
					 
					 
					        window - > InnerRect . Min . y  =  window - > Pos . y  +  window - > DecoOuterSizeY1 ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > InnerRect . Max . x  =  window - > Pos . x  +  window - > Size . x  -  window - > ScrollbarSizes . x ;   
					 
					 
					 
					        window - > InnerRect . Max . x  =  window - > Pos . x  +  window - > Size . x  -  window - > DecoOuterSizeX2 ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > InnerRect . Max . y  =  window - > Pos . y  +  window - > Size . y  -  window - > ScrollbarSizes . y ;   
					 
					 
					 
					        window - > InnerRect . Max . y  =  window - > Pos . y  +  window - > Size . y  -  window - > DecoOuterSizeY2 ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Inner clipping rectangle.
   
					 
					 
					 
					        // Inner clipping rectangle.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Will extend a little bit outside the normal work region.
   
					 
					 
					 
					        // Will extend a little bit outside the normal work region.
   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -6930,6 +6942,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Apply scrolling
   
					 
					 
					 
					        // Apply scrolling
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > Scroll  =  CalcNextScrollFromScrollTargetAndClamp ( window ) ;   
					 
					 
					 
					        window - > Scroll  =  CalcNextScrollFromScrollTargetAndClamp ( window ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > ScrollTarget  =  ImVec2 ( FLT_MAX ,  FLT_MAX ) ;   
					 
					 
					 
					        window - > ScrollTarget  =  ImVec2 ( FLT_MAX ,  FLT_MAX ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        window - > DecoInnerSizeX1  =  window - > DecoInnerSizeY1  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // DRAWING
   
					 
					 
					 
					        // DRAWING
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -6976,8 +6989,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // - BeginTabBar() for right-most edge
   
					 
					 
					 
					        // - BeginTabBar() for right-most edge
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  bool  allow_scrollbar_x  =  ! ( flags  &  ImGuiWindowFlags_NoScrollbar )  & &  ( flags  &  ImGuiWindowFlags_HorizontalScrollbar ) ;   
					 
					 
					 
					        const  bool  allow_scrollbar_x  =  ! ( flags  &  ImGuiWindowFlags_NoScrollbar )  & &  ( flags  &  ImGuiWindowFlags_HorizontalScrollbar ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  bool  allow_scrollbar_y  =  ! ( flags  &  ImGuiWindowFlags_NoScrollbar ) ;   
					 
					 
					 
					        const  bool  allow_scrollbar_y  =  ! ( flags  &  ImGuiWindowFlags_NoScrollbar ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  float  work_rect_size_x  =  ( window - > ContentSizeExplicit . x  ! =  0.0f  ?  window - > ContentSizeExplicit . x  :  ImMax ( allow_scrollbar_x  ?  window - > ContentSize . x  :  0.0f ,  window - > Size . x  -  window - > WindowPadding . x  *  2.0f  -  window - > ScrollbarSizes . x ) ) ;   
					 
					 
					 
					        const  float  work_rect_size_x  =  ( window - > ContentSizeExplicit . x  ! =  0.0f  ?  window - > ContentSizeExplicit . x  :  ImMax ( allow_scrollbar_x  ?  window - > ContentSize . x  :  0.0f ,  window - > Size . x  -  window - > WindowPadding . x  *  2.0f  -  ( window - > DecoOuterSizeX1  +  window - > DecoOuterSizeX2 ) ) ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        const  float  work_rect_size_y  =  ( window - > ContentSizeExplicit . y  ! =  0.0f  ?  window - > ContentSizeExplicit . y  :  ImMax ( allow_scrollbar_y  ?  window - > ContentSize . y  :  0.0f ,  window - > Size . y  -  window - > WindowPadding . y  *  2.0f  -  decoration_up_height  -  window - > ScrollbarSizes . y ) ) ;   
					 
					 
					 
					        const  float  work_rect_size_y  =  ( window - > ContentSizeExplicit . y  ! =  0.0f  ?  window - > ContentSizeExplicit . y  :  ImMax ( allow_scrollbar_y  ?  window - > ContentSize . y  :  0.0f ,  window - > Size . y  -  window - > WindowPadding . y  *  2.0f  -  ( window - > DecoOuterSizeY1  +  window - > DecoOuterSizeY2 ) ) ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        window - > WorkRect . Min . x  =  ImFloor ( window - > InnerRect . Min . x  -  window - > Scroll . x  +  ImMax ( window - > WindowPadding . x ,  window - > WindowBorderSize ) ) ;   
					 
					 
					 
					        window - > WorkRect . Min . x  =  ImFloor ( window - > InnerRect . Min . x  -  window - > Scroll . x  +  ImMax ( window - > WindowPadding . x ,  window - > WindowBorderSize ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > WorkRect . Min . y  =  ImFloor ( window - > InnerRect . Min . y  -  window - > Scroll . y  +  ImMax ( window - > WindowPadding . y ,  window - > WindowBorderSize ) ) ;   
					 
					 
					 
					        window - > WorkRect . Min . y  =  ImFloor ( window - > InnerRect . Min . y  -  window - > Scroll . y  +  ImMax ( window - > WindowPadding . y ,  window - > WindowBorderSize ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > WorkRect . Max . x  =  window - > WorkRect . Min . x  +  work_rect_size_x ;   
					 
					 
					 
					        window - > WorkRect . Max . x  =  window - > WorkRect . Min . x  +  work_rect_size_x ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -6988,21 +7001,21 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
   
					 
					 
					 
					        // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Used by:
   
					 
					 
					 
					        // Used by:
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // - Mouse wheel scrolling + many other things
   
					 
					 
					 
					        // - Mouse wheel scrolling + many other things
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > ContentRegionRect . Min . x  =  window - > Pos . x  -  window - > Scroll . x  +  window - > WindowPadding . x ;   
					 
					 
					 
					        window - > ContentRegionRect . Min . x  =  window - > Pos . x  -  window - > Scroll . x  +  window - > WindowPadding . x  +  window - > DecoOuterSizeX1  ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > ContentRegionRect . Min . y  =  window - > Pos . y  -  window - > Scroll . y  +  window - > WindowPadding . y  +  decoration_up_height ;   
					 
					 
					 
					        window - > ContentRegionRect . Min . y  =  window - > Pos . y  -  window - > Scroll . y  +  window - > WindowPadding . y  +  window - > DecoOuterSizeY1 ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > ContentRegionRect . Max . x  =  window - > ContentRegionRect . Min . x  +  ( window - > ContentSizeExplicit . x  ! =  0.0f  ?  window - > ContentSizeExplicit . x  :  ( window - > Size . x  -  window - > WindowPadding . x  *  2.0f  -  window - > ScrollbarSizes . x ) ) ;   
					 
					 
					 
					        window - > ContentRegionRect . Max . x  =  window - > ContentRegionRect . Min . x  +  ( window - > ContentSizeExplicit . x  ! =  0.0f  ?  window - > ContentSizeExplicit . x  :  ( window - > Size . x  -  window - > WindowPadding . x  *  2.0f  -  ( window - > DecoOuterSizeX1  +  window - > DecoOuterSizeX2 ) ) ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > ContentRegionRect . Max . y  =  window - > ContentRegionRect . Min . y  +  ( window - > ContentSizeExplicit . y  ! =  0.0f  ?  window - > ContentSizeExplicit . y  :  ( window - > Size . y  -  window - > WindowPadding . y  *  2.0f  -  decoration_up_height  -  window - > ScrollbarSizes . y ) ) ;   
					 
					 
					 
					        window - > ContentRegionRect . Max . y  =  window - > ContentRegionRect . Min . y  +  ( window - > ContentSizeExplicit . y  ! =  0.0f  ?  window - > ContentSizeExplicit . y  :  ( window - > Size . y  -  window - > WindowPadding . y  *  2.0f  -  ( window - > DecoOuterSizeY1  +  window - > DecoOuterSizeY2 ) ) ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Setup drawing context
   
					 
					 
					 
					        // Setup drawing context
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
   
					 
					 
					 
					        // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > DC . Indent . x  =  0.0f   +  window - > WindowPadding . x  -  window - > Scroll . x ;   
					 
					 
					 
					        window - > DC . Indent . x  =  window - > DecoOuterSizeX1   +  window - > WindowPadding . x  -  window - > Scroll . x ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        window - > DC . GroupOffset . x  =  0.0f ;   
					 
					 
					 
					        window - > DC . GroupOffset . x  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > DC . ColumnsOffset . x  =  0.0f ;   
					 
					 
					 
					        window - > DC . ColumnsOffset . x  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // Record the loss of precision of CursorStartPos which can happen due to really large scrolling amount.
   
					 
					 
					 
					        // Record the loss of precision of CursorStartPos which can happen due to really large scrolling amount.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        // This is used by clipper to compensate and fix the most common use case of large scroll area. Easy and cheap, next best thing compared to switching everything to double or ImU64.
   
					 
					 
					 
					        // This is used by clipper to compensate and fix the most common use case of large scroll area. Easy and cheap, next best thing compared to switching everything to double or ImU64.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        double  start_pos_highp_x  =  ( double ) window - > Pos . x  +  window - > WindowPadding . x  -  ( double ) window - > Scroll . x  +  window - > DC . ColumnsOffset . x ;   
					 
					 
					 
					        double  start_pos_highp_x  =  ( double ) window - > Pos . x  +  window - > WindowPadding . x  -  ( double ) window - > Scroll . x  +  window - > DecoOuterSizeX1  +  window - > D C . ColumnsOffset . x ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        double  start_pos_highp_y  =  ( double ) window - > Pos . y  +  window - > WindowPadding . y  -  ( double ) window - > Scroll . y  +  decoration_up_height ;   
					 
					 
					 
					        double  start_pos_highp_y  =  ( double ) window - > Pos . y  +  window - > WindowPadding . y  -  ( double ) window - > Scroll . y  +  window - > DecoOuterSizeY1 ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        window - > DC . CursorStartPos   =  ImVec2 ( ( float ) start_pos_highp_x ,  ( float ) start_pos_highp_y ) ;   
					 
					 
					 
					        window - > DC . CursorStartPos   =  ImVec2 ( ( float ) start_pos_highp_x ,  ( float ) start_pos_highp_y ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > DC . CursorStartPosLossyness  =  ImVec2 ( ( float ) ( start_pos_highp_x  -  window - > DC . CursorStartPos . x ) ,  ( float ) ( start_pos_highp_y  -  window - > DC . CursorStartPos . y ) ) ;   
					 
					 
					 
					        window - > DC . CursorStartPosLossyness  =  ImVec2 ( ( float ) ( start_pos_highp_x  -  window - > DC . CursorStartPos . x ) ,  ( float ) ( start_pos_highp_y  -  window - > DC . CursorStartPos . y ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        window - > DC . CursorPos  =  window - > DC . CursorStartPos ;   
					 
					 
					 
					        window - > DC . CursorPos  =  window - > DC . CursorStartPos ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -10232,38 +10245,24 @@ static float CalcScrollEdgeSnap(float target, float snap_min, float snap_max, fl 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImVec2  CalcNextScrollFromScrollTargetAndClamp ( ImGuiWindow *  window )  
					 
					 
					 
					static  ImVec2  CalcNextScrollFromScrollTargetAndClamp ( ImGuiWindow *  window )  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImVec2  scroll  =  window - > Scroll ;   
					 
					 
					 
					    ImVec2  scroll  =  window - > Scroll ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( window - > ScrollTarget . x  <  FLT_MAX )   
					 
					 
					 
					    ImVec2  decoration_size ( window - > DecoOuterSizeX1  +  window - > DecoInnerSizeX1  +  window - > DecoOuterSizeX2 ,  window - > DecoOuterSizeY1  +  window - > DecoInnerSizeY1  +  window - > DecoOuterSizeY2 ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    for  ( int  axis  =  0 ;  axis  <  2 ;  axis + + )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        float  decoration_total_width  =  window - > ScrollbarSizes . x ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        float  center_x_ratio  =  window - > ScrollTargetCenterRatio . x ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        float  scroll_target_x  =  window - > ScrollTarget . x ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( window - > ScrollTargetEdgeSnapDist . x  >  0.0f )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            float  snap_x_min  =  0.0f ;   
					 
					 
					 
					        if  ( window - > ScrollTarget [ axis ]  <  FLT_MAX )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            float  snap_x_max  =  window - > ScrollMax . x  +  window - > SizeFull . x  -  decoration_total_width ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            scroll_target_x  =  CalcScrollEdgeSnap ( scroll_target_x ,  snap_x_min ,  snap_x_max ,  window - > ScrollTargetEdgeSnapDist . x ,  center_x_ratio ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        scroll . x  =  scroll_target_x  -  center_x_ratio  *  ( window - > SizeFull . x  -  decoration_total_width ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( window - > ScrollTarget . y  <  FLT_MAX )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        {   
					 
					 
					 
					        {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        float  decoration_total_height  =  window - > TitleBarHeight ( )  +  window - > MenuBarHeight ( )  +  window - > ScrollbarSizes . y ;   
					 
					 
					 
					            float  center_ratio  =  window - > ScrollTargetCenterRatio [ axis ] ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        float  center_y_ratio  =  window - > ScrollTargetCenterRatio . y ;   
					 
					 
					 
					            float  scroll_target  =  window - > ScrollTarget [ axis ] ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        float  scroll_target_y  =  window - > ScrollTarget . y ;   
					 
					 
					 
					            if  ( window - > ScrollTargetEdgeSnapDist [ axis ]  >  0.0f )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( window - > ScrollTargetEdgeSnapDist . y  >  0.0f )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            {   
					 
					 
					 
					            {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            float  snap_y _min  =  0.0f ;   
					 
					 
					 
					                float  snap_min  =  0.0f ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            float  snap_y _max  =  window - > ScrollMax . y   +  window - > SizeFull . y  -  decoration_total_height ;   
					 
					 
					 
					                 float  snap_max  =  window - > ScrollMax [ axis ]   +  window - > SizeFull [ axis ]  -  decoration_size [ axis ] ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            scroll_target_y   =  CalcScrollEdgeSnap ( scroll_target_y  ,  snap_y_ min ,  snap_y _max ,  window - > ScrollTargetEdgeSnapDist . y ,  center_y _ratio ) ;   
					 
					 
					 
					                 scroll_target  =  CalcScrollEdgeSnap ( scroll_target ,  snap_min ,  snap_max ,  window - > ScrollTargetEdgeSnapDist [ axis ] ,  center_ratio ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            }   
					 
					 
					 
					            }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        scroll . y   =  scroll_target_y   -  center_y _ratio  *  ( window - > SizeFull . y  -  decoration_total_height ) ;   
					 
					 
					 
					            scroll [ axis ]   =  scroll_target  -  center_ratio  *  ( window - > SizeFull [ axis ]  -  decoration_size [ axis ] ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    scroll . x  =  IM_FLOOR ( ImMax ( scroll . x ,  0.0f ) ) ;   
					 
					 
					 
					        scroll [ axis ]  =  IM_FLOOR ( ImMax ( scroll [ axis ] ,  0.0f ) ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    scroll . y  =  IM_FLOOR ( ImMax ( scroll . y ,  0.0f ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( ! window - > Collapsed  & &  ! window - > SkipItems )   
					 
					 
					 
					        if  ( ! window - > Collapsed  & &  ! window - > SkipItems )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					            scroll [ axis ]  =  ImMin ( scroll [ axis ] ,  window - > ScrollMax [ axis ] ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        scroll . x  =  ImMin ( scroll . x ,  window - > ScrollMax . x ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        scroll . y  =  ImMin ( scroll . y ,  window - > ScrollMax . y ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    return  scroll ;   
					 
					 
					 
					    return  scroll ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -10284,8 +10283,11 @@ void ImGui::ScrollToRect(ImGuiWindow* window, const ImRect& item_rect, ImGuiScro 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					ImVec2  ImGui : : ScrollToRectEx ( ImGuiWindow *  window ,  const  ImRect &  item_rect ,  ImGuiScrollFlags  flags )  
					 
					 
					 
					ImVec2  ImGui : : ScrollToRectEx ( ImGuiWindow *  window ,  const  ImRect &  item_rect ,  ImGuiScrollFlags  flags )  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImGuiContext &  g  =  * GImGui ;   
					 
					 
					 
					    ImGuiContext &  g  =  * GImGui ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImRect  window_rect ( window - > InnerRect . Min  -  ImVec2 ( 1 ,  1 ) ,  window - > InnerRect . Max  +  ImVec2 ( 1 ,  1 ) ) ;   
					 
					 
					 
					    ImRect  scroll_rect ( window - > InnerRect . Min  -  ImVec2 ( 1 ,  1 ) ,  window - > InnerRect . Max  +  ImVec2 ( 1 ,  1 ) ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    //GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
   
					 
					 
					 
					    scroll_rect . Min . x  =  ImMin ( scroll_rect . Min . x  +  window - > DecoInnerSizeX1 ,  scroll_rect . Max . x ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    scroll_rect . Min . y  =  ImMin ( scroll_rect . Min . y  +  window - > DecoInnerSizeY1 ,  scroll_rect . Max . y ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    //GetForegroundDrawList(window)->AddRect(item_rect.Min, item_rect.Max, IM_COL32(255,0,0,255), 0.0f, 0, 5.0f); // [DEBUG]
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    //GetForegroundDrawList(window)->AddRect(scroll_rect.Min, scroll_rect.Max, IM_COL32_WHITE); // [DEBUG]
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Check that only one behavior is selected per axis
   
					 
					 
					 
					    // Check that only one behavior is selected per axis
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    IM_ASSERT ( ( flags  &  ImGuiScrollFlags_MaskX_ )  = =  0  | |  ImIsPowerOfTwo ( flags  &  ImGuiScrollFlags_MaskX_ ) ) ;   
					 
					 
					 
					    IM_ASSERT ( ( flags  &  ImGuiScrollFlags_MaskX_ )  = =  0  | |  ImIsPowerOfTwo ( flags  &  ImGuiScrollFlags_MaskX_ ) ) ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -10298,16 +10300,16 @@ ImVec2 ImGui::ScrollToRectEx(ImGuiWindow* window, const ImRect& item_rect, ImGui 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( ( flags  &  ImGuiScrollFlags_MaskY_ )  = =  0 )   
					 
					 
					 
					    if  ( ( flags  &  ImGuiScrollFlags_MaskY_ )  = =  0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        flags  | =  window - > Appearing  ?  ImGuiScrollFlags_AlwaysCenterY  :  ImGuiScrollFlags_KeepVisibleEdgeY ;   
					 
					 
					 
					        flags  | =  window - > Appearing  ?  ImGuiScrollFlags_AlwaysCenterY  :  ImGuiScrollFlags_KeepVisibleEdgeY ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  bool  fully_visible_x  =  item_rect . Min . x  > =  window _rect. Min . x  & &  item_rect . Max . x  < =  window _rect. Max . x ;   
					 
					 
					 
					    const  bool  fully_visible_x  =  item_rect . Min . x  > =  scroll _rect. Min . x  & &  item_rect . Max . x  < =  scroll _rect. Max . x ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  bool  fully_visible_y  =  item_rect . Min . y  > =  window _rect. Min . y  & &  item_rect . Max . y  < =  window _rect. Max . y ;   
					 
					 
					 
					    const  bool  fully_visible_y  =  item_rect . Min . y  > =  scroll _rect. Min . y  & &  item_rect . Max . y  < =  scroll _rect. Max . y ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  bool  can_be_fully_visible_x  =  ( item_rect . GetWidth ( )  +  g . Style . ItemSpacing . x  *  2.0f )  < =  window _rect. GetWidth ( )  | |  ( window - > AutoFitFramesX  >  0 )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysAutoResize )  ! =  0 ;   
					 
					 
					 
					    const  bool  can_be_fully_visible_x  =  ( item_rect . GetWidth ( )  +  g . Style . ItemSpacing . x  *  2.0f )  < =  scroll _rect. GetWidth ( )  | |  ( window - > AutoFitFramesX  >  0 )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysAutoResize )  ! =  0 ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  bool  can_be_fully_visible_y  =  ( item_rect . GetHeight ( )  +  g . Style . ItemSpacing . y  *  2.0f )  < =  window _rect. GetHeight ( )  | |  ( window - > AutoFitFramesY  >  0 )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysAutoResize )  ! =  0 ;   
					 
					 
					 
					    const  bool  can_be_fully_visible_y  =  ( item_rect . GetHeight ( )  +  g . Style . ItemSpacing . y  *  2.0f )  < =  scroll _rect. GetHeight ( )  | |  ( window - > AutoFitFramesY  >  0 )  | |  ( window - > Flags  &  ImGuiWindowFlags_AlwaysAutoResize )  ! =  0 ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( ( flags  &  ImGuiScrollFlags_KeepVisibleEdgeX )  & &  ! fully_visible_x )   
					 
					 
					 
					    if  ( ( flags  &  ImGuiScrollFlags_KeepVisibleEdgeX )  & &  ! fully_visible_x )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( item_rect . Min . x  <  window _rect. Min . x  | |  ! can_be_fully_visible_x )   
					 
					 
					 
					        if  ( item_rect . Min . x  <  scroll _rect. Min . x  | |  ! can_be_fully_visible_x )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            SetScrollFromPosX ( window ,  item_rect . Min . x  -  g . Style . ItemSpacing . x  -  window - > Pos . x ,  0.0f ) ;   
					 
					 
					 
					            SetScrollFromPosX ( window ,  item_rect . Min . x  -  g . Style . ItemSpacing . x  -  window - > Pos . x ,  0.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        else  if  ( item_rect . Max . x  > =  window _rect. Max . x )   
					 
					 
					 
					        else  if  ( item_rect . Max . x  > =  scroll _rect. Max . x )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            SetScrollFromPosX ( window ,  item_rect . Max . x  +  g . Style . ItemSpacing . x  -  window - > Pos . x ,  1.0f ) ;   
					 
					 
					 
					            SetScrollFromPosX ( window ,  item_rect . Max . x  +  g . Style . ItemSpacing . x  -  window - > Pos . x ,  1.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else  if  ( ( ( flags  &  ImGuiScrollFlags_KeepVisibleCenterX )  & &  ! fully_visible_x )  | |  ( flags  &  ImGuiScrollFlags_AlwaysCenterX ) )   
					 
					 
					 
					    else  if  ( ( ( flags  &  ImGuiScrollFlags_KeepVisibleCenterX )  & &  ! fully_visible_x )  | |  ( flags  &  ImGuiScrollFlags_AlwaysCenterX ) )   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -10320,9 +10322,9 @@ ImVec2 ImGui::ScrollToRectEx(ImGuiWindow* window, const ImRect& item_rect, ImGui 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( ( flags  &  ImGuiScrollFlags_KeepVisibleEdgeY )  & &  ! fully_visible_y )   
					 
					 
					 
					    if  ( ( flags  &  ImGuiScrollFlags_KeepVisibleEdgeY )  & &  ! fully_visible_y )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( item_rect . Min . y  <  window _rect. Min . y  | |  ! can_be_fully_visible_y )   
					 
					 
					 
					        if  ( item_rect . Min . y  <  scroll _rect. Min . y  | |  ! can_be_fully_visible_y )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            SetScrollFromPosY ( window ,  item_rect . Min . y  -  g . Style . ItemSpacing . y  -  window - > Pos . y ,  0.0f ) ;   
					 
					 
					 
					            SetScrollFromPosY ( window ,  item_rect . Min . y  -  g . Style . ItemSpacing . y  -  window - > Pos . y ,  0.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        else  if  ( item_rect . Max . y  > =  window _rect. Max . y )   
					 
					 
					 
					        else  if  ( item_rect . Max . y  > =  scroll _rect. Max . y )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            SetScrollFromPosY ( window ,  item_rect . Max . y  +  g . Style . ItemSpacing . y  -  window - > Pos . y ,  1.0f ) ;   
					 
					 
					 
					            SetScrollFromPosY ( window ,  item_rect . Max . y  +  g . Style . ItemSpacing . y  -  window - > Pos . y ,  1.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else  if  ( ( ( flags  &  ImGuiScrollFlags_KeepVisibleCenterY )  & &  ! fully_visible_y )  | |  ( flags  &  ImGuiScrollFlags_AlwaysCenterY ) )   
					 
					 
					 
					    else  if  ( ( ( flags  &  ImGuiScrollFlags_KeepVisibleCenterY )  & &  ! fully_visible_y )  | |  ( flags  &  ImGuiScrollFlags_AlwaysCenterY ) )   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -10413,7 +10415,7 @@ void ImGui::SetScrollY(float scroll_y) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  ImGui : : SetScrollFromPosX ( ImGuiWindow *  window ,  float  local_x ,  float  center_x_ratio )  
					 
					 
					 
					void  ImGui : : SetScrollFromPosX ( ImGuiWindow *  window ,  float  local_x ,  float  center_x_ratio )  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    IM_ASSERT ( center_x_ratio  > =  0.0f  & &  center_x_ratio  < =  1.0f ) ;   
					 
					 
					 
					    IM_ASSERT ( center_x_ratio  > =  0.0f  & &  center_x_ratio  < =  1.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    window - > ScrollTarget . x  =  IM_FLOOR ( local_x  +  window - > Scroll . x ) ;  // Convert local position to scroll offset
   
					 
					 
					 
					    window - > ScrollTarget . x  =  IM_FLOOR ( local_x  -  window - > DecoOuterSizeX1  -  window - > DecoInnerSizeX1  +  window - > Scroll . x ) ;  // Convert local position to scroll offset
   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    window - > ScrollTargetCenterRatio . x  =  center_x_ratio ;   
					 
					 
					 
					    window - > ScrollTargetCenterRatio . x  =  center_x_ratio ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    window - > ScrollTargetEdgeSnapDist . x  =  0.0f ;   
					 
					 
					 
					    window - > ScrollTargetEdgeSnapDist . x  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -10421,9 +10423,7 @@ void ImGui::SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  ImGui : : SetScrollFromPosY ( ImGuiWindow *  window ,  float  local_y ,  float  center_y_ratio )  
					 
					 
					 
					void  ImGui : : SetScrollFromPosY ( ImGuiWindow *  window ,  float  local_y ,  float  center_y_ratio )  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    IM_ASSERT ( center_y_ratio  > =  0.0f  & &  center_y_ratio  < =  1.0f ) ;   
					 
					 
					 
					    IM_ASSERT ( center_y_ratio  > =  0.0f  & &  center_y_ratio  < =  1.0f ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  float  decoration_up_height  =  window - > TitleBarHeight ( )  +  window - > MenuBarHeight ( ) ;  // FIXME: Would be nice to have a more standardized access to our scrollable/client rect;
   
					 
					 
					 
					    window - > ScrollTarget . y  =  IM_FLOOR ( local_y  -  window - > DecoOuterSizeY1  -  window - > DecoInnerSizeY1  +  window - > Scroll . y ) ;  // Convert local position to scroll offset
   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    local_y  - =  decoration_up_height ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    window - > ScrollTarget . y  =  IM_FLOOR ( local_y  +  window - > Scroll . y ) ;  // Convert local position to scroll offset
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    window - > ScrollTargetCenterRatio . y  =  center_y_ratio ;   
					 
					 
					 
					    window - > ScrollTargetCenterRatio . y  =  center_y_ratio ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    window - > ScrollTargetEdgeSnapDist . y  =  0.0f ;   
					 
					 
					 
					    window - > ScrollTargetEdgeSnapDist . y  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -18711,8 +18711,8 @@ void ImGui::ShowMetricsWindow(bool* p_open) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsClipRect )           {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  c - > ClipRect ;  }   
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsClipRect )           {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  c - > ClipRect ;  }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentHeadersUsed ) {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y ,  c - > ContentMaxXHeadersUsed ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFirstRowHeight ) ;  }  // Note: y1/y2 not always accurate
   
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentHeadersUsed ) {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y ,  c - > ContentMaxXHeadersUsed ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFirstRowHeight ) ;  }  // Note: y1/y2 not always accurate
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentHeadersIdeal ) { ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y ,  c - > ContentMaxXHeadersIdeal ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFirstRowHeight ) ;  }   
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentHeadersIdeal ) { ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y ,  c - > ContentMaxXHeadersIdeal ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFirstRowHeight ) ;  }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentFrozen )      {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y ,  c - > ContentMaxXFrozen ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFirstRow Height ) ;  }   
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentFrozen )      {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y ,  c - > ContentMaxXFrozen ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFrozen Height ) ;  }   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentUnfrozen )    {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFirstRow Height ,  c - > ContentMaxXUnfrozen ,  table - > InnerClipRect . Max . y ) ;  }   
					 
					 
					 
					            else  if  ( rect_type  = =  TRT_ColumnsContentUnfrozen )    {  ImGuiTableColumn *  c  =  & table - > Columns [ n ] ;  return  ImRect ( c - > WorkMinX ,  table - > InnerClipRect . Min . y  +  table_instance - > LastFrozen Height ,  c - > ContentMaxXUnfrozen ,  table - > InnerClipRect . Max . y ) ;  }   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            IM_ASSERT ( 0 ) ;   
					 
					 
					 
					            IM_ASSERT ( 0 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            return  ImRect ( ) ;   
					 
					 
					 
					            return  ImRect ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }