
    ccX-                     ^    d dl mZmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZ  G d de      Zy	)
    )Gdk	GdkPixbuf   )AbstractCanvasTool)OptionsBarCrop)!utilities_show_handles_on_context)utilities_rgba_to_hexadecimal!utilities_gdk_rgba_to_color_arrayc                        e Zd Zd Z fdZd Zd Zd Zd Z f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ddZd Zd Zd Zd Zd Zd Z xZS )ToolCropc                     t         |   dt        d      d|       d| _        dx| _        | _        dx| _        | _        d| _        | j                  dd       y )	NcropCropztool-crop-symbolicznot-allowedr   Tcrop-expandinitial)
super__init___cursor_namex_pressx_motiony_pressy_motion
_unclickedadd_tool_action_enum)selfwindow	__class__s     3/usr/lib/python3/dist-packages/drawing/tool_crop.pyr   zToolCrop.__init__   sV    '61V9&:FC"$!""$,!""$,$/M95    c                 r    d| _         | j                  j                  j                  | j                   |        y )Nr   )pane_idr   options_managertry_add_bottom_paner   s    r   try_build_panezToolCrop.try_build_pane$   s'    $,++11$,,Er    c                     t               }|j                  | _        |j                  | _        | j                  j                  d| j                         | j                  j                  d| j
                         |S )Nzvalue-changed)r   
height_btn	width_btnconnecton_width_changedon_height_changed)r   bars     r   build_bottom_panezToolCrop.build_bottom_pane(   sY    #NN$/==$...$*?*?@///4+A+AB	*r    c                     t        d      S )NzExpanding options)r   r%   s    r   get_options_labelzToolCrop.get_options_label0   s     
	r    c                 $   t        d      }d }| j                  rt        d      }d }nOt        d      }| j                  dz   t        d      z   }| j                         j	                         st        d      }||||g}t        t        d |            S )Nz5The sides you'll crop are hinted by the mouse pointerzCropping the selectionz Cropping or expanding the canvasz - z&Don't forget to confirm the operation!zIPress <Alt>, <Shift>, or both, to quickly change the 'expand with' option)r   apply_to_selectionlabel	get_imageget_mouse_is_pressedlistfilter)r   label_directionlabel_modifierslabel_actionlabel_confirm	full_lists         r   get_editing_tipszToolCrop.get_editing_tips5   s    MN//	,-<=67<::%FGH=
..

/
/
1 D EO _m_M)	fT9%	&&r    c                    t         |           d| _        d| _        | j                  r| j                          n| j                          | j                          | j                  j                  | j                         | j                  j                  | j                         | j                  d| j                          | j                          y )Nr   r   )r   on_tool_selected_x_yr2   _init_if_selection_init_if_main_update_expansion_rgbar)   	set_value_original_widthr(   _original_heightset_action_sensitivitybuild_and_do_op)r   argsr   s     r   r?   zToolCrop.on_tool_selectedI   s    '$'$'	..4//0//D112m1H1H-HIr    c                 (   | j                         j                         | _        | j                         j                         | _        | j
                  j                  d| j                         | j                  j                  d| j                         y )Nr   )get_selection_pixbuf	get_widthrF   
get_heightrG   r)   	set_ranger(   r%   s    r   rB   zToolCrop._init_if_selectionW   sj    224>>@$335@@B$..1d223//At445r    c                 4   | j                         j                         | _        | j                         j                         | _        | j
                  j                  dd| j                  z         | j                  j                  dd| j                  z         y )Nr   
   )r4   get_pixbuf_widthrF   get_pixbuf_heightrG   r)   rO   r(   r%   s    r   rC   zToolCrop._init_if_main]   sp    )::<$..*<<>$..1b4#7#778//ArD$9$99:r    c                 6    | j                   j                         S N)r)   get_value_as_intr%   s    r   
