
    ccB6                     B    d dl Z d dlZddlmZ ddlmZ  G d de      Zy)    N   )AbstractClassicTool)utilities_smooth_pathc                        e 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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 Zd Zd Z xZS )	ToolShapec                    t         |   dt        d      d|       d| _        | j	                          | j                  d| j                         | j                  dd       | j                  dd       | j                          | j                  d	d
      | _
        d| _        t        d      | _        | j                  d| j                         y )NshapeShapeztool-freeshape-symbolicTshape_closeF
shape_typezlast-active-shapeshape_fillingzlast-shape-fillingsolidSolid outlineshape_outline)super__init___use_operator_reset_temp_pointsadd_tool_action_simple_force_close_shapeset_action_sensitivityload_tool_action_enum_set_active_shape_filling_id_outline_id_outline_labeladd_tool_action_enum)selfwindowkwargs	__class__s      4/usr/lib/python3/dist-packages/drawing/tool_shape.pyr   zToolShape.__init__   s    '7AgJ(A6J$mT-D-DEmU3\+>?//5IK$ $/*$OT-=-=>    c                 J    d | _         d | _        d | _        d | _        d | _        y N)_pathx_pressy_press	initial_x	initial_yr   s    r#   r   zToolShape._reset_temp_points,   s%    $*$,$,$.$.r$   c                    |dk7  ry | j                   dv ry t        | j                  |z
        }t        | j                  |z
        }| j                   dk(  r6t	        t        j                  ||z  ||z  z         d      }t        d      |z  S t        d      t        |      z  }t        d      t        |      z  }|dz   |z   S )	Nr   )polygon	freeshpaecircle   zRadius: %spxzWidth: %spxzHeight: %spx
)		_shape_idabsr(   r)   roundmathsqrtr   str)	r   event_xevent_ymotion_behaviordelta_xdelta_ylengthline1line2s	            r#   get_tooltipzToolShape.get_tooltip3   s    
	^^//
w&''w&''	^^x$))Gg-'0AABAF6
N
f
$$
M
S\
)%
N
c'l
*%		r$   c                 0    | j                  d      | _        y )Nr   )get_option_valuer   r,   s    r#   _set_filling_stylezToolShape._set_filling_styleF       **?;$r$   c                 0    | j                  d      | _        y )Nr   )rC   r   r,   s    r#   _set_outline_stylezToolShape._set_outline_styleI   rE   r$   c                     | j                  d      | _        | j                  dk(  s| j                  dk(  r t        j                  j                  | _        y t        j                  j                  | _        y )Nr   	rectangler.   )rC   r3   cairoLineJoinMITER_join_idROUNDr   argss     r#   r   zToolShape._set_active_shapeL   sO    ((6$.	^^{"dnn	&A>>''4= >>''4=r$   c                     t        d      S )NzShape options)r   r,   s    r#   get_options_labelzToolShape.get_options_labelT   s    	
?	r$   c           
      r   | j                          t        d      t        d      t        d      t        d      t        d      t        d      d| j                     }|}| j                          | j	                          | j
                  dk7  r4|d	t        d
      t        d      t        d      d| j
                     z   z  }| j                  dk7  rR|d	t        d      t        d      t        d      t        d      t        d      t        d      d| j                     z   z  }| j                  dk(  s| j                  dk(  r| j                  |d	z   t        d      z   }nd }| j                  dd       | j                         j                         rd }nt        d      }|||g}t        t        d |            S )N	RectanglezRounded rectangleOvalCirclePolygonz
Free shape)rI   roundedrectovalr0   r.   	freeshaper   z - r   zDashed outlinez
No outline)r   dashednoneemptyzEmpty shapezFilled with main colorzFilled with secondary colorzHorizontal gradientzVertical gradientzRadial gradient)r]   filled	secondary
h-gradient
v-gradient
r-gradientr.   rZ   z-Click on the shape's first point to close it.r   FzEPress <Alt>, <Shift>, or both, to quickly change the 'filling' option)r   r   r3   rD   rG   r   r   r'   r   	get_imageget_mouse_is_pressedlistfilter)r   
shape_namelabel_optionslabel_instructionlabel_modifiers	full_lists         r#   get_editing_tipszToolShape.get_editing_tipsW   s   +'(V9x[	l, 	NN* -	 E !lO 
	  =
 
 E}()01)*'(%&	 
	 	 	= nn	!T^^{%B37::3I!E)FGH }e4	^^**,? G H? /A)	fT9%	&&r$   c                 D    | j                          | j                          y r&   )restore_pixbufr   )r   preserve_selections     r#   give_back_controlzToolShape.give_back_control   s    r$   c                 r   |j                   | _        | j                  | j                  ||       | j                  |j                         d| j
                  v rd| j
                  v rd| _        y d| j
                  v rd| _        | j                  dk(  rd| _        y y d| j
                  v rd| _        d| _        y y )NSHIFTALTr_   r]   r\   r   r^   )buttonlast_mouse_btnset_common_valuesupdate_modifier_statestate_modifier_keysr   r   )r   eventsurfacer9   r:   s        r#   on_press_on_areazToolShape.on_press_on_area   s    $,,gw?U[[)###1D1D(D!4$%%%4
