
    cc 1                     R    d dl mZmZmZ ddlmZ ddlmZ ddlm	Z	  G d de      Z
y)	    )Gtk	GdkPixbufGLib   )AbstractCanvasTool)OptionsBarScale)!utilities_show_handles_on_contextc                        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d	Zd
 Zd Zi fdZd Zd ZddZd Zd Zd Zd ZddZd Zd Zd Zd Z xZS )	ToolScalec                 ^   t         |   dt        d      d|       d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d x| _        | _        d x| _        | _        | j!                  dd	       | j#                  d
d       | j!                  dd       y )NscaleScaleztool-scale-symbolicznot-allowedTFr   scale-proportionscornersscale-ratio-spinbtns
scale-unitpixels)super__init___cursor_name_preserve_ratio_ratio_is_inverted_reload_is_locked_spinbtns_disabled_x_y_x2_y2x_pressx_motiony_pressy_motionadd_tool_action_enumadd_tool_action_boolean)selfwindow	__class__s     4/usr/lib/python3/dist-packages/drawing/tool_scale.pyr   zToolScale.__init__   s    '7AgJ(=vF"$ $ "$ !$ !$$'$'$($(!%%$,!%%$,/;5u=L(3    c                 r    d| _         | j                  j                  j                  | j                   |        y )Nr   )pane_idr'   options_managertry_add_bottom_paner&   s    r)   try_build_panezToolScale.try_build_pane4   s'    $,++11$,,Er*   c                    t        |       }|j                  | _        |j                  | _        | j                  j                  d| j                         | j                  j                  d| j                         |j                  | _        |j                  | _
        | j                  j                  d| j                         | j                  j                  d| j                         |S )Nzvalue-changed)r   	width_btn
_width_btn
height_btn_height_btnconnecton_spinbtn_changedwidth_100_btn	_w100_btnheight_100_btn	_h100_btnon_spinbtn100_changed)r&   bars     r)   build_bottom_panezToolScale.build_bottom_pane8   s    #MM$/^^$///4+B+BC?D,C,CD$$$.%%$...$*D*DE..$*D*DE	*r*   c                     t        d      S )NzScaling options)r   r/   s    r)   get_options_labelzToolScale.get_options_labelI   s    	
	r*   c                    | j                          | j                  d      }|dk(  sL| j                  j                  d      }|j	                  t
        j                  j                  |dk(               | j                  d|dk(         | j                  rt        d      }d }n&t        d      }| j                  dz   t        d      z   }| j                         j                         rd }nt        d	      }|||g}t        t        d |            S )
Nr   r   r   alwayszScaling the selectionzScaling the canvasz - z&Don't forget to confirm the operation!z=Press <Shift> to quickly toggle the 'lock proportions' option)_update_to_wanted_unitget_option_valuer'   lookup_action	set_stater   Variantnew_booleanset_action_sensitivityapply_to_selectionr   label	get_imageget_mouse_is_pressedlistfilter)r&   ratio_optionactionlabel_actionlabel_confirmlabel_modifier_shift	full_lists          r)   get_editing_tipszToolScale.get_editing_tipsL   s   
  &&':;,		"KK%%&<=6	DLL,,\X-EFG4li6OP	+,<=()<::%FGH= 
^^**, G H ],@A)	fT9%	&&r*   c                    t         |           d| _        d| _        d x| _        | _        d x| _        | _        | j                  j                  d       | j                  j                  d       | j                         \  }}| j                          ||z  | _        d| _        | j                  j                  |       | j                   j                  |       | j#                          y )Nr   d   F)r   on_tool_selectedr   r   r    r!   r"   r#   r9   	set_valuer;   _get_original_sizeset_preserve_ratio_ratior   r3   r5   build_and_do_op)r&   argswidthheightr(   s       r)   rY   zToolScale.on_tool_selectedn   s    '$'$'!%%$,!%%$,..3..3))+-%$+!$//E"V$r*   c                     | j                   r| j                         }n| j                         }|j                         |j	                         fS N)rJ   get_selection_pixbufget_main_pixbuf	get_width
get_height)r&   original_pixbufs     r)   r[   zToolScale._get_original_size   sD    	..0?))+?		"	"	$o&@&@&B	BBr*   c                    | j                  d      dk(  }|rm| j                  j                  d       | j                  j                  d       | j                  j                  d       | j
                  j                  d       y | j                  j                  d       | j                  j                  d       | j                  j                  d       | j
                  j                  d       y )Nr   r   TF)rD   r3   set_visibler5   r9   r;   )r&   want_pixelss     r)   rC   z ToolScale._update_to_wanted_unit   s    %%l3x?+??t$%>>e$>>e$??u%&>>d#>>d#r*   c                    | j                   }|r| j                  d      | _         n>| j                  d      }|dk(  rt        | j                        dk7  | _         n
