@ -392,6 +392,17 @@ CODE 
			
		
	
		
			
				
					                        -  likewise  io . MousePos  and  GetMousePos ( )  will  use  OS  coordinates .   
			
		
	
		
			
				
					                          If  you  query  mouse  positions  to  interact  with  non - imgui  coordinates  you  will  need  to  offset  them ,  e . g .  subtract  GetWindowViewport ( ) - > Pos .   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					 -  2022 / 09 / 02  ( 1.89 )  -  obsoleted  using  SetCursorPos ( ) / SetCursorScreenPos ( )  to  extend  parent  window / cell  boundaries .   
			
		
	
		
			
				
					                       this  relates  to  when  moving  the  cursor  position  beyond  current  boundaries  WITHOUT  submitting  an  item .   
			
		
	
		
			
				
					                         -  previously  this  would  make  the  window  content  size  ~ 200 x200 :   
			
		
	
		
			
				
					                              Begin ( . . . )  +  SetCursorScreenPos ( GetCursorScreenPos ( )  +  ImVec2 ( 200 , 200 ) )  +  End ( ) ;   
			
		
	
		
			
				
					                         -  instead ,  please  submit  an  item :   
			
		
	
		
			
				
					                              Begin ( . . . )  +  SetCursorScreenPos ( GetCursorScreenPos ( )  +  ImVec2 ( 200 , 200 ) )  +  Dummy ( ImVec2 ( 0 , 0 ) )  +  End ( ) ;   
			
		
	
		
			
				
					                         -  alternative :   
			
		
	
		
			
				
					                              Begin ( . . . )  +  Dummy ( ImVec2 ( 200 , 200 ) )  +  End ( ) ;   
			
		
	
		
			
				
					                         -  content  size  is  now  only  extended  when  submitting  an  item !   
			
		
	
		
			
				
					                         -  with  ' # define  IMGUI_DISABLE_OBSOLETE_FUNCTIONS '  this  will  now  be  detected  and  assert .   
			
		
	
		
			
				
					                         -  without  ' # define  IMGUI_DISABLE_OBSOLETE_FUNCTIONS '  this  will  silently  be  fixed  until  we  obsolete  it .   
			
		
	
		
			
				
					 -  2022 / 08 / 03  ( 1.89 )  -  changed  signature  of  ImageButton ( )  function .  Kept  redirection  function  ( will  obsolete ) .   
			
		
	
		
			
				
					                        -  added  ' const  char *  str_id '  parameter  +  removed  ' int  frame_padding  =  - 1 '  parameter .   
			
		
	
		
			
				
					                        -  old  signature :  bool  ImageButton ( ImTextureID  tex_id ,  ImVec2  size ,  ImVec2  uv0  =  ImVec2 ( 0 , 0 ) ,  ImVec2  uv1  =  ImVec2 ( 1 , 1 ) ,  int  frame_padding  =  - 1 ,  ImVec4  bg_col  =  ImVec4 ( 0 , 0 , 0 , 0 ) ,  ImVec4  tint_col  =  ImVec4 ( 1 , 1 , 1 , 1 ) ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -7158,7 +7169,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) 
			
		
	
		
			
				
					        window - > DC . IdealMaxPos  =  window - > DC . CursorStartPos ;   
			
		
	
		
			
				
					        window - > DC . CurrLineSize  =  window - > DC . PrevLineSize  =  ImVec2 ( 0.0f ,  0.0f ) ;   
			
		
	
		
			
				
					        window - > DC . CurrLineTextBaseOffset  =  window - > DC . PrevLineTextBaseOffset  =  0.0f ;   
			
		
	
		
			
				
					        window - > DC . IsSameLine  =  false ;   
			
		
	
		
			
				
					        window - > DC . IsSameLine  =  window - > DC . IsSetPos  =  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        window - > DC . NavLayerCurrent  =  ImGuiNavLayer_Main ;   
			
		
	
		
			
				
					        window - > DC . NavLayersActiveMask  =  window - > DC . NavLayersActiveMaskNext ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -7364,6 +7375,9 @@ void ImGui::End() 
			
		
	
		
			
				
					    if  ( ! ( window - > Flags  &  ImGuiWindowFlags_ChildWindow ) )     // FIXME: add more options for scope of logging
   
			
		
	
		
			
				
					        LogFinish ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( window - > DC . IsSetPos )   
			
		
	
		
			
				
					        ErrorCheckUsingSetCursorPosToExtendParentBoundaries ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Docking: report contents sizes to parent to allow for auto-resize
   
			
		
	
		
			
				
					    if  ( window - > DockNode  & &  window - > DockTabIsVisible )   
			
		
	
		
			
				
					        if  ( ImGuiWindow *  host_window  =  window - > DockNode - > HostWindow )          // FIXME-DOCK
   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -8831,6 +8845,36 @@ bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, si 
			
		
	
		
			
				
					    return  ! error ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Until 1.89 (IMGUI_VERSION_NUM < 18814) it was legal to use SetCursorPos() to extend the boundary of a parent (e.g. window or table cell)
  
			
		
	
		
			
				
					// This is causing issues and ambiguity and we need to retire that.
  
			
		
	
		
			
				
					// See https://github.com/ocornut/imgui/issues/5548 for more details.
  
			
		
	
		
			
				
					// [Scenario 1]
  
			
		
	
		
			
				
					//  Previously this would make the window content size ~200x200:
  
			
		
	
		
			
				
					//    Begin(...) + SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200)) + End();  // NOT OK
  
			
		
	
		
			
				
					//  Instead, please submit an item:
  
			
		
	
		
			
				
					//    Begin(...) + SetCursorScreenPos(GetCursorScreenPos() + ImVec2(200,200)) + Dummy(ImVec2(0,0)) + End(); // OK
  
			
		
	
		
			
				
					//  Alternative:
  
			
		
	
		
			
				
					//    Begin(...) + Dummy(ImVec2(200,200)) + End(); // OK
  
			
		
	
		
			
				
					// [Scenario 2]
  
			
		
	
		
			
				
					//  For reference this is one of the issue what we aim to fix with this change:
  
			
		
	
		
			
				
					//    BeginGroup() + SomeItem("foobar") + SetCursorScreenPos(GetCursorScreenPos()) + EndGroup()
  
			
		
	
		
			
				
					//  The previous logic made SetCursorScreenPos(GetCursorScreenPos()) have a side-effect! It would erroneously incorporate ItemSpacing.y after the item into content size, making the group taller!
  
			
		
	
		
			
				
					//  While this code is a little twisted, no-one would expect SetXXX(GetXXX()) to have a side-effect. Using vertical alignment patterns could trigger this issue.
  
			
		
	
		
			
				
					void  ImGui : : ErrorCheckUsingSetCursorPosToExtendParentBoundaries ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  window  =  g . CurrentWindow ;   
			
		
	
		
			
				
					    IM_ASSERT ( window - > DC . IsSetPos ) ;   
			
		
	
		
			
				
					    window - > DC . IsSetPos  =  false ;   
			
		
	
		
			
				
					# ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS  
			
		
	
		
			
				
					    if  ( window - > DC . CursorPos . x  < =  window - > DC . CursorMaxPos . x  & &  window - > DC . CursorPos . y  < =  window - > DC . CursorMaxPos . y )   
			
		
	
		
			
				
					        return ;   
			
		
	
		
			
				
					    IM_ASSERT ( 0  & &  " Code uses SetCursorPos()/SetCursorScreenPos() to extend window/parent boundaries. Please submit an item e.g. Dummy() to validate extent. " ) ;   
			
		
	
		
			
				
					# else  
			
		
	
		
			
				
					    window - > DC . CursorMaxPos  =  ImMax ( window - > DC . CursorMaxPos ,  window - > DC . CursorPos ) ;   
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  ImGui : : ErrorCheckNewFrameSanityChecks ( )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9141,7 +9185,7 @@ void ImGui::ItemSize(const ImVec2& size, float text_baseline_y) 
			
		
	
		
			
				
					    window - > DC . CurrLineSize . y  =  0.0f ;   
			
		
	
		
			
				
					    window - > DC . PrevLineTextBaseOffset  =  ImMax ( window - > DC . CurrLineTextBaseOffset ,  text_baseline_y ) ;   
			
		
	
		
			
				
					    window - > DC . CurrLineTextBaseOffset  =  0.0f ;   
			
		
	
		
			
				
					    window - > DC . IsSameLine  =  false ;   
			
		
	
		
			
				
					    window - > DC . IsSameLine  =  window - > DC . IsSetPos  =  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Horizontal layout mode
   
			
		
	
		
			
				
					    if  ( window - > DC . LayoutType  = =  ImGuiLayoutType_Horizontal )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9261,7 +9305,8 @@ void ImGui::SetCursorScreenPos(const ImVec2& pos) 
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
		
			
				
					    window - > DC . CursorPos  =  pos ;   
			
		
	
		
			
				
					    window - > DC . CursorMaxPos  =  ImMax ( window - > DC . CursorMaxPos ,  window - > DC . CursorPos ) ;   
			
		
	
		
			
				
					    //window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
   
			
		
	
		
			
				
					    window - > DC . IsSetPos  =  true ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// User generally sees positions in window coordinates. Internally we store CursorPos in absolute screen coordinates because it is more convenient.
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9288,21 +9333,24 @@ void ImGui::SetCursorPos(const ImVec2& local_pos) 
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
		
			
				
					    window - > DC . CursorPos  =  window - > Pos  -  window - > Scroll  +  local_pos ;   
			
		
	
		
			
				
					    window - > DC . CursorMaxPos  =  ImMax ( window - > DC . CursorMaxPos ,  window - > DC . CursorPos ) ;   
			
		
	
		
			
				
					    //window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
   
			
		
	
		
			
				
					    window - > DC . IsSetPos  =  true ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  ImGui : : SetCursorPosX ( float  x )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
		
			
				
					    window - > DC . CursorPos . x  =  window - > Pos . x  -  window - > Scroll . x  +  x ;   
			
		
	
		
			
				
					    window - > DC . CursorMaxPos . x  =  ImMax ( window - > DC . CursorMaxPos . x ,  window - > DC . CursorPos . x ) ;   
			
		
	
		
			
				
					    //window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPos.x);
   
			
		
	
		
			
				
					    window - > DC . IsSetPos  =  true ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  ImGui : : SetCursorPosY ( float  y )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
		
			
				
					    window - > DC . CursorPos . y  =  window - > Pos . y  -  window - > Scroll . y  +  y ;   
			
		
	
		
			
				
					    window - > DC . CursorMaxPos . y  =  ImMax ( window - > DC . CursorMaxPos . y ,  window - > DC . CursorPos . y ) ;   
			
		
	
		
			
				
					    //window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y);
   
			
		
	
		
			
				
					    window - > DC . IsSetPos  =  true ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					ImVec2  ImGui : : GetCursorStartPos ( )  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9519,6 +9567,9 @@ void ImGui::EndGroup() 
			
		
	
		
			
				
					    ImGuiGroupData &  group_data  =  g . GroupStack . back ( ) ;   
			
		
	
		
			
				
					    IM_ASSERT ( group_data . WindowID  = =  window - > ID ) ;  // EndGroup() in wrong window?
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( window - > DC . IsSetPos )   
			
		
	
		
			
				
					        ErrorCheckUsingSetCursorPosToExtendParentBoundaries ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ImRect  group_bb ( group_data . BackupCursorPos ,  ImMax ( window - > DC . CursorMaxPos ,  group_data . BackupCursorPos ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    window - > DC . CursorPos  =  group_data . BackupCursorPos ;