& D !###44 $r$   c                    | j                   dk(  r| j                  ||d      }n| j                   dk(  r| j                  ||d      }n| j                   dk(  r| j                  ||       ne| j                   dk(  r| j                  ||       nC| j                   dk(  r| j	                  ||       n!| j                   dk(  r| j                  ||       | j                  | j                        }|r| j                  |       y y )	NrZ   Tr.   FrI   rX   rY   r0   )	r3   
_add_point_draw_rectangle_draw_roundedrect_draw_ellipse_draw_circlebuild_operationr'   do_tool_operation)r   rz   r{   r9   r:   render	operations          r#   on_motion_on_areazToolShape.on_motion_on_area   s    	^^{"w69~~"w79
nn#'*-'7G,& w(("gw'##DJJ/9)$ r$   c                    | j                   dk(  s| j                   dk(  rr| j                  ||d      }| j                  d|d           |d   r"| j                  |       | j	                          y | j                  |       | j                          y | j                   dk(  r| j                  ||       ne| j                   dk(  r| j                  ||       nC| j                   dk(  r| j                  ||       n!| j                   d	k(  r| j                  ||       | j                  | j                        }| j                  |       | j	                          y )
NrZ   r.   Tr   closedrI   rX   rY   r0   )r3   r~   r   apply_operationr   r   non_destructive_show_modifr   r   r   r   r   r'   )r   rz   r{   r9   r:   r   s         r#   on_release_on_areazToolShape.on_release_on_area   s   	^^{"dnn	&Aw69})H2E.EF#9%##%
nn#'*-'7G,& w(("gw'##DJJ/9	"r$   c                     | j                  | j                  | j                  | j                         | j	                  d d | j
                  | j                         y r&   )rv   ru   r(   r)   r   r*   r+   rO   s     r#   r   zToolShape._force_close_shape   s>    ,,dllDLLI$dnndnnEr$   c                    | j                         }| j                  _| j                  | j                  c| _        | _        |j                  | j                  | j                         |j                         | _        n|j                  | j                         | j                  ||      }|s|j                  ||       |r|j                         | _        | j                  |j                               }||d<   |S )z<Add a point to a shape (used by both freeshape and polygon).r   )get_contextr*   r(   r)   r+   move_to	copy_pathr'   append_path_should_close_shapeline_tor   )r   r9   r:   memorizecairo_contextshould_closer   s          r#   r~   zToolShape._add_point   s    ""$-	^^'+||T\\#DNDNt||4'')4:TZZ())'7;,	'*'')4:""=#:#:#<=)$)H	r$   c                 ,   | j                   | j                  yt        || j                         t        || j                         z
  }t        || j                        t        || j                        z
  }t        d| j                        }||k  xr ||k  S )NFr1   )r*   r+   maxmin
tool_width)r   r9   r:   r<   r=   closing_limits         r#   r   zToolShape._should_close_shape   s}    	^^t~~5
(3w+GG'(3w+GG'a)-
M
!
=g&=>r$   c                 N   | j                         }|j                  | j                  | j                         |j	                  | j                  |       |j	                  ||       |j	                  || j                         |j                          |j                         | _        y r&   )r   r   r(   r)   r   
close_pathr   r'   )r   r9   r:   r   s       r#   r   zToolShape._draw_rectangle   s|    ""$-dll3g.).&&($*r$   c                 v   | j                         }t        | j                  |      }t        | j                  |      }t        | j                  |      }t        | j                  |      }t        ||z
  ||z
        dz  }t
        j                  dz  }	|j                  ||z   ||z   |d|	z  d|	z         |j                  ||z
  ||z   |d|	z  d|	z         |j                  ||z
  ||z
  |d|	z  d|	z         |j                  ||z   ||z
  |d|	z  d|	z         |j                          |j                         | _
        y )N   r1         r   r   )r   r   r(   r   r)   r6   piarcr   r   r'   )
r   r9   r:   r   abcdradiuspi2s
             r#   r   zToolShape._draw_roundedrect   s*   ""$-	$,, !	$,, !	$,, !	$,, !q1ua!eq &!#AJF
FAGQWEAJF
FAGQWEAJF
FAGQWEAJF
FAGQWE&&($*r$   c                    | j                         }|j                         }t        | j                  |z
  dz        }t        | j                  |z
  dz        }|dk(  rd}|dk(  rd}|j                  ||z   ||z          |j                  ||       |j                  dddddt        j                  z         |j                  |       |j                          |j                         | _        y )Nr1   r   r   )r   
