@ -1903,15 +1903,21 @@ void ImGui::EndComboPreview() 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    preview_data - > PreviewRect  =  ImRect ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Getter for the old Combo() API: const char*[]
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  const  char *  Items_ ArrayGetter( void *  data ,  int  idx )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Getter for the old Combo()/ListBox()  API: const char*[]
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  ImStrv  Items_Char ArrayGetter( void *  data ,  int  idx )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  char *  const *  items  =  ( const  char *  const * ) data ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  items [ idx ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  ImStrv  Items_StrvArrayGetter ( void *  data ,  int  idx )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ImStrv  const *  items  =  ( ImStrv  const * ) data ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  items [ idx ] ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Getter for the old Combo() API: "item1\0item2\0item3\0"
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  const  char *  Items_SingleStringGetter ( void *  data ,  int  idx )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  ImStrv   Items_SingleStringGetter ( void *  data ,  int  idx )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  char *  items_separated_by_zeros  =  ( const  char * ) data ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    int  items_count  =  0 ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -1919,20 +1925,20 @@ static const char* Items_SingleStringGetter(void* data, int idx) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    while  ( * p )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( idx  = =  items_count )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  p ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        p  + =  strlen ( p )  +  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        items_count + + ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  * p  ?  p  :  NULL ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  NULL ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Old API, prefer using BeginCombo() nowadays if you can.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : Combo ( ImStrv  label ,  int *  current_item ,  const  char *   ( * getter ) ( void *  user_data ,  int  idx ) ,  void *  user_data ,  int  items_count ,  int  popup_max_height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : Combo ( ImStrv  label ,  int *  current_item ,  ImStrv   ( * getter ) ( void *  user_data ,  int  idx ) ,  void *  user_data ,  int  items_count ,  int  popup_max_height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ImGuiContext &  g  =  * GImGui ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    // Call the getter to obtain the preview string which is a parameter to BeginCombo()
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  char *   preview_value  =  NULL ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ImStrv   preview_value  =  NULL ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    if  ( * current_item  > =  0  & &  * current_item  <  items_count )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        preview_value  =  getter ( user_data ,  * current_item ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -1951,8 +1957,8 @@ bool ImGui::Combo(ImStrv label, int* current_item, const char* (*getter)(void* u 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    while  ( clipper . Step ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        for  ( int  i  =  clipper . DisplayStart ;  i  <  clipper . DisplayEnd ;  i + + )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            const  char *   item_text  =  getter ( user_data ,  i ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( item_text  = =  NULL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ImStrv   item_text  =  getter ( user_data ,  i ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( ! item_text )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                item_text  =  " *Unknown item* " ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            PushID ( i ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -1975,24 +1981,41 @@ bool ImGui::Combo(ImStrv label, int* current_item, const char* (*getter)(void* u 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Combo box helper allowing to pass an array of strings.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : Combo ( ImStrv  label ,  int *  current_item ,  ImStrv  const  items [ ] ,  int  items_count ,  int  height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  Combo ( label ,  current_item ,  Items_StrvArrayGetter ,  ( void * ) items ,  items_count ,  height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// We cannot easily obsolete the 'const char* []' version as this would be stored on user side..
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : Combo ( ImStrv  label ,  int *  current_item ,  const  char *  const  items [ ] ,  int  items_count ,  int  height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  bool  value_changed  =  Combo ( label ,  current_item ,  Items_ArrayGetter ,  ( void * ) items ,  items_count ,  height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  value_changed ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  Combo ( label ,  current_item ,  Items_CharArrayGetter ,  ( void * ) items ,  items_count ,  height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : Combo ( ImStrv  label ,  int *  current_item ,  const  char *  ( * getter ) ( void *  user_data ,  int  idx ) ,  void *  user_data ,  int  items_count ,  int  popup_max_height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    // Convert 'const char*' getter to ImStrv version via a proxy. Cumbersome but no way out.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    struct  GetterProxyData  {  void *  UserData ;  const  char *  ( * UserGetter ) ( void *  user_data ,  int  idx ) ;  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    GetterProxyData  proxy_data  =  {  user_data ,  getter  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  Combo ( label ,  current_item ,  [ ] ( void *  user_data ,  int  idx )  {  GetterProxyData &  proxy_data  =  * ( GetterProxyData * ) user_data ;  return  ImStrv ( proxy_data . UserGetter ( proxy_data . UserData ,  idx ) ) ;  } ,  & proxy_data ,  items_count ,  popup_max_height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# endif  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0"
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// We don't support an ImStrv version of this, because passing the typical "hello\0world" to a ImStrv constructor wouldn't yield the expected result.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// FIXME-OPT: Avoid computing count, or at least only when combo is open
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// FIXME-OPT: The dual pass is stupid, at least could build an index on first pass.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : Combo ( ImStrv  label ,  int *  current_item ,  const  char *  items_separated_by_zeros ,  int  height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    int  items_count  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  char *  p  =  items_separated_by_zeros ;        // FIXME-OPT: Avoid computing this, or at least only when combo is open
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  char *  p  =  items_separated_by_zeros ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    while  ( * p )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        p  + =  strlen ( p )  +  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        items_count + + ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    bool  value_changed  =  Combo ( label ,  current_item ,  Items_SingleStringGetter ,  ( void * ) items_separated_by_zeros ,  items_count ,  height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  value_changed ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  Combo ( label ,  current_item ,  Items_SingleStringGetter ,  ( void * ) items_separated_by_zeros ,  items_count ,  height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -6999,15 +7022,20 @@ void ImGui::EndListBox() 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    EndGroup ( ) ;  // This is only required to be able to do IsItemXXX query on the whole ListBox including label
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : ListBox ( ImStrv  label ,  int *  current_item ,  ImStrv  const  items [ ] ,  int  items_count ,  int  height_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  ListBox ( label ,  current_item ,  Items_StrvArrayGetter ,  ( void * ) items ,  items_count ,  height_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// We cannot easily obsolete the 'const char* []' version as this would be stored on user side..
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : ListBox ( ImStrv  label ,  int *  current_item ,  const  char *  const  items [ ] ,  int  items_count ,  int  height_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    const  bool  value_changed  =  ListBox ( label ,  current_item ,  Items_ArrayGetter ,  ( void * ) items ,  items_count ,  height_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  value_changed ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  ListBox ( label ,  current_item ,  Items_CharArrayGetter ,  ( void * ) items ,  items_count ,  height_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// This is merely a helper around BeginListBox(), EndListBox().
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Considering using those directly to submit custom data or store selection differently.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : ListBox ( ImStrv  label ,  int *  current_item ,  const  char *   ( * getter ) ( void *  user_data ,  int  idx ) ,  void *  user_data ,  int  items_count ,  int  height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : ListBox ( ImStrv  label ,  int *  current_item ,  ImStrv   ( * getter ) ( void *  user_data ,  int  idx ) ,  void *  user_data ,  int  items_count ,  int  height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    ImGuiContext &  g  =  * GImGui ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -7029,8 +7057,8 @@ bool ImGui::ListBox(ImStrv label, int* current_item, const char* (*getter)(void* 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    while  ( clipper . Step ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        for  ( int  i  =  clipper . DisplayStart ;  i  <  clipper . DisplayEnd ;  i + + )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            const  char *   item_text  =  getter ( user_data ,  i ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( item_text  = =  NULL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ImStrv   item_text  =  getter ( user_data ,  i ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            if  ( ! item_text )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                item_text  =  " *Unknown item* " ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            PushID ( i ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -7052,6 +7080,16 @@ bool ImGui::ListBox(ImStrv label, int* current_item, const char* (*getter)(void* 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  value_changed ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  ImGui : : ListBox ( ImStrv  label ,  int *  current_item ,  const  char *  ( * getter ) ( void *  user_data ,  int  idx ) ,  void *  user_data ,  int  items_count ,  int  height_in_items )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    // Convert 'const char*' getter to ImStrv version via a proxy. Cumbersome but no way out.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    struct  GetterProxyData  {  void *  UserData ;  const  char *  ( * UserGetter ) ( void *  user_data ,  int  idx ) ;  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    GetterProxyData  proxy_data  =  {  user_data ,  getter  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  ListBox ( label ,  current_item ,  [ ] ( void *  user_data ,  int  idx )  {  GetterProxyData &  proxy_data  =  * ( GetterProxyData * ) user_data ;  return  ImStrv ( proxy_data . UserGetter ( proxy_data . UserData ,  idx ) ) ;  } ,  & proxy_data ,  items_count ,  height_in_items ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# endif  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					//-------------------------------------------------------------------------
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// [SECTION] Widgets: PlotLines, PlotHistogram
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					//-------------------------------------------------------------------------