_get_widthzToolCrop._get_widthe   s    		(	(	**r    c                 6    | j                   j                         S rU   )r(   rV   r%   s    r   _get_heightzToolCrop._get_heighth   s    		)	)	++r    c                 >    | j                   r| j                          y y rU   r   rI   r   rJ   s     r   r+   zToolCrop.on_width_changedk       	__ r    c                 >    | j                   r| j                          y y rU   r[   r\   s     r   r,   zToolCrop.on_height_changedo   r]   r    c                     | j                   j                  | j                   j                         |z
         | j                  |z   | _        y rU   )r(   rE   	get_valuerA   r   deltas     r   
move_northzToolCrop.move_norths   s5    //DOO557%?@GGeO$'r    c                 p    | j                   j                  | j                   j                         |z          y rU   )r(   rE   r`   ra   s     r   
move_southzToolCrop.move_southw   s&    //DOO557%?@r    c                 p    | j                   j                  | j                   j                         |z          y rU   )r)   rE   r`   ra   s     r   	move_eastzToolCrop.move_eastz   s&    ..4>>335=>r    c                     | j                   j                  | j                   j                         |z
         | j                  |z   | _        y rU   )r)   rE   r`   r@   ra   s     r   	move_westzToolCrop.move_west}   s5    ..4>>335=>GGeO$'r    c                 P    | j                  |j                  |j                         y rU   )set_directional_cursorxy)r   eventsurfaces      r   on_unclicked_motion_on_areaz$ToolCrop.on_unclicked_motion_on_area   s    egguww/r    c                    |x| _         | _        |x| _        | _        d| _        | j                  |j                         | j                  |j                         d| j                  v r+d| j                  v r| j                  d|j                         y d| j                  v r| j                  d       y d| j                  v r| j                  d       y y )NFSHIFTALT	secondaryalphar   )r   r   r   r   r   rD   buttonupdate_modifier_statestate_modifier_keys_force_expansion_rgbar   rn   ro   event_xevent_ys        r   on_press_on_areazToolCrop.on_press_on_area   s    !(($,!(($,$/ell+U[[)###1D1D(Dk5<<8$%%%g&###i( $r    c                 h   || j                   z
  }|| j                  z
  }| j                  dk(  ry d| j                  v r| j                  |       d| j                  v r| j	                  |       d| j                  v r| j                  |       d| j                  v r| j                  |       | j                  rt        d| j                        | _	        t        d| j                        | _
        t        | j                  | j                  z
  | j                               }t        | j                  | j                  z
  | j                               }	| j                   j#                  |       | j$                  j#                  |	       || _         || _        |r| j                  s| j'                          y y y )N nswer   )r   r   _directionsrc   re   ri   rg   r2   maxr@   rA   minrF   rW   rG   rY   r)   rE   r(   rI   )
r   rn   ro   r|   r}   renderdelta_xdelta_ywidthheights
             r   on_motion_on_areazToolCrop.on_motion_on_area   sX   dmm#'dmm#'		D??7D??7D>>'D>>'	DGG_47DGG_47t##dgg-t/@A5%%/1A1A1CD6>>E"??V$$-$-D++ ,Vr    c                     d| _         | j                          | j                  || j                  z
  || j                  z
         | j
                  j                  d       y )NTF)r   rI   _scroll_to_endr   r   r   
set_cursorr{   s        r   on_release_on_areazToolCrop.on_release_on_area   sI    $/g,g.DE++r    c                    | j                   r+t        | j                        }t        | j                        }nd}d}|| j	                         z   }|| j                         z   }| j                         j                  ||||| j                   d      \  }}}}| j                   s| j                  |||       | j                         }t        ||||||       y )Nr   F)r2   intr@   rA   rW   rY   r4   get_corrected_coords_draw_temp_pixbufget_overlay_thicknessr   )r   areacairo_contextx1y1x2y2	thicknesss           r   on_draw_abovezToolCrop.on_draw_above   s    	DGG2DGG2	2	2	DOO"	D">>#88RR+/+B+BEK."b"b		 	 -R0((*)#M2r2r9Mr    c           
      ~   | j                          | j                         }t        d|j                        }t        d|j                        }t        d|j                        |j                  j                         z   }t        d|z  | j                         j                         z   |      }t        d|j                        |j                  j                         z   }t        d|z  | j                         j                         z   |      }| j                  dddt        |      t        |      ||| j                  d	}|S )zSpecial way to build an operation, not from the present crop tool,
		but from the selection menu. The parameters are determined automatically
		from the state of the selection manager.r   FT	tool_idis_selection
is_previewis_etflocal_dxlocal_dyr   r   rgba)rD   get_selectionr   selection_xselection_yr   selection_pixbufrM   get_main_pixbufrN   idr   _expansion_rgba)	r   r   new_xnew_ys_width	new_widths_height
new_height	operations	            r   build_selection_fit_operationz&ToolCrop.build_selection_fit_operation   s    
!
a
%
a
%1==!A$6$6$@$@$BB'"u*t335??AA7K)AMM"Q%7%7%B%B%DD(2: 4 4 6 A A CCXN* gg5z5z
) 
r    c           
          | j                   | j                  ddt        | j                        t        | j                        | j                         | j                         | j                  d	}|S )NTFr   )r   r2   r   r@   rA   rW   rY   r   )r   r   s     r   build_operationzToolCrop.build_operation   s\    gg**477|477|OO
) 
r    c                    | j                  |       |d   }|d   }|d   }|d   }t        |d         }|dxx   dz  cc<   t        | }|d   }|r| j                         }	n| j	                         }	| j                         j                  |	j                                | j                  ||||||       |d	   r7| j                         }
| j                         j                  |
d
|z  d
|z         | j                  |       y )Nr   r   r   r   r         r   r   r   )start_tool_operationr
   r	   rL   r   r4   set_temp_pixbufcopy_crop_temp_pixbufr   update_from_transform_toolcommon_end_operation)r   r   rl   rm   r   r   
rgba_array	hexa_rgbar   source_pixbufs_pixbufs              r   do_tool_operationzToolCrop.do_tool_operation   s   I&
!
!
G
%X&061BC*Q-3-+Z8)>*,,,.='')=..""=#5#5#78AuflIFx'')8228R!VR!VLI&r    c           	      6   t        |d      }t        |d      }|rd}	d}
nt        d|z  d      }	t        d|z  d      }
t        j                  j                  t        j                  j
                  dd||      }|j                  |       | j                         j                  }t        ||	z
  |j                         |z
        }t        ||
z
  |j                         |z
        }|j                  ||||||	|
       | j                         j                  |       y)zACrop and/or expand the temp pixbuf according to given parameters.r   r   T   N)r   r   Pixbufnew
ColorspaceRGBfillr4   temp_pixbufr   rM   rN   	copy_arear   )r   rl   rm   r   r   r   r   src_xsrc_ydest_xdest_y
new_pixbuftemp_pmin_wmin_hs                  r   r   zToolCrop._crop_temp_pixbuf  s    a)%
a)% 66QN6QN6: ##I$8$8$<$<dA<A6K*//)>>''& efnf..058
9%
fvov002U:
;%
 	5%z66J.."":.r    )T)__name__
__module____qualname____gtype_name__r   r&   r.   r0   r=   r?   rB   rC   rW   rY   r+   r,   rc   re   rg   ri   rp   r~   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s    6F 
'(6;+,A?0): N$8'08/r    r   N)gi.repositoryr   r   abstract_transform_toolr   optionsbar_cropr   utilities_overlayr   utilities_colorsr	   r
   r    r    r   <module>r      s(   $ ) 7 + @@l/! l/r    