@ -4105,12 +4105,6 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    const  bool  RENDER_SELECTION_WHEN_INACTIVE  =  false ;      const  bool  RENDER_SELECTION_WHEN_INACTIVE  =  false ;   
			
		
	
		
		
			
				
					
					    const  bool  is_multiline  =  ( flags  &  ImGuiInputTextFlags_Multiline )  ! =  0 ;      const  bool  is_multiline  =  ( flags  &  ImGuiInputTextFlags_Multiline )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_readonly  =  ( flags  &  ImGuiInputTextFlags_ReadOnly )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_password  =  ( flags  &  ImGuiInputTextFlags_Password )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_undoable  =  ( flags  &  ImGuiInputTextFlags_NoUndoRedo )  = =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_resizable  =  ( flags  &  ImGuiInputTextFlags_CallbackResize )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    if  ( is_resizable )   
			
		
	
		
		
			
				
					
					        IM_ASSERT ( callback  ! =  NULL ) ;  // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  ( is_multiline )  // Open group before calling GetID() because groups tracks id created within their scope (including the scrollbar)
      if  ( is_multiline )  // Open group before calling GetID() because groups tracks id created within their scope (including the scrollbar)
   
			
		
	
		
		
			
				
					
					        BeginGroup ( ) ;          BeginGroup ( ) ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -4180,6 +4174,15 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ 
			
		
	
		
		
			
				
					
					    // We are only allowed to access the state if we are already the active widget.
      // We are only allowed to access the state if we are already the active widget.
   
			
		
	
		
		
			
				
					
					    ImGuiInputTextState *  state  =  GetInputTextState ( id ) ;      ImGuiInputTextState *  state  =  GetInputTextState ( id ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  ( g . LastItemData . InFlags  &  ImGuiItemFlags_ReadOnly )   
			
		
	
		
		
			
				
					
					        flags  | =  ImGuiInputTextFlags_ReadOnly ;   
			
		
	
		
		
			
				
					
					    const  bool  is_readonly  =  ( flags  &  ImGuiInputTextFlags_ReadOnly )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_password  =  ( flags  &  ImGuiInputTextFlags_Password )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_undoable  =  ( flags  &  ImGuiInputTextFlags_NoUndoRedo )  = =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  is_resizable  =  ( flags  &  ImGuiInputTextFlags_CallbackResize )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    if  ( is_resizable )   
			
		
	
		
		
			
				
					
					        IM_ASSERT ( callback  ! =  NULL ) ;  // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    const  bool  input_requested_by_tabbing  =  ( item_status_flags  &  ImGuiItemStatusFlags_FocusedByTabbing )  ! =  0 ;      const  bool  input_requested_by_tabbing  =  ( item_status_flags  &  ImGuiItemStatusFlags_FocusedByTabbing )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    const  bool  input_requested_by_nav  =  ( g . ActiveId  ! =  id )  & &  ( ( g . NavActivateId  = =  id )  & &  ( ( g . NavActivateFlags  &  ImGuiActivateFlags_PreferInput )  | |  ( g . NavInputSource  = =  ImGuiInputSource_Keyboard ) ) ) ;      const  bool  input_requested_by_nav  =  ( g . ActiveId  ! =  id )  & &  ( ( g . NavActivateId  = =  id )  & &  ( ( g . NavActivateFlags  &  ImGuiActivateFlags_PreferInput )  | |  ( g . NavInputSource  = =  ImGuiInputSource_Keyboard ) ) ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -4716,7 +4719,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ 
			
		
	
		
		
			
				
					
					                    if  ( callback_data . SelectionEnd  ! =  utf8_selection_end  | |  buf_dirty )       {  state - > Stb . select_end  =  ( callback_data . SelectionEnd  = =  callback_data . SelectionStart )  ?  state - > Stb . select_start  :  ImTextCountCharsFromUtf8 ( callback_data . Buf ,  callback_data . Buf  +  callback_data . SelectionEnd ) ;  }                      if  ( callback_data . SelectionEnd  ! =  utf8_selection_end  | |  buf_dirty )       {  state - > Stb . select_end  =  ( callback_data . SelectionEnd  = =  callback_data . SelectionStart )  ?  state - > Stb . select_start  :  ImTextCountCharsFromUtf8 ( callback_data . Buf ,  callback_data . Buf  +  callback_data . SelectionEnd ) ;  }   
			
		
	
		
		
			
				
					
					                    if  ( buf_dirty )                      if  ( buf_dirty )   
			
		
	
		
		
			
				
					
					                    {                      {   
			
		
	
		
		
			
				
					
					                        IM_ASSERT ( ( flags  &  ImGuiInputTextFlags_ReadOnly )  = =  0 ) ;                          IM_ASSERT ( ! is_readonly ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					                        IM_ASSERT ( callback_data . BufTextLen  = =  ( int ) strlen ( callback_data . Buf ) ) ;  // You need to maintain BufTextLen if you change the text!
                          IM_ASSERT ( callback_data . BufTextLen  = =  ( int ) strlen ( callback_data . Buf ) ) ;  // You need to maintain BufTextLen if you change the text!
   
			
		
	
		
		
			
				
					
					                        InputTextReconcileUndoStateAfterUserCallback ( state ,  callback_data . Buf ,  callback_data . BufTextLen ) ;  // FIXME: Move the rest of this block inside function and rename to InputTextReconcileStateAfterUserCallback() ?
                          InputTextReconcileUndoStateAfterUserCallback ( state ,  callback_data . Buf ,  callback_data . BufTextLen ) ;  // FIXME: Move the rest of this block inside function and rename to InputTextReconcileStateAfterUserCallback() ?
   
			
		
	
		
		
			
				
					
					                        if  ( callback_data . BufTextLen  >  backup_current_text_length  & &  is_resizable )                          if  ( callback_data . BufTextLen  >  backup_current_text_length  & &  is_resizable )   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -5337,7 +5340,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // Drag and Drop Target
      // Drag and Drop Target
   
			
		
	
		
		
			
				
					
					    // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
      // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
   
			
		
	
		
		
			
				
					
					    if  ( ( g . LastItemData . StatusFlags  &  ImGuiItemStatusFlags_HoveredRect )  & &  ! ( flags  &  ImGuiColorEditFlags_NoDragDrop )  & &  BeginDragDropTarget ( ) )      if  ( ( g . LastItemData . StatusFlags  &  ImGuiItemStatusFlags_HoveredRect )  & &  ! ( g . LastItemData . InFlags  &  ImGuiItemFlags_ReadOnly )  & &  ! ( flags  &  ImGuiColorEditFlags_NoDragDrop )  & &  BeginDragDropTarget ( ) )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    {      {   
			
		
	
		
		
			
				
					
					        bool  accepted_drag_drop  =  false ;          bool  accepted_drag_drop  =  false ;   
			
		
	
		
		
			
				
					
					        if  ( const  ImGuiPayload *  payload  =  AcceptDragDropPayload ( IMGUI_PAYLOAD_TYPE_COLOR_3F ) )          if  ( const  ImGuiPayload *  payload  =  AcceptDragDropPayload ( IMGUI_PAYLOAD_TYPE_COLOR_3F ) )   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -5402,6 +5405,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl 
			
		
	
		
		
			
				
					
					    ImGuiIO &  io  =  g . IO ;      ImGuiIO &  io  =  g . IO ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    const  float  width  =  CalcItemWidth ( ) ;      const  float  width  =  CalcItemWidth ( ) ;   
			
		
	
		
		
			
				
					
					    const  bool  is_readonly  =  ( ( g . NextItemData . ItemFlags  |  g . CurrentItemFlags )  &  ImGuiItemFlags_ReadOnly )  ! =  0 ;   
			
		
	
		
		
			
				
					
					    g . NextItemData . ClearFlags ( ) ;      g . NextItemData . ClearFlags ( ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    PushID ( label ) ;      PushID ( label ) ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -5472,7 +5476,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl 
			
		
	
		
		
			
				
					
					    {      {   
			
		
	
		
		
			
				
					
					        // Hue wheel + SV triangle logic
          // Hue wheel + SV triangle logic
   
			
		
	
		
		
			
				
					
					        InvisibleButton ( " hsv " ,  ImVec2 ( sv_picker_size  +  style . ItemInnerSpacing . x  +  bars_width ,  sv_picker_size ) ) ;          InvisibleButton ( " hsv " ,  ImVec2 ( sv_picker_size  +  style . ItemInnerSpacing . x  +  bars_width ,  sv_picker_size ) ) ;   
			
		
	
		
		
			
				
					
					        if  ( IsItemActive ( ) )          if  ( IsItemActive ( )  & &  ! is_readonly  )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        {          {   
			
		
	
		
		
			
				
					
					            ImVec2  initial_off  =  g . IO . MouseClickedPos [ 0 ]  -  wheel_center ;              ImVec2  initial_off  =  g . IO . MouseClickedPos [ 0 ]  -  wheel_center ;   
			
		
	
		
		
			
				
					
					            ImVec2  current_off  =  g . IO . MousePos  -  wheel_center ;              ImVec2  current_off  =  g . IO . MousePos  -  wheel_center ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -5507,7 +5511,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl 
			
		
	
		
		
			
				
					
					    {      {   
			
		
	
		
		
			
				
					
					        // SV rectangle logic
          // SV rectangle logic
   
			
		
	
		
		
			
				
					
					        InvisibleButton ( " sv " ,  ImVec2 ( sv_picker_size ,  sv_picker_size ) ) ;          InvisibleButton ( " sv " ,  ImVec2 ( sv_picker_size ,  sv_picker_size ) ) ;   
			
		
	
		
		
			
				
					
					        if  ( IsItemActive ( ) )          if  ( IsItemActive ( )  & &  ! is_readonly  )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        {          {   
			
		
	
		
		
			
				
					
					            S  =  ImSaturate ( ( io . MousePos . x  -  picker_pos . x )  /  ( sv_picker_size  -  1 ) ) ;              S  =  ImSaturate ( ( io . MousePos . x  -  picker_pos . x )  /  ( sv_picker_size  -  1 ) ) ;   
			
		
	
		
		
			
				
					
					            V  =  1.0f  -  ImSaturate ( ( io . MousePos . y  -  picker_pos . y )  /  ( sv_picker_size  -  1 ) ) ;              V  =  1.0f  -  ImSaturate ( ( io . MousePos . y  -  picker_pos . y )  /  ( sv_picker_size  -  1 ) ) ;   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -5520,7 +5524,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl 
			
		
	
		
		
			
				
					
					        // Hue bar logic
          // Hue bar logic
   
			
		
	
		
		
			
				
					
					        SetCursorScreenPos ( ImVec2 ( bar0_pos_x ,  picker_pos . y ) ) ;          SetCursorScreenPos ( ImVec2 ( bar0_pos_x ,  picker_pos . y ) ) ;   
			
		
	
		
		
			
				
					
					        InvisibleButton ( " hue " ,  ImVec2 ( bars_width ,  sv_picker_size ) ) ;          InvisibleButton ( " hue " ,  ImVec2 ( bars_width ,  sv_picker_size ) ) ;   
			
		
	
		
		
			
				
					
					        if  ( IsItemActive ( ) )          if  ( IsItemActive ( )  & &  ! is_readonly  )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        {          {   
			
		
	
		
		
			
				
					
					            H  =  ImSaturate ( ( io . MousePos . y  -  picker_pos . y )  /  ( sv_picker_size  -  1 ) ) ;              H  =  ImSaturate ( ( io . MousePos . y  -  picker_pos . y )  /  ( sv_picker_size  -  1 ) ) ;   
			
		
	
		
		
			
				
					
					            value_changed  =  value_changed_h  =  true ;              value_changed  =  value_changed_h  =  true ;