|dk(  | _         | j                  r| j                    | _         | j                   |k(  ry| j                   r'| j                         | j                         z  | _        yy)aZ  Set whether or not `self._preserve_ratio` should be true. If it is,
		AND that wasn't already the case before, this method sets the value of
		`self._ratio` too.
		The parameter is `True` if the request to set the ratio is triggered by
		a direct interaction with a spinbutton: the method will not look at the
		same options to decide what to do.r   r   r   r   rB   N)r   rD   len_directionsr   
_get_width_get_heightr]   )r&   for_spinbtnsformer_settingsettings       r)   r\   zToolScale.set_preserve_ratio   s     ''.//0FG4""#677t//0A5D"h.D	"2224	^+		"T%5%5%774; r*   c                     | j                   ry d| _         t        j                  d| j                  i        | j	                          y NTrX   )r   r   timeout_add_unlock_reload_async_try_scale_dimensionsr/   s    r)   _try_scale_dimensionszToolScale._try_scale_dimensions   s:    		$3++R0""$r*   c                 2    d| _         | j                          y NF)r   rx   )r&   content_paramss     r)   rw   zToolScale._unlock_reload   s     $""$r*   c                    d| _         | j                  r| j                         j                  }|j	                         }|j                         }| j                         }| j                         }||k7  r*|| j                  z  }| j                  j                  |       ||k7  r*|| j                  z  }| j                  j                  |       | j                         \  }}d| j                         |z  z  }	d| j                         |z  z  }
| j                  j                  |	       | j                  j                  |
       d| _         | j                          y)zWhen the value in a spinbutton changes, adjust the values in the
		spinbuttons if necessary, and build-and-do the corresponding tool
		operation.TrX   FN)r   r   rL   temp_pixbufrf   rg   ro   rp   r]   r5   rZ   r3   r[   r9   r;   r^   )r&   	data_dictr~   existing_widthexisting_height	new_width
new_heightoriginal_widthoriginal_heightnew_w100new_h100s              r)   rx   z%ToolScale._async_try_scale_dimensions   s*    !$	!--;))+> ++-? 9  ":	!T[[(Jz*#T[[(IOOi( &*%<%<%>".?DOO%67(D$$&89(..8$..8$!$r*   c                 x    | j                   ry | j                  | j                  d       | j                          y )NT)r   r    r\   ry   )r&   r_   s     r)   r7   zToolScale.on_spinbtn_changed   s4    			\\ 4 r*   c                 Z   | j                   ry | j                  d       | j                         \  }}|| j                  j	                         dz  z  }|| j
                  j	                         dz  z  }| j                         |z
  }| j                         |z
  }| j                  ||||       y ru   )	r   r\   r[   r9   	get_valuer;   ro   rp   _apply_deltas_to_spinbtns)r&   r_   r   r   r   r   delta_xdelta_ys           r)   r<   zToolScale.on_spinbtn100_changed   s    		 $$($;$;$=!./ 8 8 :S @A)$..":":"<s"BC*OO	)'+'  JIr*   c                 &   | j                   rOt        |      t        |      kD  r| j                  j                  |       y | j                  j                  |       y | j                  j                  |       | j                  j                  |       y rc   )r   absr5   rZ   r3   )r&   r   r   dxdys        r)   r   z#ToolScale._apply_deltas_to_spinbtns   sg    		"gBz*OOi(j)??Y'r*   c                 6    | j                   j                         S rc   )r3   get_value_as_intr/   s    r)   ro   zToolScale._get_width  s    		)	)	++r*   c                 6    | j                   j                         S rc   )r5   r   r/   s    r)   rp   zToolScale._get_height  s    				*	*	,,r*   c                 P    | j                  |j                  |j                         y rc   )set_directional_cursorxy)r&   eventsurfaces      r)   on_unclicked_motion_on_areaz%ToolScale.on_unclicked_motion_on_area	  s    egguww/r*   c                 D   | j                  |j                         d| j                  v rd| _        |x| _        | _        |x| _        | _        | j                  | j                         z   | _
        | j                  | j                         z   | _        | j                          y )NSHIFTT)update_modifier_statestate_modifier_keysr   r    r!   r"   r#   r   ro   r   r   rp   r   r\   r&   r   r   event_xevent_ys        r)   on_press_on_areazToolScale.on_press_on_area  s    U[[)###!4!(($,!(($,WWt(($(WWt''))$(r*   c                    | j                   dk(  ry || j                  z
  }|| j                  z
  }|| _        || _        | j                         }| j	                         }	d| j                   v r||z  }| j
                  |z   | _        d| j                   v r||z  }d| j                   v r|	|z  }	| j                  |z   | _        d| j                   v r|	|z  }	| j                  rP| j                  rDd| j                   v r| j                  |	z
  | _        d| j                   v r| j                  |z
  | _        | j                  |	|||       y )N nswe)rn   r!   r#   rp   ro   r   r   rJ   r   r   r   r   )
