
    cc                     F    d dl Z d dlmZ ddlmZ ddlmZ  G d de      Zy)    N)Gdk   )AbstractCanvasTool)OptionsBarRotatec                        e Zd Zd Z fdZd Zd Zd Zd Z fdZ	d Z
ddZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )
ToolRotatec                 T   t         |   dt        d      d|       d| _        d| _        d| _        d| _        | j                  d| j                         | j                  d| j                         | j                  d	| j                         | j                  d
| j                         y )NrotateRotateztool-rotate-symbolicpointerFr   zrotate-clockwisezrotate-counter-cwzrotate-flip-hzrotate-flip-v)super__init___cursor_nameflip_hflip_vangle_pressadd_tool_action_simpleon_right_clickedon_left_clickedon_horizontal_clickedon_vertical_clicked)selfwindow	__class__s     5/usr/lib/python3/dist-packages/drawing/tool_rotate.pyr   zToolRotate.__init__   s    '8Qx[*@&I$$+$+$0$2G2GH143G3GHot/I/IJot/G/GH    c                 r    d| _         | j                  j                  j                  | j                   |        y )Nr
   )pane_idr   options_managertry_add_bottom_paner   s    r   try_build_panezToolRotate.try_build_pane&   s'    $,++11$,,Er   c                     t        |       }|j                  | _        | j                  j                  d| j                         |S )Nzvalue-changed)r   	angle_btnconnecton_angle_changed)r   panes     r   build_bottom_panezToolRotate.build_bottom_pane*   s6    	$	$>>$...$*?*?@	+r   c                     t        d      S )NzRotating options)r   r"   s    r   get_options_labelzToolRotate.get_options_label0   s    	
	r   c                     | j                   rt        d      }d }n&t        d      }| j                  dz   t        d      z   }||g}t        t	        d |            S )NzRotating the selectionzRotating the canvasz - z&Don't forget to confirm the operation!)apply_to_selectionr   labellistfilter)r   label_actionlabel_confirm	full_lists       r   get_editing_tipszToolRotate.get_editing_tips3   sa    	,-<=)*<::%FGH= ]+)	fT9%	&&r   c                     t         |           d| _        d| _        | j                  j                  d       | j                          | j                  rd| _        y d| _        y )NFg        mover   )	r   on_tool_selectedr   r   r%   	set_valuebuild_and_do_opr-   r   )r   argsr   s     r   r7   zToolRotate.on_tool_selectedB   sU    '$+$+..3	4  4r   c                 Z   | j                  |j                         d| j                  v r@|j                  dk(  r| j	                          y |j                  dk(  r| j                          y | j                  s@|j                  dk(  r| j                          y |j                  dk(  r| j                          y | j                         j                         \  }}||z
  }||z
  }t        j                  ||      dz  t        j                  z  }	| j                         t        |	      z
  | _        y )NSHIFTr         )update_modifier_statestate_modifier_keysbuttonr   r   r-   r   r   get_selectionget_center_coordsmathatan2pi	get_angleintr   )
r   eventsurfaceevent_xevent_ycenter_xcenter_ydelta_x0delta_y0press_as_degreess
             r   on_press_on_areazToolRotate.on_press_on_areaQ   s   U[[)###lla  
 		""lla 
 		))+==?(H((jj84s:dggE^^%,<(==$r   c                 r   | j                   sy | j                         j                         \  }}||z
  }||z
  }	t        j                  ||	      dz  t        j
                  z  }
| j                  j                  t        |
      | j                  z          |r"| j                         }| j                  |       y y )Nr>   )r-   rC   rD   rE   rF   rG   r%   r8   rI   r   build_operationdo_tool_operation)r   rJ   rK   rL   rM   renderrN   rO   delta_xdelta_yrelease_angle	operations               r   on_motion_on_areazToolRotate.on_motion_on_areaf   s    		 	 	))+==?(Hw'w'JJw036477B-..3}-0@0@@A##%9)$ r   c                 ,    | j                  ||||       y N)r\   )r   rJ   rK   rL   rM   s        r   on_release_on_areazToolRotate.on_release_on_arear   s    ':r   c                 6    | j                   j                         S r^   )r%   get_value_as_intr"   s    r   rH   zToolRotate.get_anglew   s    		(	(	**r   c                 `    | j                         }| j                  j                  |dz
         y NZ   get_normalized_angler%   r8   r   r:   angles      r   r   zToolRotate.on_right_clickedz   &    

#
#
%%..52:&r   c                 `    | j                         }| j                  j                  |dz          y rc   re   rg   s      r   r   zToolRotate.on_left_clicked~   ri   r   c                 H    | j                    | _         | j                          y r^   )r   r9   r   r:   s     r   r   zToolRotate.on_vertical_clicked       KK$+r   c                 H    | j                    | _         | j                          y r^   )r   r9   rl   s     r   r   z ToolRotate.on_horizontal_clicked   rm   r   c                 N    | j                         dz  }t        |dz        dz  }|S )Nh  rd   )rH   rI   rg   s      r   rf   zToolRotate.get_normalized_angle   s*    
..
S
 %
