Paste in Text tool: fix a graphic overflow.
Palette reduce: use DawnBringer's formula for color likeness git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1837 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									db3293060f
								
							
						
					
					
						commit
						775ee56ed0
					
				
							
								
								
									
										13
									
								
								src/input.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/input.h
									
									
									
									
									
								
							@ -64,3 +64,16 @@ extern int Snap_axis_origin_Y;
 | 
				
			|||||||
/// This malloced string is set when a drag-and-drop event
 | 
					/// This malloced string is set when a drag-and-drop event
 | 
				
			||||||
/// brings a file to Grafx2's window.
 | 
					/// brings a file to Grafx2's window.
 | 
				
			||||||
extern char * Drop_file_name;
 | 
					extern char * Drop_file_name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined __HAIKU__
 | 
				
			||||||
 | 
						#define SHORTCUT_COPY (SDLK_c|MOD_ALT)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						#define SHORTCUT_COPY (SDLK_c|MOD_CTRL)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined __HAIKU__
 | 
				
			||||||
 | 
						#define SHORTCUT_PASTE (SDLK_v|MOD_ALT)
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						#define SHORTCUT_PASTE (SDLK_v|MOD_CTRL)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -559,8 +559,8 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
 | 
				
			|||||||
  int   color_2;                // |  de la palette
 | 
					  int   color_2;                // |  de la palette
 | 
				
			||||||
  int   best_color_1=0;
 | 
					  int   best_color_1=0;
 | 
				
			||||||
  int   best_color_2=0;
 | 
					  int   best_color_2=0;
 | 
				
			||||||
  int   difference;
 | 
					  long   difference;
 | 
				
			||||||
  int   best_difference;
 | 
					  long   best_difference;
 | 
				
			||||||
  dword used;
 | 
					  dword used;
 | 
				
			||||||
  dword best_used;
 | 
					  dword best_used;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -621,16 +621,19 @@ void Reduce_palette(short * used_colors,int nb_colors_asked,T_Palette palette,dw
 | 
				
			|||||||
    // une seule couleur qui est la moyenne pondérée de ces 2 couleurs
 | 
					    // une seule couleur qui est la moyenne pondérée de ces 2 couleurs
 | 
				
			||||||
    // en fonction de leur utilisation dans l'image.
 | 
					    // en fonction de leur utilisation dans l'image.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    best_difference =0x7FFF;
 | 
					    best_difference =26*255*26*255+55*255*255+19*255*19*255;
 | 
				
			||||||
    best_used=0x7FFFFFFF;
 | 
					    best_used=0x7FFFFFFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (color_1=0;color_1<(*used_colors);color_1++)
 | 
					    for (color_1=0;color_1<(*used_colors);color_1++)
 | 
				
			||||||
      for (color_2=color_1+1;color_2<(*used_colors);color_2++)
 | 
					      for (color_2=color_1+1;color_2<(*used_colors);color_2++)
 | 
				
			||||||
        if (color_1!=color_2)
 | 
					        if (color_1!=color_2)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          difference =abs((short)palette[color_1].R-palette[color_2].R)+
 | 
					          difference =26*abs((long)palette[color_1].R-palette[color_2].R)*
 | 
				
			||||||
                      abs((short)palette[color_1].G-palette[color_2].G)+
 | 
					                      26*abs((long)palette[color_1].R-palette[color_2].R)+
 | 
				
			||||||
                      abs((short)palette[color_1].B-palette[color_2].B);
 | 
					                      55*abs((long)palette[color_1].G-palette[color_2].G)*
 | 
				
			||||||
 | 
					                      55*abs((long)palette[color_1].G-palette[color_2].G)+
 | 
				
			||||||
 | 
					                      19*abs((long)palette[color_1].B-palette[color_2].B)*
 | 
				
			||||||
 | 
					                      19*abs((long)palette[color_1].B-palette[color_2].B);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if (difference<=best_difference)
 | 
					          if (difference<=best_difference)
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
@ -2673,11 +2676,11 @@ void Button_Palette(void)
 | 
				
			|||||||
          // Close (confirm)
 | 
					          // Close (confirm)
 | 
				
			||||||
          clicked_button=14;
 | 
					          clicked_button=14;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (Key == (SDLK_c|MOD_CTRL)) // Ctrl-C
 | 
					        else if (Key == SHORTCUT_COPY)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          Set_clipboard_colors(block_end+1-block_start,working_palette + block_start);
 | 
					          Set_clipboard_colors(block_end+1-block_start,working_palette + block_start);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (Key == (SDLK_v|MOD_CTRL)) // Ctrl-V
 | 
					        else if (Key == SHORTCUT_PASTE)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          int nb_colors;
 | 
					          int nb_colors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -526,23 +526,30 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
 | 
				
			|||||||
          input_key=SDLK_RETURN;
 | 
					          input_key=SDLK_RETURN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Handle paste request on CTRL+v
 | 
					        // Handle paste request on CTRL+v
 | 
				
			||||||
#if defined __HAIKU__
 | 
					        if (Key == SHORTCUT_PASTE)
 | 
				
			||||||
	#define SHORTCUTKEY MOD_ALT
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
	#define SHORTCUTKEY MOD_CTRL
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
        if ((Key & SHORTCUTKEY) && ((Key & 0xFFF) == 'v'))
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					          int nb_added;
 | 
				
			||||||
          char* data = getClipboard();
 | 
					          char* data = getClipboard();
 | 
				
			||||||
          if (data == NULL) continue; // No clipboard data
 | 
					          if (data == NULL) continue; // No clipboard data
 | 
				
			||||||
		  Cleanup_string(data, input_type);
 | 
					            Cleanup_string(data, input_type);
 | 
				
			||||||
          // Insert it at the cursor position
 | 
					          // Insert it at the cursor position
 | 
				
			||||||
		  position += Prepend_string(str + position, data, max_size - position);
 | 
					          nb_added = Prepend_string(str + position, data, max_size - position);
 | 
				
			||||||
 | 
					          while (nb_added)
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            size++;
 | 
				
			||||||
 | 
					            if (size<max_size)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              position++;
 | 
				
			||||||
 | 
					              if (display_string[position-offset]==RIGHT_TRIANGLE_CHARACTER || position-offset>=visible_size)
 | 
				
			||||||
 | 
					                offset++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            nb_added--;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          free(data);
 | 
					          free(data);
 | 
				
			||||||
          goto affichage;
 | 
					          goto affichage;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
      } while(input_key==0);
 | 
					      } while(input_key==0);
 | 
				
			||||||
#undef SHORTCUTKEY
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Hide_cursor();
 | 
					    Hide_cursor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -639,7 +646,7 @@ byte Readline_ex(word x_pos,word y_pos,char * str,byte visible_size,byte max_siz
 | 
				
			|||||||
        if (size<max_size)
 | 
					        if (size<max_size)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          // Si la touche était autorisée...
 | 
					          // Si la touche était autorisée...
 | 
				
			||||||
		  byte is_authorized = Valid_character(input_key, input_type);
 | 
					          byte is_authorized = Valid_character(input_key, input_type);
 | 
				
			||||||
          if (is_authorized == 1 || (is_authorized == 2 && position == 0 && str[position] != '-'))
 | 
					          if (is_authorized == 1 || (is_authorized == 2 && position == 0 && str[position] != '-'))
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            // ... alors on l'insère ...
 | 
					            // ... alors on l'insère ...
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user