@ -3903,6 +3903,10 @@ void ImGui::NewFrame() 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Mark rendering data as invalid to prevent user who may have a handle on it to use it
   
					 
					 
					 
					    // Mark rendering data as invalid to prevent user who may have a handle on it to use it
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    g . DrawData . Clear ( ) ;   
					 
					 
					 
					    g . DrawData . Clear ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Drag and drop keep the source ID alive so even if the source disappear our state is consistent
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( g . DragDropActive  & &  g . DragDropPayload . SourceId  = =  g . ActiveId )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        KeepAliveID ( g . DragDropPayload . SourceId ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Clear reference to active widget if the widget isn't alive anymore
   
					 
					 
					 
					    // Clear reference to active widget if the widget isn't alive anymore
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( ! g . HoveredIdPreviousFrame )   
					 
					 
					 
					    if  ( ! g . HoveredIdPreviousFrame )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        g . HoveredIdTimer  =  0.0f ;   
					 
					 
					 
					        g . HoveredIdTimer  =  0.0f ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -3924,13 +3928,7 @@ void ImGui::NewFrame() 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( g . ScalarAsInputTextId  & &  g . ActiveId  ! =  g . ScalarAsInputTextId )   
					 
					 
					 
					    if  ( g . ScalarAsInputTextId  & &  g . ActiveId  ! =  g . ScalarAsInputTextId )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        g . ScalarAsInputTextId  =  0 ;   
					 
					 
					 
					        g . ScalarAsInputTextId  =  0 ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Elapse drag & drop payload
   
					 
					 
					 
					    // Drag and drop
   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( g . DragDropActive  & &  g . DragDropPayload . DataFrameCount  +  1  <  g . FrameCount )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ClearDragDrop ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        g . DragDropPayloadBufHeap . clear ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        memset ( & g . DragDropPayloadBufLocal ,  0 ,  sizeof ( g . DragDropPayloadBufLocal ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    g . DragDropAcceptIdPrev  =  g . DragDropAcceptIdCurr ;   
					 
					 
					 
					    g . DragDropAcceptIdPrev  =  g . DragDropAcceptIdCurr ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    g . DragDropAcceptIdCurr  =  0 ;   
					 
					 
					 
					    g . DragDropAcceptIdCurr  =  0 ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    g . DragDropAcceptIdCurrRectSurface  =  FLT_MAX ;   
					 
					 
					 
					    g . DragDropAcceptIdCurrRectSurface  =  FLT_MAX ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4426,7 +4424,6 @@ void ImGui::EndFrame() 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( g . FrameCountEnded  = =  g . FrameCount )           // Don't process EndFrame() multiple times.
   
					 
					 
					 
					    if  ( g . FrameCountEnded  = =  g . FrameCount )           // Don't process EndFrame() multiple times.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return ;   
					 
					 
					 
					        return ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    IM_ASSERT ( g . FrameScopeActive  & &  " Forgot to call ImGui::NewFrame() " ) ;   
					 
					 
					 
					    IM_ASSERT ( g . FrameScopeActive  & &  " Forgot to call ImGui::NewFrame() " ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    g . FrameScopeActive  =  false ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
   
					 
					 
					 
					    // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( g . IO . ImeSetInputScreenPosFn  & &  ImLengthSqr ( g . PlatformImeLastPos  -  g . PlatformImePos )  >  0.0001f )   
					 
					 
					 
					    if  ( g . IO . ImeSetInputScreenPosFn  & &  ImLengthSqr ( g . PlatformImeLastPos  -  g . PlatformImePos )  >  0.0001f )   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -4445,6 +4442,22 @@ void ImGui::EndFrame() 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( g . NavWindowingTarget )   
					 
					 
					 
					    if  ( g . NavWindowingTarget )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        NavUpdateWindowingList ( ) ;   
					 
					 
					 
					        NavUpdateWindowingList ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Drag and Drop: Elapse payload at the end of the frame if mouse has been released
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( g . DragDropActive  & &  g . DragDropPayload . DataFrameCount  +  1  <  g . FrameCount  & &  ! IsMouseDown ( g . DragDropMouseButton ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ClearDragDrop ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        g . DragDropPayloadBufHeap . clear ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        memset ( & g . DragDropPayloadBufLocal ,  0 ,  sizeof ( g . DragDropPayloadBufLocal ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    // Drag and Drop: Fallback for source tooltip. This is not ideal but better than nothing.
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( g . DragDropActive  & &  g . DragDropSourceFrameCount  <  g . FrameCount )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        g . DragDropWithinSourceOrTarget  =  true ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        SetTooltip ( " ... " ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        g . DragDropWithinSourceOrTarget  =  false ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    // Initiate moving window
   
					 
					 
					 
					    // Initiate moving window
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( g . ActiveId  = =  0  & &  g . HoveredId  = =  0 )   
					 
					 
					 
					    if  ( g . ActiveId  = =  0  & &  g . HoveredId  = =  0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {   
					 
					 
					 
					    {   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4505,6 +4518,7 @@ void ImGui::EndFrame() 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    memset ( g . IO . InputCharacters ,  0 ,  sizeof ( g . IO . InputCharacters ) ) ;   
					 
					 
					 
					    memset ( g . IO . InputCharacters ,  0 ,  sizeof ( g . IO . InputCharacters ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    memset ( g . IO . NavInputs ,  0 ,  sizeof ( g . IO . NavInputs ) ) ;   
					 
					 
					 
					    memset ( g . IO . NavInputs ,  0 ,  sizeof ( g . IO . NavInputs ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    g . FrameScopeActive  =  false ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    g . FrameCountEnded  =  g . FrameCount ;   
					 
					 
					 
					    g . FrameCountEnded  =  g . FrameCount ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -5277,7 +5291,11 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  ImGui : : SetTooltipV ( const  char *  fmt ,  va_list  args )  
					 
					 
					 
					void  ImGui : : SetTooltipV ( const  char *  fmt ,  va_list  args )  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    BeginTooltipEx ( 0 ,  true ) ;   
					 
					 
					 
					    ImGuiContext &  g  =  * GImGui ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( g . DragDropWithinSourceOrTarget )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        BeginTooltip ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    else   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        BeginTooltipEx ( 0 ,  true ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    TextV ( fmt ,  args ) ;   
					 
					 
					 
					    TextV ( fmt ,  args ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    EndTooltip ( ) ;   
					 
					 
					 
					    EndTooltip ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -13689,6 +13707,7 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            g . DragDropSourceFlags  =  flags ;   
					 
					 
					 
					            g . DragDropSourceFlags  =  flags ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            g . DragDropMouseButton  =  mouse_button ;   
					 
					 
					 
					            g . DragDropMouseButton  =  mouse_button ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        }   
					 
					 
					 
					        }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        g . DragDropSourceFrameCount  =  g . FrameCount ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        g . DragDropWithinSourceOrTarget  =  true ;   
					 
					 
					 
					        g . DragDropWithinSourceOrTarget  =  true ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ( ! ( flags  &  ImGuiDragDropFlags_SourceNoPreviewTooltip ) )   
					 
					 
					 
					        if  ( ! ( flags  &  ImGuiDragDropFlags_SourceNoPreviewTooltip ) )