@ -713,6 +713,15 @@ 
			
		
	
		
			
				
					# define IMGUI_CDECL  
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  const  ImS32   IM_S32_MIN  =  0x80000000 ;  // INT_MIN;
  
			
		
	
		
			
				
					static  const  ImS32   IM_S32_MAX  =  0x7FFFFFFF ;  // INT_MAX;
  
			
		
	
		
			
				
					static  const  ImU32   IM_U32_MIN  =  0 ;  
			
		
	
		
			
				
					static  const  ImU32   IM_U32_MAX  =  0xFFFFFFFF ;  
			
		
	
		
			
				
					static  const  ImS64   IM_S64_MIN  =  - 9223372036854775807ll  -  1ll ;  
			
		
	
		
			
				
					static  const  ImS64   IM_S64_MAX  =  9223372036854775807ll ;  
			
		
	
		
			
				
					static  const  ImU64   IM_U64_MIN  =  0 ;  
			
		
	
		
			
				
					static  const  ImU64   IM_U64_MAX  =  0xFFFFFFFFFFFFFFFFull ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//-------------------------------------------------------------------------
  
			
		
	
		
			
				
					// Forward Declarations
  
			
		
	
		
			
				
					//-------------------------------------------------------------------------
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -767,8 +776,10 @@ static void             UpdateManualResize(ImGuiWindow* window, const ImVec2& si 
			
		
	
		
			
				
					static  void              FocusFrontMostActiveWindow ( ImGuiWindow *  ignore_window ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					template < typename  TYPE ,  typename  SIGNEDTYPE ,  typename  FLOATTYPE >  
			
		
	
		
			
				
					static  bool              DragBehaviorT ( ImGuiID  id ,  ImGui DataType  data_type ,  TYPE *  v ,  float  v_speed ,  const  TYPE  v_min ,  const  TYPE  v_max ,  const  char *  format ,  float  power ) ;  
			
		
	
		
			
				
					static  bool              DragBehaviorT ( ImGuiDataType  data_type ,  TYPE *  v ,  float  v_speed ,  const  TYPE  v_min ,  const  TYPE  v_max ,  const  char *  format ,  float  power ) ;  
			
		
	
		
			
				
					static  bool              DragBehavior ( ImGuiID  id ,  ImGuiDataType  data_type ,  void *  v ,  float  v_speed ,  const  void *  v_min ,  const  void *  v_max ,  const  char *  format ,  float  power ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool              SliderBehavior ( const  ImRect &  bb ,  ImGuiID  id ,  float *  v ,  float  v_min ,  float  v_max ,  const  char *  format ,  float  power ,  ImGuiSliderFlags  flags  =  0 ) ;  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//-----------------------------------------------------------------------------
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -8736,9 +8747,9 @@ static inline float SliderBehaviorCalcRatioFromValue(float v, float v_min, float 
			
		
	
		
			
				
					    if  ( v_min  = =  v_max )   
			
		
	
		
			
				
					        return  0.0f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    const  bool  is_non_linea r  =  ( power  <  1.0f - 0.00001f )  | |  ( power  >  1.0f + 0.00001 f) ;   
			
		
	
		
			
				
					    const  bool  is_powe r  =  ( power  ! =  1.0 f) ;   
			
		
	
		
			
				
					    const  float  v_clamped  =  ( v_min  <  v_max )  ?  ImClamp ( v ,  v_min ,  v_max )  :  ImClamp ( v ,  v_max ,  v_min ) ;   
			
		
	
		
			
				
					    if  ( is_non_linea r )   
			
		
	
		
			
				
					    if  ( is_powe r )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        if  ( v_clamped  <  0.0f )   
			
		
	
		
			
				
					        {   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -8756,7 +8767,7 @@ static inline float SliderBehaviorCalcRatioFromValue(float v, float v_min, float 
			
		
	
		
			
				
					    return  ( v_clamped  -  v_min )  /  ( v_max  -  v_min ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : SliderBehavior ( const  ImRect &  frame_ bb,  ImGuiID  id ,  float *  v ,  float  v_min ,  float  v_max ,  const  char *  format ,  float  power ,  ImGuiSliderFlags  flags )  
			
		
	
		
			
				
					static  bool  ImGui : : SliderBehavior ( const  ImRect &  bb ,  ImGuiID  id ,  float *  v ,  float  v_min ,  float  v_max ,  const  char *  format ,  float  power ,  ImGuiSliderFlags  flags )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    ImGuiWindow *  window  =  GetCurrentWindow ( ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -8764,32 +8775,32 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Draw frame
   
			
		
	
		
			
				
					    const  ImU32  frame_col  =  GetColorU32 ( g . ActiveId  = =  id  ?  ImGuiCol_FrameBgActive  :  g . HoveredId  = =  id  ?  ImGuiCol_FrameBgHovered  :  ImGuiCol_FrameBg ) ;   
			
		
	
		
			
				
					    RenderNavHighlight ( frame_ bb,  id ) ;   
			
		
	
		
			
				
					    RenderFrame ( frame_ bb. Min ,  frame_ bb. Max ,  frame_col ,  true ,  style . FrameRounding ) ;   
			
		
	
		
			
				
					    RenderNavHighlight ( bb ,  id ) ;   
			
		
	
		
			
				
					    RenderFrame ( bb . Min ,  bb . Max ,  frame_col ,  true ,  style . FrameRounding ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    const  bool  is_non_linea r  =  ( power  <  1.0f - 0.00001f )  | |  ( power  >  1.0f + 0.00001 f) ;   
			
		
	
		
			
				
					    const  bool  is_powe r  =  ( power  ! =  1.0 f) ;   
			
		
	
		
			
				
					    const  bool  is_horizontal  =  ( flags  &  ImGuiSliderFlags_Vertical )  = =  0 ;   
			
		
	
		
			
				
					    const  bool  is_decimal  =  ImParseFormatPrecision ( format ,  3 )  ! =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    const  float  grab_padding  =  2.0f ;   
			
		
	
		
			
				
					    const  float  slider_sz  =  is_horizontal  ?  ( frame_ bb. GetWidth ( )  -  grab_padding  *  2.0f )  :  ( frame_ bb. GetHeight ( )  -  grab_padding  *  2.0f ) ;   
			
		
	
		
			
				
					    const  float  slider_sz  =  is_horizontal  ?  ( bb . GetWidth ( )  -  grab_padding  *  2.0f )  :  ( bb . GetHeight ( )  -  grab_padding  *  2.0f ) ;   
			
		
	
		
			
				
					    float  grab_sz ;   
			
		
	
		
			
				
					    if  ( is_decimal )   
			
		
	
		
			
				
					        grab_sz  =  ImMin ( style . GrabMinSize ,  slider_sz ) ;   
			
		
	
		
			
				
					    else   
			
		
	
		
			
				
					        grab_sz  =  ImMin ( ImMax ( 1.0f  *  ( slider_sz  /  ( ( v_min  <  v_max  ?  v_max  -  v_min  :  v_min  -  v_max )  +  1.0f ) ) ,  style . GrabMinSize ) ,  slider_sz ) ;   // Integer sliders, if possible have the grab size represent 1 unit
   
			
		
	
		
			
				
					    const  float  slider_usable_sz  =  slider_sz  -  grab_sz ;   
			
		
	
		
			
				
					    const  float  slider_usable_pos_min  =  ( is_horizontal  ?  frame_ bb. Min . x  :  frame_ bb. Min . y )  +  grab_padding  +  grab_sz * 0.5f ;   
			
		
	
		
			
				
					    const  float  slider_usable_pos_max  =  ( is_horizontal  ?  frame_ bb. Max . x  :  frame_ bb. Max . y )  -  grab_padding  -  grab_sz * 0.5f ;   
			
		
	
		
			
				
					    const  float  slider_usable_pos_min  =  ( is_horizontal  ?  bb . Min . x  :  bb . Min . y )  +  grab_padding  +  grab_sz * 0.5f ;   
			
		
	
		
			
				
					    const  float  slider_usable_pos_max  =  ( is_horizontal  ?  bb . Max . x  :  bb . Max . y )  -  grab_padding  -  grab_sz * 0.5f ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // For power curve sliders that cross over sign boundary we want the curve to be symmetric around 0.0f
   
			
		
	
		
			
				
					    float  linear_zero_pos  =  0.0f ;    // 0.0->1.0f
   
			
		
	
		
			
				
					    if  ( v_min  *  v_max  <  0.0f )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        // Different sign
   
			
		
	
		
			
				
					        const  float  linear_dist_min_to_0  =  powf ( fabsf ( 0.0f  -  v_min ) ,  1.0f / power ) ;   
			
		
	
		
			
				
					        const  float  linear_dist_max_to_0  =  powf ( fabsf ( v_max  -  0.0f ) ,  1.0f / power ) ;   
			
		
	
		
			
				
					        linear_zero_pos  =  linear_dist_min_to_0  /  ( linear_dist_min_to_0 + linear_dist_max_to_0 ) ;   
			
		
	
		
			
				
					        const  float  linear_dist_min_to_0  =  powf ( v_min  > =  0.0f  ?  v_min  :  - v_min ,  1.0f / power ) ;   
			
		
	
		
			
				
					        const  float  linear_dist_max_to_0  =  powf ( v_max  > =  0.0f  ?  v_max  :  - v_max ,  1.0f / power ) ;   
			
		
	
		
			
				
					        linear_zero_pos  =  linear_dist_min_to_0  /  ( linear_dist_min_to_0   +   linear_dist_max_to_0 ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    else   
			
		
	
		
			
				
					    {   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -8829,19 +8840,19 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v 
			
		
	
		
			
				
					            else  if  ( delta  ! =  0.0f )   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                clicked_t  =  SliderBehaviorCalcRatioFromValue ( * v ,  v_min ,  v_max ,  power ,  linear_zero_pos ) ;   
			
		
	
		
			
				
					                if  ( ! is_decimal  & &  ! is_non_linear )   
			
		
	
		
			
				
					                if  ( is_decimal  | |  is_power )   
			
		
	
		
			
				
					                {   
			
		
	
		
			
				
					                    delta  / =  100.0f ;     // Gamepad/keyboard tweak speeds in % of slider bounds
   
			
		
	
		
			
				
					                    if  ( IsNavInputDown ( ImGuiNavInput_TweakSlow ) )   
			
		
	
		
			
				
					                        delta  / =  10.0f ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                else   
			
		
	
		
			
				
					                {   
			
		
	
		
			
				
					                    if  ( fabsf ( v_max  -  v_min )  < =  100.0f  | |  IsNavInputDown ( ImGuiNavInput_TweakSlow ) )   
			
		
	
		
			
				
					                        delta  =  ( ( delta  <  0.0f )  ?  - 1.0f  :  + 1.0f )  /  ( v_max  -  v_min ) ;  // Gamepad/keyboard tweak speeds in integer steps
   
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        delta  / =  100.0f ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                else   
			
		
	
		
			
				
					                {   
			
		
	
		
			
				
					                    delta  / =  100.0f ;     // Gamepad/keyboard tweak speeds in % of slider bounds
   
			
		
	
		
			
				
					                    if  ( IsNavInputDown ( ImGuiNavInput_TweakSlow ) )   
			
		
	
		
			
				
					                        delta  / =  10.0f ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                if  ( IsNavInputDown ( ImGuiNavInput_TweakFast ) )   
			
		
	
		
			
				
					                    delta  * =  10.0f ;   
			
		
	
		
			
				
					                set_new_value  =  true ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -8854,8 +8865,8 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( set_new_value )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            float  new_value  ;   
			
		
	
		
			
				
					            if  ( is_non_linea r )   
			
		
	
		
			
				
					            float  v_ new;   
			
		
	
		
			
				
					            if  ( is_powe r )   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                // Account for power curve scale on both sides of the zero
   
			
		
	
		
			
				
					                if  ( clicked_t  <  linear_zero_pos )   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -8863,7 +8874,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v 
			
		
	
		
			
				
					                    // Negative: rescale to the negative range before powering
   
			
		
	
		
			
				
					                    float  a  =  1.0f  -  ( clicked_t  /  linear_zero_pos ) ;   
			
		
	
		
			
				
					                    a  =  powf ( a ,  power ) ;   
			
		
	
		
			
				
					                    new_value   =  ImLerp ( ImMin ( v_max , 0.0f ) ,  v_min ,  a ) ;   
			
		
	
		
			
				
					                    v_ new=  ImLerp ( ImMin ( v_max , 0.0f ) ,  v_min ,  a ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					                else   
			
		
	
		
			
				
					                {   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -8874,22 +8885,22 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v 
			
		
	
		
			
				
					                    else   
			
		
	
		
			
				
					                        a  =  clicked_t ;   
			
		
	
		
			
				
					                    a  =  powf ( a ,  power ) ;   
			
		
	
		
			
				
					                    new_value   =  ImLerp ( ImMax ( v_min , 0.0f ) ,  v_max ,  a ) ;   
			
		
	
		
			
				
					                    v_ new=  ImLerp ( ImMax ( v_min , 0.0f ) ,  v_max ,  a ) ;   
			
		
	
		
			
				
					                }   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					            else   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                // Linear slider
   
			
		
	
		
			
				
					                new_value   =  ImLerp ( v_min ,  v_max ,  clicked_t ) ;   
			
		
	
		
			
				
					                v_ new=  ImLerp ( v_min ,  v_max ,  clicked_t ) ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // Round past decimal precision
   
			
		
	
		
			
				
					            char  buf [ 64 ] ;   
			
		
	
		
			
				
					            ImFormatString ( buf ,  IM_ARRAYSIZE ( buf ) ,  ImParseFormatFindStart ( format ) ,  new_value  ) ;   
			
		
	
		
			
				
					            new_value   =  ( float ) atof ( buf ) ;   
			
		
	
		
			
				
					            if  ( * v  ! =  new_value  )   
			
		
	
		
			
				
					            ImFormatString ( buf ,  IM_ARRAYSIZE ( buf ) ,  ImParseFormatFindStart ( format ) ,  v_ new) ;   
			
		
	
		
			
				
					            v_ new=  ( float ) atof ( buf ) ;   
			
		
	
		
			
				
					            if  ( * v  ! =  v_ new)   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                * v  =  new_value  ;   
			
		
	
		
			
				
					                * v  =  v_ new;   
			
		
	
		
			
				
					                value_changed  =  true ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -8902,9 +8913,9 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v 
			
		
	
		
			
				
					    const  float  grab_pos  =  ImLerp ( slider_usable_pos_min ,  slider_usable_pos_max ,  grab_t ) ;   
			
		
	
		
			
				
					    ImRect  grab_bb ;   
			
		
	
		
			
				
					    if  ( is_horizontal )   
			
		
	
		
			
				
					        grab_bb  =  ImRect ( ImVec2 ( grab_pos  -  grab_sz * 0.5f ,  frame_ bb. Min . y  +  grab_padding ) ,  ImVec2 ( grab_pos  +  grab_sz * 0.5f ,  frame_ bb. Max . y  -  grab_padding ) ) ;   
			
		
	
		
			
				
					        grab_bb  =  ImRect ( grab_pos  -  grab_sz * 0.5f ,  bb . Min . y  +  grab_padding ,  grab_pos  +  grab_sz * 0.5f ,  bb . Max . y  -  grab_padding ) ;   
			
		
	
		
			
				
					    else   
			
		
	
		
			
				
					        grab_bb  =  ImRect ( ImVec2 ( frame_ bb. Min . x  +  grab_padding ,  grab_pos  -  grab_sz * 0.5f ) ,  ImVec2 ( frame_ bb. Max . x  -  grab_padding ,  grab_pos  +  grab_sz * 0.5f ) ) ;   
			
		
	
		
			
				
					        grab_bb  =  ImRect ( bb . Min . x  +  grab_padding ,  grab_pos  -  grab_sz * 0.5f ,  bb . Max . x  -  grab_padding ,  grab_pos  +  grab_sz * 0.5f ) ;   
			
		
	
		
			
				
					    window - > DrawList - > AddRectFilled ( grab_bb . Min ,  grab_bb . Max ,  GetColorU32 ( g . ActiveId  = =  id  ?  ImGuiCol_SliderGrabActive  :  ImGuiCol_SliderGrab ) ,  style . GrabRounding ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return  value_changed ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9132,21 +9143,10 @@ bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					template < typename  TYPE ,  typename  SIGNEDTYPE ,  typename  FLOATTYPE >  
			
		
	
		
			
				
					static  bool  ImGui : : DragBehaviorT ( ImGuiID  id ,  ImGui DataType  data_type ,  TYPE *  v ,  float  v_speed ,  const  TYPE  v_min ,  const  TYPE  v_max ,  const  char *  format ,  float  power )  
			
		
	
		
			
				
					static  bool  ImGui : : DragBehaviorT ( ImGuiDataType  data_type ,  TYPE *  v ,  float  v_speed ,  const  TYPE  v_min ,  const  TYPE  v_max ,  const  char *  format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Process interacting with the drag
   
			
		
	
		
			
				
					    if  ( g . ActiveId  = =  id )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        if  ( g . ActiveIdSource  = =  ImGuiInputSource_Mouse  & &  ! g . IO . MouseDown [ 0 ] )   
			
		
	
		
			
				
					            ClearActiveID ( ) ;   
			
		
	
		
			
				
					        else  if  ( g . ActiveIdSource  = =  ImGuiInputSource_Nav  & &  g . NavActivatePressedId  = =  id  & &  ! g . ActiveIdIsJustActivated )   
			
		
	
		
			
				
					            ClearActiveID ( ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    if  ( g . ActiveId  ! =  id )   
			
		
	
		
			
				
					        return  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Default tweak speed
   
			
		
	
		
			
				
					    bool  has_min_max  =  ( v_min  ! =  v_max )  & &  ( v_max  -  v_max  <  FLT_MAX ) ;   
			
		
	
		
			
				
					    if  ( v_speed  = =  0.0f  & &  has_min_max )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9245,25 +9245,27 @@ static bool ImGui::DragBehaviorT(ImGuiID id, ImGuiDataType data_type, TYPE* v, f 
			
		
	
		
			
				
					    return  true ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  const  ImS32   IM_S32_MIN  =  0x80000000 ;  // INT_MIN;
  
			
		
	
		
			
				
					static  const  ImS32   IM_S32_MAX  =  0x7FFFFFFF ;  // INT_MAX;
  
			
		
	
		
			
				
					static  const  ImU32   IM_U32_MIN  =  0 ;  
			
		
	
		
			
				
					static  const  ImU32   IM_U32_MAX  =  0xFFFFFFFF ;  
			
		
	
		
			
				
					static  const  ImS64   IM_S64_MIN  =  - 9223372036854775807ll  -  1ll ;  
			
		
	
		
			
				
					static  const  ImS64   IM_S64_MAX  =  9223372036854775807ll ;  
			
		
	
		
			
				
					static  const  ImU64   IM_U64_MIN  =  0 ;  
			
		
	
		
			
				
					static  const  ImU64   IM_U64_MAX  =  0xFFFFFFFFFFFFFFFFull ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					bool  ImGui : : DragBehavior ( ImGuiID  id ,  ImGuiDataType  data_type ,  void *  v ,  float  v_speed ,  const  void *  v_min ,  const  void *  v_max ,  const  char *  format ,  float  power )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    if  ( g . ActiveId  = =  id )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        if  ( g . ActiveIdSource  = =  ImGuiInputSource_Mouse  & &  ! g . IO . MouseDown [ 0 ] )   
			
		
	
		
			
				
					            ClearActiveID ( ) ;   
			
		
	
		
			
				
					        else  if  ( g . ActiveIdSource  = =  ImGuiInputSource_Nav  & &  g . NavActivatePressedId  = =  id  & &  ! g . ActiveIdIsJustActivated )   
			
		
	
		
			
				
					            ClearActiveID ( ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    if  ( g . ActiveId  ! =  id )   
			
		
	
		
			
				
					        return  false ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    switch  ( data_type )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					    case  ImGuiDataType_S32 :     return  DragBehaviorT < ImS32 ,  ImS32 ,  float  > ( id ,  data_type ,  ( ImS32 * ) v ,   v_speed ,  v_min  ?  * ( const  ImS32 *  ) v_min  :  IM_S32_MIN ,  v_max  ?  * ( const  ImS32 *  ) v_max  :  IM_S32_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_U32 :     return  DragBehaviorT < ImU32 ,  ImS32 ,  float  > ( id ,  data_type ,  ( ImU32 * ) v ,   v_speed ,  v_min  ?  * ( const  ImU32 *  ) v_min  :  IM_U32_MIN ,  v_max  ?  * ( const  ImU32 *  ) v_max  :  IM_U32_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_S64 :     return  DragBehaviorT < ImS64 ,  ImS64 ,  double > ( id ,  data_type ,  ( ImS64 * ) v ,   v_speed ,  v_min  ?  * ( const  ImS64 *  ) v_min  :  IM_S64_MIN ,  v_max  ?  * ( const  ImS64 *  ) v_max  :  IM_S64_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_U64 :     return  DragBehaviorT < ImU64 ,  ImS64 ,  double > ( id ,  data_type ,  ( ImU64 * ) v ,   v_speed ,  v_min  ?  * ( const  ImU64 *  ) v_min  :  IM_U64_MIN ,  v_max  ?  * ( const  ImU64 *  ) v_max  :  IM_U64_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_Float :   return  DragBehaviorT < float ,  float ,  float  > ( id ,  data_type ,  ( float * ) v ,   v_speed ,  v_min  ?  * ( const  float *  ) v_min  :  - FLT_MAX ,    v_max  ?  * ( const  float *  ) v_max  :  FLT_MAX ,     format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_Double :  return  DragBehaviorT < double , double , double > ( id ,  data_type ,  ( double * ) v ,  v_speed ,  v_min  ?  * ( const  double * ) v_min  :  - DBL_MAX ,    v_max  ?  * ( const  double * ) v_max  :  DBL_MAX ,     format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_S32 :     return  DragBehaviorT < ImS32 ,  ImS32 ,  float  > ( data_type ,  ( ImS32 * ) v ,   v_speed ,  v_min  ?  * ( const  ImS32 *  ) v_min  :  IM_S32_MIN ,  v_max  ?  * ( const  ImS32 *  ) v_max  :  IM_S32_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_U32 :     return  DragBehaviorT < ImU32 ,  ImS32 ,  float  > ( data_type ,  ( ImU32 * ) v ,   v_speed ,  v_min  ?  * ( const  ImU32 *  ) v_min  :  IM_U32_MIN ,  v_max  ?  * ( const  ImU32 *  ) v_max  :  IM_U32_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_S64 :     return  DragBehaviorT < ImS64 ,  ImS64 ,  double > ( data_type ,  ( ImS64 * ) v ,   v_speed ,  v_min  ?  * ( const  ImS64 *  ) v_min  :  IM_S64_MIN ,  v_max  ?  * ( const  ImS64 *  ) v_max  :  IM_S64_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_U64 :     return  DragBehaviorT < ImU64 ,  ImS64 ,  double > ( data_type ,  ( ImU64 * ) v ,   v_speed ,  v_min  ?  * ( const  ImU64 *  ) v_min  :  IM_U64_MIN ,  v_max  ?  * ( const  ImU64 *  ) v_max  :  IM_U64_MAX ,  format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_Float :   return  DragBehaviorT < float ,  float ,  float  > ( data_type ,  ( float * ) v ,   v_speed ,  v_min  ?  * ( const  float *  ) v_min  :  - FLT_MAX ,    v_max  ?  * ( const  float *  ) v_max  :  FLT_MAX ,     format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_Double :  return  DragBehaviorT < double , double , double > ( data_type ,  ( double * ) v ,  v_speed ,  v_min  ?  * ( const  double * ) v_min  :  - DBL_MAX ,    v_max  ?  * ( const  double * ) v_max  :  DBL_MAX ,     format ,  power ) ;   
			
		
	
		
			
				
					    case  ImGuiDataType_COUNT :   break ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    IM_ASSERT ( 0 ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -9323,6 +9325,7 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Default format string when passing NULL
   
			
		
	
		
			
				
					    // Patch old "%.0f" format string to use "%d", read function comments for more details.
   
			
		
	
		
			
				
					    IM_ASSERT ( data_type  > =  0  & &  data_type  <  ImGuiDataType_COUNT ) ;   
			
		
	
		
			
				
					    if  ( format  = =  NULL )   
			
		
	
		
			
				
					        format  =  GDataTypeInfo [ data_type ] . PrintFmt ;   
			
		
	
		
			
				
					    else  if  ( data_type  = =  ImGuiDataType_S32  & &  strcmp ( format ,  " %d " )  ! =  0 )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -10689,6 +10692,10 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p 
			
		
	
		
			
				
					    ImGuiContext &  g  =  * GImGui ;   
			
		
	
		
			
				
					    const  ImGuiStyle &  style  =  g . Style ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    IM_ASSERT ( data_type  > =  0  & &  data_type  <  ImGuiDataType_COUNT ) ;   
			
		
	
		
			
				
					    if  ( format  = =  NULL )   
			
		
	
		
			
				
					        format  =  GDataTypeInfo [ data_type ] . PrintFmt ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    char  buf [ 64 ] ;   
			
		
	
		
			
				
					    DataTypeFormatString ( buf ,  IM_ARRAYSIZE ( buf ) ,  data_type ,  data_ptr ,  format ) ;