get_matrixintr(   r)   	translatescaler   r6   r   
set_matrixr   r   r'   )r   r9   r:   r   saved_matrixhalfwhalfhs          r#   r   zToolShape._draw_ellipse  s    ""$-))+,
t||g%*
+%
t||g%*
+%
aZ5
aZ5'E/7U?;eU#Aq!QDGG,<(&&($*r$   c                 n   | j                         }| j                  |z
  | j                  |z
  z  }| j                  |z
  | j                  |z
  z  }t        j                  ||z         }|j                  | j                  | j                  |ddt        j                  z         |j                         | _        y )N        r1   )	r   r(   r)   r6   r7   r   r   r   r'   )r   r9   r:   r   delta_x2delta_y2rayons          r#   r   zToolShape._draw_circle  s    ""$-llW$)?@(llW$)?@(
))Hx'
(%DLL$,,sAKH&&($*r$   c                 8   | j                         j                         }| j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  dk(  xr | d|d}|S )NrZ   T)tool_id	rgba_main	rgba_secd	antialiasoperator	line_join
line_widthfillingoutlinesmoothr   path)rc   is_zoomed_surface_sharpid
main_colorsecondary_color_use_antialias	_operatorrM   r   r   r   r3   )r   
cairo_pathpixelart_moder   s       r#   r   zToolShape.build_operation   s    .."::<-gg$$##~~nn+B]1B) 
r$   c                 6    t        j                  |d|d      }|S Nr   rJ   LinearGradient)r   xminxmaxpatterns       r#   get_pattern_hzToolShape.get_pattern_h2  s      sD#6'	.r$   c                 6    t        j                  d|d|      }|S r   r   )r   yminymaxr   s       r#   get_pattern_vzToolShape.get_pattern_v6  s      dC6'	.r$   c           	      F    t        j                  ||d|z  ||d|z        }|S )N皙??)rJ   RadialGradient)r   center_xcenter_yradr   s        r#   get_pattern_rzToolShape.get_pattern_r:  s/      8S3Y!)8S3Y@' 
.r$   c                      |j                   dg|   |j                   dg|  |j                  |       |j                          y)zFill the shape defined in the context with a gradient from c1 to c2
		according to the given pattern. The colors are normalized arrays.r   r   N)add_color_stop_rgba
set_sourcefill_preserve)r   r   r   c1c2s        r#   _fill_patternzToolShape._fill_pattern@  sH     'c'B''c'B'7#r$   c                 B     |j                   |  |j                          y)z7Fill the shape defined in the context with the color c.N)set_source_rgbar   )r   r   colors      r#   _fill_plainzToolShape._fill_plainH  s    -'r$   c                 p   | j                  |      }|d   }|j                  |       |j                  |d          |d   rt        ||d          n|j	                  |d          |d   r|j                          |j                  |d          |d   }|d   }|d	   }|d
k(  r| j                  ||       n*|dk(  r| j                  ||       n|dk(  r<|j                         \  }}}	}
| j                  ||	      }| j                  ||||       n|dk(  r<|j                         \  }}}	}
| j                  ||
      }| j                  ||||       n|dk(  r|j                         \  }}}	}
t        ||	z
        dz  }t        ||
z
        dz  }t        ||	      |z   }t        ||
      |z   }t        ||      }| j                  |||      }| j                  ||||       n	 |d   } |j                   |  |dk(  r|j#                  d|z  d|z  g       |dk7  r|j%                          |j'                          y )Nr   r   r   r   r   r   r   r   r   r_   r^   r`   ra   rb   r1   r   r[   r\   )start_tool_operationset_line_widthset_line_joinr   r   r   set_operatorr   path_extentsr   r   r   r4   r   r   r   r   set_dashstrokenew_path)r   r   r   r   
color_main
color_secdr   x1y1x2y2r   ddxddyr   r   r   r   s                     r#   r   zToolShape.do_tool_operationM  s[   ++I6-&*z*i45x	&(9:Yv./xYz23%*%*i 'M:.(M:.,!..0>2r2rB'7mWj*E,!..0>2r2rB'7mWj*E,!..0>2r2r	R"W	3	R"W	3"bkC8"bkC8	S#3(C87mWj*Ei '-,1z>1z>:; r$   )T)__name__
__module____qualname____gtype_name__r   r   rA   rD   rG   r   rR   rl   rp   r|   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r"   s   @r#   r   r      s    ?&&<<(/'b%$2F*?)))&)$  
3r$   r   )rJ   r6   abstract_classic_toolr   utilities_pathsr   r    r$   r#   <module>r     s   $  6 2j# jr$   