@ -126,7 +126,7 @@ static const ImU64          IM_U64_MAX = (2ULL * 9223372036854775807LL + 1); 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// For InputTextEx()
  
					 
					 
					 
					// For InputTextEx()
  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  bool              InputTextFilterCharacter ( unsigned  int *  p_char ,  ImGuiInputTextFlags  flags ,  ImGuiInputTextCallback  callback ,  void *  user_data ,  ImGuiInputSource  input_source ) ;  
					 
					 
					 
					static  bool              InputTextFilterCharacter ( unsigned  int *  p_char ,  ImGuiInputTextFlags  flags ,  ImGuiInputTextCallback  callback ,  void *  user_data ,  ImGuiInputSource  input_source ) ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int               InputTextCalcTextLenAndLineCount ( const  char *  text_begin ,  const  char * *  out_text_end ) ;  
					 
					 
					 
					static  int               InputTextCalcTextLenAndLineCount ( const  char *  text_begin ,  const  char * *  out_text_end ) ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImVec2            InputTextCalcTextSizeW ( const  ImWchar *  text_begin ,  const  ImWchar *  text_end ,  const  ImWchar * *  remaining  =  NULL ,  ImVec2 *  out_offset  =  NULL ,  bool  stop_on_new_line  =  false ) ;  
					 
					 
					 
					static  ImVec2            InputTextCalcTextSizeW ( ImGuiContext *  ctx ,  const  ImWchar *  text_begin ,  const  ImWchar *  text_end ,  const  ImWchar * *  remaining  =  NULL ,  ImVec2 *  out_offset  =  NULL ,  bool  stop_on_new_line  =  false ) ;  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					//-------------------------------------------------------------------------
  
					 
					 
					 
					//-------------------------------------------------------------------------
  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					// [SECTION] Widgets: Text, etc.
  
					 
					 
					 
					// [SECTION] Widgets: Text, etc.
  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -3563,9 +3563,9 @@ static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    return  line_count ;   
					 
					 
					 
					    return  line_count ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImVec2  InputTextCalcTextSizeW ( const  ImWchar *  text_begin ,  const  ImWchar *  text_end ,  const  ImWchar * *  remaining ,  ImVec2 *  out_offset ,  bool  stop_on_new_line )  
					 
					 
					 
					static  ImVec2  InputTextCalcTextSizeW ( ImGuiContext *  ctx ,  const  ImWchar *  text_begin ,  const  ImWchar *  text_end ,  const  ImWchar * *  remaining ,  ImVec2 *  out_offset ,  bool  stop_on_new_line )  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ImGuiContext &  g  =  * GImGui ;   
					 
					 
					 
					    ImGuiContext &  g  =  * ctx ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    ImFont *  font  =  g . Font ;   
					 
					 
					 
					    ImFont *  font  =  g . Font ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  float  line_height  =  g . FontSize ;   
					 
					 
					 
					    const  float  line_height  =  g . FontSize ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  float  scale  =  line_height  /  font - > FontSize ;   
					 
					 
					 
					    const  float  scale  =  line_height  /  font - > FontSize ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -3614,14 +3614,14 @@ namespace ImStb 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int      STB_TEXTEDIT_STRINGLEN ( const  ImGuiInputTextState *  obj )                              {  return  obj - > CurLenW ;  }  
					 
					 
					 
					static  int      STB_TEXTEDIT_STRINGLEN ( const  ImGuiInputTextState *  obj )                              {  return  obj - > CurLenW ;  }  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImWchar  STB_TEXTEDIT_GETCHAR ( const  ImGuiInputTextState *  obj ,  int  idx )                       {  return  obj - > TextW [ idx ] ;  }  
					 
					 
					 
					static  ImWchar  STB_TEXTEDIT_GETCHAR ( const  ImGuiInputTextState *  obj ,  int  idx )                       {  return  obj - > TextW [ idx ] ;  }  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  float    STB_TEXTEDIT_GETWIDTH ( ImGuiInputTextState *  obj ,  int  line_start_idx ,  int  char_idx )   {  ImWchar  c  =  obj - > TextW [ line_start_idx  +  char_idx ] ;  if  ( c  = =  ' \n ' )  return  STB_TEXTEDIT_GETWIDTH_NEWLINE ;  ImGuiContext &  g  =  * GImGui ;  return  g . Font - > GetCharAdvance ( c )  *  ( g . FontSize  /  g . Font - > FontSize ) ;  }  
					 
					 
					 
					static  float    STB_TEXTEDIT_GETWIDTH ( ImGuiInputTextState *  obj ,  int  line_start_idx ,  int  char_idx )   {  ImWchar  c  =  obj - > TextW [ line_start_idx  +  char_idx ] ;  if  ( c  = =  ' \n ' )  return  STB_TEXTEDIT_GETWIDTH_NEWLINE ;  ImGuiContext &  g  =  * obj - > Ctx ;  return  g . Font - > GetCharAdvance ( c )  *  ( g . FontSize  /  g . Font - > FontSize ) ;  }  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					static  int      STB_TEXTEDIT_KEYTOTEXT ( int  key )                                                     {  return  key  > =  0x200000  ?  0  :  key ;  }  
					 
					 
					 
					static  int      STB_TEXTEDIT_KEYTOTEXT ( int  key )                                                     {  return  key  > =  0x200000  ?  0  :  key ;  }  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  ImWchar  STB_TEXTEDIT_NEWLINE  =  ' \n ' ;  
					 
					 
					 
					static  ImWchar  STB_TEXTEDIT_NEWLINE  =  ' \n ' ;  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void     STB_TEXTEDIT_LAYOUTROW ( StbTexteditRow *  r ,  ImGuiInputTextState *  obj ,  int  line_start_idx )  
					 
					 
					 
					static  void     STB_TEXTEDIT_LAYOUTROW ( StbTexteditRow *  r ,  ImGuiInputTextState *  obj ,  int  line_start_idx )  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  ImWchar *  text  =  obj - > TextW . Data ;   
					 
					 
					 
					    const  ImWchar *  text  =  obj - > TextW . Data ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  ImWchar *  text_remaining  =  NULL ;   
					 
					 
					 
					    const  ImWchar *  text_remaining  =  NULL ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    const  ImVec2  size  =  InputTextCalcTextSizeW ( text  +  line_start_idx ,  text  +  obj - > CurLenW ,  & text_remaining ,  NULL ,  true ) ;   
					 
					 
					 
					    const  ImVec2  size  =  InputTextCalcTextSizeW ( obj - > Ctx ,  text  +  line_start_idx ,  text  +  obj - > CurLenW ,  & text_remaining ,  NULL ,  true ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    r - > x0  =  0.0f ;   
					 
					 
					 
					    r - > x0  =  0.0f ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    r - > x1  =  size . x ;   
					 
					 
					 
					    r - > x1  =  size . x ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    r - > baseline_y_delta  =  size . y ;   
					 
					 
					 
					    r - > baseline_y_delta  =  size . y ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -3637,7 +3637,7 @@ static int  is_word_boundary_from_left(ImGuiInputTextState* obj, int idx) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDLEFT_IMPL ( ImGuiInputTextState *  obj ,  int  idx )    {  idx - - ;  while  ( idx  > =  0  & &  ! is_word_boundary_from_right ( obj ,  idx ) )  idx - - ;  return  idx  <  0  ?  0  :  idx ;  }  
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDLEFT_IMPL ( ImGuiInputTextState *  obj ,  int  idx )    {  idx - - ;  while  ( idx  > =  0  & &  ! is_word_boundary_from_right ( obj ,  idx ) )  idx - - ;  return  idx  <  0  ?  0  :  idx ;  }  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( ImGuiInputTextState *  obj ,  int  idx )    {  idx + + ;  int  len  =  obj - > CurLenW ;  while  ( idx  <  len  & &  ! is_word_boundary_from_left ( obj ,  idx ) )  idx + + ;  return  idx  >  len  ?  len  :  idx ;  }  
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( ImGuiInputTextState *  obj ,  int  idx )    {  idx + + ;  int  len  =  obj - > CurLenW ;  while  ( idx  <  len  & &  ! is_word_boundary_from_left ( obj ,  idx ) )  idx + + ;  return  idx  >  len  ?  len  :  idx ;  }  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( ImGuiInputTextState *  obj ,  int  idx )    {  idx + + ;  int  len  =  obj - > CurLenW ;  while  ( idx  <  len  & &  ! is_word_boundary_from_right ( obj ,  idx ) )  idx + + ;  return  idx  >  len  ?  len  :  idx ;  }  
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( ImGuiInputTextState *  obj ,  int  idx )    {  idx + + ;  int  len  =  obj - > CurLenW ;  while  ( idx  <  len  & &  ! is_word_boundary_from_right ( obj ,  idx ) )  idx + + ;  return  idx  >  len  ?  len  :  idx ;  }  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( ImGuiInputTextState *  obj ,  int  idx )   {  if  ( ImGui : : GetIO ( ) . ConfigMacOSXBehaviors )  return  STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( obj ,  idx ) ;  else  return  STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( obj ,  idx ) ;  }  
					 
					 
					 
					static  int   STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( ImGuiInputTextState *  obj ,  int  idx )   {  ImGuiContext &  g  =  * obj - > Ctx ;  if  ( g . IO . ConfigMacOSXBehaviors )  return  STB_TEXTEDIT_MOVEWORDRIGHT_MAC ( obj ,  idx ) ;  else  return  STB_TEXTEDIT_MOVEWORDRIGHT_WIN ( obj ,  idx ) ;  }  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					# define STB_TEXTEDIT_MOVEWORDLEFT   STB_TEXTEDIT_MOVEWORDLEFT_IMPL   // They need to be #define for stb_textedit.h
  
					 
					 
					 
					# define STB_TEXTEDIT_MOVEWORDLEFT   STB_TEXTEDIT_MOVEWORDLEFT_IMPL   // They need to be #define for stb_textedit.h
  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# define STB_TEXTEDIT_MOVEWORDRIGHT  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL  
					 
					 
					 
					# define STB_TEXTEDIT_MOVEWORDRIGHT  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4675,11 +4675,11 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                searches_result_line_no [ 1 ]  =  line_count ;   
					 
					 
					 
					                searches_result_line_no [ 1 ]  =  line_count ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            // Calculate 2d position by finding the beginning of the line and measuring distance
   
					 
					 
					 
					            // Calculate 2d position by finding the beginning of the line and measuring distance
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            cursor_offset . x  =  InputTextCalcTextSizeW ( ImStrbolW ( searches_input_ptr [ 0 ] ,  text_begin ) ,  searches_input_ptr [ 0 ] ) . x ;   
					 
					 
					 
					            cursor_offset . x  =  InputTextCalcTextSizeW ( & g ,  ImStrbolW ( searches_input_ptr [ 0 ] ,  text_begin ) ,  searches_input_ptr [ 0 ] ) . x ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					            cursor_offset . y  =  searches_result_line_no [ 0 ]  *  g . FontSize ;   
					 
					 
					 
					            cursor_offset . y  =  searches_result_line_no [ 0 ]  *  g . FontSize ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            if  ( searches_result_line_no [ 1 ]  > =  0 )   
					 
					 
					 
					            if  ( searches_result_line_no [ 1 ]  > =  0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            {   
					 
					 
					 
					            {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                select_start_offset . x  =  InputTextCalcTextSizeW ( ImStrbolW ( searches_input_ptr [ 1 ] ,  text_begin ) ,  searches_input_ptr [ 1 ] ) . x ;   
					 
					 
					 
					                select_start_offset . x  =  InputTextCalcTextSizeW ( & g ,  ImStrbolW ( searches_input_ptr [ 1 ] ,  text_begin ) ,  searches_input_ptr [ 1 ] ) . x ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                select_start_offset . y  =  searches_result_line_no [ 1 ]  *  g . FontSize ;   
					 
					 
					 
					                select_start_offset . y  =  searches_result_line_no [ 1 ]  *  g . FontSize ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            }   
					 
					 
					 
					            }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4748,7 +4748,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                }   
					 
					 
					 
					                }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                else   
					 
					 
					 
					                else   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                {   
					 
					 
					 
					                {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    ImVec2  rect_size  =  InputTextCalcTextSizeW ( p ,  text_selected_end ,  & p ,  NULL ,  true ) ;   
					 
					 
					 
					                    ImVec2  rect_size  =  InputTextCalcTextSizeW ( & g ,  p ,  text_selected_end ,  & p ,  NULL ,  true ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                    if  ( rect_size . x  < =  0.0f )  rect_size . x  =  IM_FLOOR ( g . Font - > GetCharAdvance ( ( ImWchar ) '   ' )  *  0.50f ) ;  // So we can see selected empty lines
   
					 
					 
					 
					                    if  ( rect_size . x  < =  0.0f )  rect_size . x  =  IM_FLOOR ( g . Font - > GetCharAdvance ( ( ImWchar ) '   ' )  *  0.50f ) ;  // So we can see selected empty lines
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    ImRect  rect ( rect_pos  +  ImVec2 ( 0.0f ,  bg_offy_up  -  g . FontSize ) ,  rect_pos  +  ImVec2 ( rect_size . x ,  bg_offy_dn ) ) ;   
					 
					 
					 
					                    ImRect  rect ( rect_pos  +  ImVec2 ( 0.0f ,  bg_offy_up  -  g . FontSize ) ,  rect_pos  +  ImVec2 ( rect_size . x ,  bg_offy_dn ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                    rect . ClipWith ( clip_rect ) ;   
					 
					 
					 
					                    rect . ClipWith ( clip_rect ) ;