Issue 473: Fix mouse droppings in Brush rotate tool when you hold Shift
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@2012 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									d8fd3d33a4
								
							
						
					
					
						commit
						effde4aee2
					
				@ -952,24 +952,27 @@ void Rotate_brush_1_5(void)
 | 
			
		||||
  short prev_state;
 | 
			
		||||
  float angle;
 | 
			
		||||
  int dx,dy;
 | 
			
		||||
  short cursor_x,cursor_y;
 | 
			
		||||
 | 
			
		||||
  Operation_pop(&prev_state);
 | 
			
		||||
  Operation_pop(&old_y);
 | 
			
		||||
  Operation_pop(&old_x);
 | 
			
		||||
 | 
			
		||||
  // On corrige les coordonnées de la ligne si la touche shift est appuyée...
 | 
			
		||||
  cursor_x = Paintbrush_X;
 | 
			
		||||
  cursor_y = Paintbrush_Y;
 | 
			
		||||
  if(SDL_GetModState() & KMOD_SHIFT)
 | 
			
		||||
    Clamp_coordinates_regular_angle(Brush_rotation_center_X,Brush_rotation_center_Y,&Paintbrush_X,&Paintbrush_Y);
 | 
			
		||||
    Clamp_coordinates_regular_angle(Brush_rotation_center_X,Brush_rotation_center_Y,&cursor_x,&cursor_y);
 | 
			
		||||
 | 
			
		||||
  if ( (Paintbrush_X!=old_x) || (Paintbrush_Y!=old_y) || (prev_state!=2) )
 | 
			
		||||
  if ( (cursor_x!=old_x) || (cursor_y!=old_y) || (prev_state!=2) )
 | 
			
		||||
  {
 | 
			
		||||
    if ( (Brush_rotation_center_X==Paintbrush_X)
 | 
			
		||||
      && (Brush_rotation_center_Y==Paintbrush_Y) )
 | 
			
		||||
    if ( (Brush_rotation_center_X==cursor_x)
 | 
			
		||||
      && (Brush_rotation_center_Y==cursor_y) )
 | 
			
		||||
      angle=0.0;
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      dx=Paintbrush_X-Brush_rotation_center_X;
 | 
			
		||||
      dy=Paintbrush_Y-Brush_rotation_center_Y;
 | 
			
		||||
      dx=cursor_x-Brush_rotation_center_X;
 | 
			
		||||
      dy=cursor_y-Brush_rotation_center_Y;
 | 
			
		||||
      angle=M_2PI-atan2(dy,dx);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -989,12 +992,13 @@ void Rotate_brush_1_5(void)
 | 
			
		||||
    Display_cursor();
 | 
			
		||||
 | 
			
		||||
    Operation_stack_size-=2;
 | 
			
		||||
    Operation_push(Paintbrush_X);
 | 
			
		||||
    Operation_push(Paintbrush_Y);
 | 
			
		||||
    Operation_push(cursor_x);
 | 
			
		||||
    Operation_push(cursor_y);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  Operation_push(Paintbrush_X);
 | 
			
		||||
  Operation_push(Paintbrush_Y);
 | 
			
		||||
 | 
			
		||||
  Operation_push(cursor_x);
 | 
			
		||||
  Operation_push(cursor_y);
 | 
			
		||||
  Operation_push(2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1018,24 +1022,29 @@ void Rotate_brush_0_5(void)
 | 
			
		||||
  short prev_state;
 | 
			
		||||
  float angle=0.0;
 | 
			
		||||
  int dx,dy;
 | 
			
		||||
  short cursor_x, cursor_y;
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  Operation_pop(&prev_state);
 | 
			
		||||
  Operation_pop(&old_y);
 | 
			
		||||
  Operation_pop(&old_x);
 | 
			
		||||
 | 
			
		||||
  // On corrige les coordonnées de la ligne si la touche shift est appuyée...
 | 
			
		||||
  cursor_x = Paintbrush_X;
 | 
			
		||||
  cursor_y = Paintbrush_Y;
 | 
			
		||||
  if(SDL_GetModState() & KMOD_SHIFT)
 | 
			
		||||
    Clamp_coordinates_regular_angle(Brush_rotation_center_X,Brush_rotation_center_Y,&Paintbrush_X,&Paintbrush_Y);
 | 
			
		||||
    Clamp_coordinates_regular_angle(Brush_rotation_center_X,Brush_rotation_center_Y,&cursor_x,&cursor_y);
 | 
			
		||||
 | 
			
		||||
  if ((Paintbrush_X!=old_x) || (Paintbrush_Y!=old_y) || (prev_state!=3))
 | 
			
		||||
  if ((cursor_x!=old_x) || (cursor_y!=old_y) || (prev_state!=3))
 | 
			
		||||
  {
 | 
			
		||||
    if ( (Brush_rotation_center_X==Paintbrush_X)
 | 
			
		||||
      && (Brush_rotation_center_Y==Paintbrush_Y) )
 | 
			
		||||
    Hide_cursor();
 | 
			
		||||
    if ( (Brush_rotation_center_X==cursor_x)
 | 
			
		||||
      && (Brush_rotation_center_Y==cursor_y) )
 | 
			
		||||
      angle=0.0;
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      dx=Paintbrush_X-Brush_rotation_center_X;
 | 
			
		||||
      dy=Paintbrush_Y-Brush_rotation_center_Y;
 | 
			
		||||
      dx=cursor_x-Brush_rotation_center_X;
 | 
			
		||||
      dy=cursor_y-Brush_rotation_center_Y;
 | 
			
		||||
      angle=acos(((float)dx)/sqrt((dx*dx)+(dy*dy)));
 | 
			
		||||
      if (dy>0) angle=M_2PI-angle;
 | 
			
		||||
    }
 | 
			
		||||
@ -1050,6 +1059,7 @@ void Rotate_brush_0_5(void)
 | 
			
		||||
      else
 | 
			
		||||
        Print_coordinates();
 | 
			
		||||
    }
 | 
			
		||||
    Display_cursor();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Utilise Key_ANSI au lieu de Key, car Get_input() met ce dernier
 | 
			
		||||
@ -1089,8 +1099,8 @@ void Rotate_brush_0_5(void)
 | 
			
		||||
    Operation_push(computed_y);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Operation_push(Paintbrush_X);
 | 
			
		||||
  Operation_push(Paintbrush_Y);
 | 
			
		||||
  Operation_push(cursor_x);
 | 
			
		||||
  Operation_push(cursor_y);
 | 
			
		||||
  Operation_push(3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1781,7 +1781,11 @@ void Draw_line_preview(short start_x,short start_y,short end_x,short end_y,byte
 | 
			
		||||
void Draw_line_preview_xor(short start_x,short start_y,short end_x,short end_y,byte color)
 | 
			
		||||
{
 | 
			
		||||
  int w, h;
 | 
			
		||||
  Pixel_figure=Pixel_figure_preview_xor;
 | 
			
		||||
  
 | 
			
		||||
  Pixel_figure=(Func_pixel)Pixel_figure_preview_xor;
 | 
			
		||||
  // Needed a cast because this function supports signed shorts,
 | 
			
		||||
  // (it's usually in image space), while this time it's in screen space
 | 
			
		||||
  // and some line endpoints can be out of screen.
 | 
			
		||||
  Draw_line_general(start_x,start_y,end_x,end_y,color);
 | 
			
		||||
  
 | 
			
		||||
  if (start_x<Limit_left)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user