readline: Put cursor on clicked position
by default the cursor was always set at the end of the string. Now it is where clicked. see http://pulkomandy.tk/projects/GrafX2/ticket/103
This commit is contained in:
		
							parent
							
								
									8614490026
								
							
						
					
					
						commit
						91c5d7833a
					
				@ -653,17 +653,26 @@ byte Readline_ex_unicode(word x_pos, word y_pos, char * str, word * str_unicode,
 | 
			
		||||
 | 
			
		||||
  // Si on a commencé à editer par un clic-droit, on vide la chaine.
 | 
			
		||||
  if (Mouse_K==RIGHT_SIDE)
 | 
			
		||||
  {
 | 
			
		||||
    str[0]='\0';
 | 
			
		||||
  else if (input_type==INPUT_TYPE_INTEGER && str[0]!='\0')
 | 
			
		||||
    snprintf(str,10,"%d",atoi(str)); // On tasse la chaine à gauche
 | 
			
		||||
  else if (input_type==INPUT_TYPE_DECIMAL)
 | 
			
		||||
  {
 | 
			
		||||
    //  Nothing. The caller should have used Sprint_double, with min_positions
 | 
			
		||||
    //  at zero, so there's no spaces on the left and no useless 0s on the right.
 | 
			
		||||
    position = 0;
 | 
			
		||||
  }
 | 
			
		||||
  else if (input_type==INPUT_TYPE_HEXA)
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    //  Nothing. The caller should have initialized a valid hexa number.
 | 
			
		||||
    int int_pos = ((Mouse_X-Window_pos_X)/Menu_factor_X - x_pos) >> 3;
 | 
			
		||||
    position = (int_pos >= 0 && int_pos <= 255) ? (byte)int_pos : 255;
 | 
			
		||||
 | 
			
		||||
    if (input_type==INPUT_TYPE_INTEGER && str[0]!='\0')
 | 
			
		||||
      snprintf(str,10,"%d",atoi(str)); // align left
 | 
			
		||||
    else if (input_type==INPUT_TYPE_DECIMAL)
 | 
			
		||||
    {
 | 
			
		||||
      //  Nothing. The caller should have used Sprint_double, with min_positions
 | 
			
		||||
      //  at zero, so there's no spaces on the left and no useless 0s on the right.
 | 
			
		||||
    }
 | 
			
		||||
    else if (input_type==INPUT_TYPE_HEXA)
 | 
			
		||||
    {
 | 
			
		||||
      //  Nothing. The caller should have initialized a valid hexa number.
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if defined(__ANDROID__)
 | 
			
		||||
@ -789,9 +798,11 @@ byte Readline_ex_unicode(word x_pos, word y_pos, char * str, word * str_unicode,
 | 
			
		||||
  if (str_unicode != NULL)
 | 
			
		||||
  {
 | 
			
		||||
    size = Unicode_strlen(str_unicode);
 | 
			
		||||
    if (size > 255) size = 255;
 | 
			
		||||
    if (size > 255)
 | 
			
		||||
      size = 255;
 | 
			
		||||
    memcpy(initial_string_unicode, str_unicode, 2*(size+1));
 | 
			
		||||
    position  =(byte)((size<max_size) ? size : size-1);
 | 
			
		||||
    if (position >= size)
 | 
			
		||||
      position = (byte)((size<max_size) ? size : size-1);
 | 
			
		||||
    if (position-offset>=visible_size)
 | 
			
		||||
      offset=position-visible_size+1;
 | 
			
		||||
    // copy only part of the string if it is too long
 | 
			
		||||
@ -805,9 +816,11 @@ byte Readline_ex_unicode(word x_pos, word y_pos, char * str, word * str_unicode,
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    size=strlen(str);
 | 
			
		||||
    if (size > 255) size = 255;
 | 
			
		||||
    position = (byte)((size<max_size) ? size : size-1);
 | 
			
		||||
    size = strlen(str);
 | 
			
		||||
    if (size > 255)
 | 
			
		||||
      size = 255;
 | 
			
		||||
    if (position >= size)
 | 
			
		||||
      position = (byte)((size<max_size) ? size : size-1);
 | 
			
		||||
    if (position-offset>=visible_size)
 | 
			
		||||
      offset=position-visible_size+1;
 | 
			
		||||
    // copy only part of the string if it is too long
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user