r&   r   r   r   r   renderr   r   ra   r`   s
             r)   on_motion_on_areazToolScale.on_motion_on_area  s8   		dmm#'dmm#'$-$-&
//
%D	W6WWw47D	W6DG5WWw47DG5	!5!5	ThhDG	ThhDG  Ar*   c                     | j                  ||||       d| _        | j                          | j                  || j                  z
  || j
                  z
         d x| _        | _        d x| _        | _        y r{   )r   r   r^   _scroll_to_endr    r"   r!   r#   r   s        r)   on_release_on_areazToolScale.on_release_on_area5  sj    ':!$g,g.DE "&%$,!%%$,r*   c                    | j                   r+t        | j                        }t        | j                        }nd}d}|| j	                         z   }|| j                         z   }| j                         j                  ||||| j                   d      \  }}}}| j                  |||       | j                         }t        ||||||       y )Nr   F)rJ   intr   r   ro   rp   rL   get_corrected_coords_draw_temp_pixbufget_overlay_thicknessr	   )r&   areacairo_contextx1y1x2y2	thicknesss           r)   on_draw_abovezToolScale.on_draw_aboveA  s    	DGG2DGG2	2	2	DOO"	D">>#88RR+/+B+BEK."b"bB/((*)#M2r2r9Mr*   c                     | j                   | j                  dt        | j                        t        | j                        | j                         | j                         d}|S )NT)tool_idis_selection
is_previewlocal_dxlocal_dyr`   ra   )idrJ   r   r   r   ro   rp   )r&   	operations     r)   build_operationzToolScale.build_operationR  sP    gg**477|477|OO) 
r*   c                 0   | j                  |       |d   r| j                         }n| j                         }| j                         j	                  |j                  |d   |d   t        j                  j                               | j                  |       y )Nr   r`   ra   )
start_tool_operationrd   re   rL   set_temp_pixbufscale_simpler   
InterpTypeTILEScommon_end_operation)r&   r   source_pixbufs      r)   do_tool_operationzToolScale.do_tool_operation^  s    I&~,,.='')=..""=#=#=#,W#5#,X#6#,#7#7#=#=$? @ I&r*   )F)r   r   )T)__name__
__module____qualname____gtype_name__r   r0   r>   r@   rV   rY   r[   rC   r\   ry   rw   rx   r7   r<   r   ro   rp   r   r   r   r   r   r   r   __classcell__)r(   s   @r)   r   r      s    44F" 'D"C$84%% 24 !LJ(,-
0
B:&N"

'r*   r   N)gi.repositoryr   r   r   abstract_transform_toolr   optionsbar_scaler   utilities_overlayr	   r    r*   r)   <module>r      s%   $ / . 7 - @Q'" Q'r*   