@ -5416,7 +5416,7 @@ bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Add multiple sliders on 1 line for compact edition of multiple components
  
			
		
	
		
			
				
					static  bool  SliderFloatN ( const  char *  label ,  float  v [ 3 ]  ,  int  components ,  float  v_min ,  float  v_max ,  const  char *  display_format ,  float  power )  
			
		
	
		
			
				
					static  bool  SliderFloatN ( const  char *  label ,  float *  v ,  int  components ,  float  v_min ,  float  v_max ,  const  char *  display_format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiState &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5468,7 +5468,7 @@ bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max 
			
		
	
		
			
				
					    return  SliderFloatN ( label ,  v ,  4 ,  v_min ,  v_max ,  display_format ,  power ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  SliderIntN ( const  char *  label ,  int  v [ 3 ]  ,  int  components ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					static  bool  SliderIntN ( const  char *  label ,  int *  v ,  int  components ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiState &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5663,6 +5663,58 @@ bool ImGui::DragFloat(const char* label, float *v, float v_speed, float v_min, f 
			
		
	
		
			
				
					    return  value_changed ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  DragFloatN ( const  char *  label ,  float *  v ,  int  components ,  float  v_speed ,  float  v_min ,  float  v_max ,  const  char *  display_format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiState &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
		
			
				
					    if  ( window - > SkipItems )   
			
		
	
		
			
				
					        return  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    const  ImGuiStyle &  style  =  g . Style ;   
			
		
	
		
			
				
					    const  float  w_full  =  ImGui : : CalcItemWidth ( ) ;   
			
		
	
		
			
				
					    const  float  w_item_one   =  ImMax ( 1.0f ,  ( float ) ( int ) ( ( w_full  -  ( style . FramePadding . x * 2.0f  +  style . ItemInnerSpacing . x ) * ( components - 1 ) )  /  ( float ) components ) ) ;   
			
		
	
		
			
				
					    const  float  w_item_last  =  ImMax ( 1.0f ,  ( float ) ( int ) ( w_full  -  ( w_item_one  +  style . FramePadding . x * 2.0f  +  style . ItemInnerSpacing . x ) * ( components - 1 ) ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    bool  value_changed  =  false ;   
			
		
	
		
			
				
					    ImGui : : BeginGroup ( ) ;   
			
		
	
		
			
				
					    ImGui : : PushID ( label ) ;   
			
		
	
		
			
				
					    ImGui : : PushItemWidth ( w_item_one ) ;   
			
		
	
		
			
				
					    for  ( int  i  =  0 ;  i  <  components ;  i + + )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        ImGui : : PushID ( i ) ;   
			
		
	
		
			
				
					        if  ( i  +  1  = =  components )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            ImGui : : PopItemWidth ( ) ;   
			
		
	
		
			
				
					            ImGui : : PushItemWidth ( w_item_last ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        value_changed  | =  ImGui : : DragFloat ( " ##v " ,  & v [ i ] ,  v_speed ,  v_min ,  v_max ,  display_format ,  power ) ;   
			
		
	
		
			
				
					        ImGui : : SameLine ( 0 ,  ( int ) style . ItemInnerSpacing . x ) ;   
			
		
	
		
			
				
					        ImGui : : PopID ( ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    ImGui : : PopItemWidth ( ) ;   
			
		
	
		
			
				
					    ImGui : : PopID ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ImGui : : TextUnformatted ( label ,  FindTextDisplayEnd ( label ) ) ;   
			
		
	
		
			
				
					    ImGui : : EndGroup ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return  value_changed ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragFloat2 ( const  char *  label ,  float  v [ 2 ] ,  float  v_speed ,  float  v_min ,  float  v_max ,  const  char *  display_format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    return  DragFloatN ( label ,  v ,  2 ,  v_speed ,  v_min ,  v_max ,  display_format ,  power ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragFloat3 ( const  char *  label ,  float  v [ 2 ] ,  float  v_speed ,  float  v_min ,  float  v_max ,  const  char *  display_format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    return  DragFloatN ( label ,  v ,  3 ,  v_speed ,  v_min ,  v_max ,  display_format ,  power ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragFloat4 ( const  char *  label ,  float  v [ 2 ] ,  float  v_speed ,  float  v_min ,  float  v_max ,  const  char *  display_format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    return  DragFloatN ( label ,  v ,  4 ,  v_speed ,  v_min ,  v_max ,  display_format ,  power ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// NB: v_speed is float to allow adjusting the drag speed with more precision
  
			
		
	
		
			
				
					bool  ImGui : : DragInt ( const  char *  label ,  int *  v ,  float  v_speed ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					{  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -5674,6 +5726,58 @@ bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_m 
			
		
	
		
			
				
					    return  value_changed ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  DragIntN ( const  char *  label ,  int *  v ,  int  components ,  float  v_speed ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiState &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
		
			
				
					    if  ( window - > SkipItems )   
			
		
	
		
			
				
					        return  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    const  ImGuiStyle &  style  =  g . Style ;   
			
		
	
		
			
				
					    const  float  w_full  =  ImGui : : CalcItemWidth ( ) ;   
			
		
	
		
			
				
					    const  float  w_item_one   =  ImMax ( 1.0f ,  ( float ) ( int ) ( ( w_full  -  ( style . FramePadding . x * 2.0f  +  style . ItemInnerSpacing . x ) * ( components - 1 ) )  /  ( float ) components ) ) ;   
			
		
	
		
			
				
					    const  float  w_item_last  =  ImMax ( 1.0f ,  ( float ) ( int ) ( w_full  -  ( w_item_one  +  style . FramePadding . x * 2.0f  +  style . ItemInnerSpacing . x ) * ( components - 1 ) ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    bool  value_changed  =  false ;   
			
		
	
		
			
				
					    ImGui : : BeginGroup ( ) ;   
			
		
	
		
			
				
					    ImGui : : PushID ( label ) ;   
			
		
	
		
			
				
					    ImGui : : PushItemWidth ( w_item_one ) ;   
			
		
	
		
			
				
					    for  ( int  i  =  0 ;  i  <  components ;  i + + )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        ImGui : : PushID ( i ) ;   
			
		
	
		
			
				
					        if  ( i  +  1  = =  components )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            ImGui : : PopItemWidth ( ) ;   
			
		
	
		
			
				
					            ImGui : : PushItemWidth ( w_item_last ) ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        value_changed  | =  ImGui : : DragInt ( " ##v " ,  & v [ i ] ,  v_speed ,  v_min ,  v_max ,  display_format ) ;   
			
		
	
		
			
				
					        ImGui : : SameLine ( 0 ,  ( int ) style . ItemInnerSpacing . x ) ;   
			
		
	
		
			
				
					        ImGui : : PopID ( ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    ImGui : : PopItemWidth ( ) ;   
			
		
	
		
			
				
					    ImGui : : PopID ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ImGui : : TextUnformatted ( label ,  FindTextDisplayEnd ( label ) ) ;   
			
		
	
		
			
				
					    ImGui : : EndGroup ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return  value_changed ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragInt2 ( const  char *  label ,  int  v [ 2 ] ,  float  v_speed ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    return  DragIntN ( label ,  v ,  2 ,  v_speed ,  v_min ,  v_max ,  display_format ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragInt3 ( const  char *  label ,  int  v [ 3 ] ,  float  v_speed ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    return  DragIntN ( label ,  v ,  3 ,  v_speed ,  v_min ,  v_max ,  display_format ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragInt4 ( const  char *  label ,  int  v [ 4 ] ,  float  v_speed ,  int  v_min ,  int  v_max ,  const  char *  display_format )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    return  DragIntN ( label ,  v ,  4 ,  v_speed ,  v_min ,  v_max ,  display_format ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					enum  ImGuiPlotType  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiPlotType_Lines ,   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9953,18 +10057,24 @@ void ImGui::ShowTestWindow(bool* opened) 
			
		
	
		
			
				
					            static  int  vec4i [ 4 ]  =  {  1 ,  5 ,  100 ,  255  } ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            ImGui : : InputFloat2 ( " input float2 " ,  vec4f ) ;   
			
		
	
		
			
				
					            ImGui : : DragFloat2 ( " drag float2 " ,  vec4f ,  0.01f ,  0.0f ,  1.0f ) ;   
			
		
	
		
			
				
					            ImGui : : SliderFloat2 ( " slider float2 " ,  vec4f ,  0.0f ,  1.0f ) ;   
			
		
	
		
			
				
					            ImGui : : DragInt2 ( " drag int2 " ,  vec4i ,  1 ,  0 ,  255 ) ;   
			
		
	
		
			
				
					            ImGui : : InputInt2 ( " input int2 " ,  vec4i ) ;   
			
		
	
		
			
				
					            ImGui : : SliderInt2 ( " slider int2 " ,  vec4i ,  0 ,  255 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            ImGui : : InputFloat3 ( " input float3 " ,  vec4f ) ;   
			
		
	
		
			
				
					            ImGui : : DragFloat3 ( " drag float3 " ,  vec4f ,  0.01f ,  0.0f ,  1.0f ) ;   
			
		
	
		
			
				
					            ImGui : : SliderFloat3 ( " slider float3 " ,  vec4f ,  0.0f ,  1.0f ) ;   
			
		
	
		
			
				
					            ImGui : : DragInt3 ( " drag int3 " ,  vec4i ,  1 ,  0 ,  255 ) ;   
			
		
	
		
			
				
					            ImGui : : InputInt3 ( " input int3 " ,  vec4i ) ;   
			
		
	
		
			
				
					            ImGui : : SliderInt3 ( " slider int3 " ,  vec4i ,  0 ,  255 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            ImGui : : InputFloat4 ( " input float4 " ,  vec4f ) ;   
			
		
	
		
			
				
					            ImGui : : DragFloat4 ( " drag float4 " ,  vec4f ,  0.01f ,  0.0f ,  1.0f ) ;   
			
		
	
		
			
				
					            ImGui : : SliderFloat4 ( " slider float4 " ,  vec4f ,  0.0f ,  1.0f ) ;   
			
		
	
		
			
				
					            ImGui : : InputInt4 ( " input int4 " ,  vec4i ) ;   
			
		
	
		
			
				
					            ImGui : : DragInt4 ( " drag int4 " ,  vec4i ,  1 ,  0 ,  255 ) ;   
			
		
	
		
			
				
					            ImGui : : SliderInt4 ( " slider int4 " ,  vec4i ,  0 ,  255 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            ImGui : : Indent ( ) ;