eBh-"
%	,r   c                     | j                         dk(  s| j                         dk(  r| j                  j                  d       | j                          y )Nrp   ir   )rH   r%   r8   r9   rl   s     r   r'   zToolRotate.on_angle_changed   s=    	^^ 0D 8>>Ar   c                 D   d}d}|| j                         j                  j                         z   }|| j                         j                  j                         z   }| j                         j	                  ||||| j
                  d      \  }}}}| j                  |||       y )Nr   F)	get_imagetemp_pixbuf	get_width
get_heightget_corrected_coordsr-   _draw_temp_pixbuf)r   areacairo_contextx1y1x2y2s          r   on_draw_abovezToolRotate.on_draw_above   s    ""	DNN((2244"	DNN((3355">>#88RR+/+B+BEK."b"bB/r   c           	          | j                   | j                  ddd| j                         | j                  | j                  d}|S )NTr   )tool_idis_selection
is_previewlocal_dxlocal_dyrh   r   r   )idr-   rH   r   r   )r   r[   s     r   rU   zToolRotate.build_operation   sB    gg**NN[[[[	) 
r   c                 "   | j                  |       |d   }|d   }|d   }|d   r| j                         }n| j                         }|dk  r|dz  }t        |dz        dz  }|dz  }|}|r|j	                  d      }|r|j	                  d	      }|j                  |      }|dk7  rt        j                  |dd       }	|	j                  | j                         | j                                | j                  ||	j                         |	j                               }
| j                  |	|
      }t        j                  |dd|j                         |j                               }| j                         j!                  |       | j#                  |       y )
Nrh   r   r   r   r   rp   rd   TF)start_tool_operationget_selection_pixbufget_main_pixbufrI   fliprotate_simpler    cairo_surface_create_from_pixbufset_device_scalescale_factor_get_rotation_matrixru   rv   get_deformed_surfacepixbuf_get_from_surfacers   set_temp_pixbufcommon_end_operation)r   r[   rh   r   r   source_pixbufgdk_rotationcairo_rotation
new_pixbufsurface0coefsnew_surfaces               r   rV   zToolRotate.do_tool_operation   s   I&
G
%X&X&~,,.='')=
QYC<5URZ2%,2:. * %:&: ''5* q22:q$G8T..0$2C2C2EF$$^#--/1D1D1FH5**8U;;++KA **,k.D.D.FH: .."":.I&r   c                 (   t         j                  |z  dz  }t        j                  |      }t        j                  |      }dt        j                  |      z  }t        j                  |      }t	        d||z        }	t	        d||z        }
|||||	|
gS )zTransform an angle (in degrees) to the xx/yx/xy/yy coefs expected by
		cairo. Due to previously performed modifications to the data, the angle
		will be between 0 (excluded) and 90 (excluded).r>   r   )rE   rG   cossinmax)r   rh   widthheightradxxxyyxyyx0y0s              r   r   zToolRotate._get_rotation_matrix   s     	%##xx}"xx}"	DHHSM"xx}"
1frk"
1ebj"
b"b"b	!!r   )T)__name__
__module____qualname____gtype_name__r   r#   r)   r+   r4   r7   rS   r\   r_   rH   r   r   r   r   rf   r'   r   rU   rV   r   __classcell__)r   s   @r   r   r      so    
IF'
 >*
%;
+''
0''R"r   r   )rE   gi.repositoryr   abstract_transform_toolr   optionsbar_rotater   r    r   r   <module>r      s"   $   7 /N"# N"r   