
    cc                     l    d dl Z d dlZd dlmZmZ ddlmZ d Zd Zd Z	g dZ
d	Zd
 Zd Zd Zd Zd Zy)    N)Gdk	GdkPixbuf   )DrMessageDialogc                     |dk  s+|| j                         kD  s|dk  s|| j                         kD  ry t        j                  | t	        |      t	        |      dd      }|j                         }|S )Nr   r   )	get_width
get_heightr   pixbuf_get_from_surfacefloat
get_pixels)surfacexy
screenshot	rgba_valss        9/usr/lib/python3/dist-packages/drawing/utilities_paths.pyutilities_get_rgba_for_xyr   	   sf    EQ""$$AW5G5G5I1I	))'58U1Xq!L""$    c           	         t        j                  |       }t        | ||      }t        | ||      |k(  r |dkD  r|dz
  }t        | ||      |k(  r|dkD  r|dz   }|j                  ||       ||}}d}	d}
d}d|z  d|||dd|z  d|z  g}d|z  d|z  d|z  d|||dg}|
sE|dk  r?d}d}d}d}|r|dk  r|||	   z   }|||	   z   }t        | ||      |k(  r@|dkD  r;|dkD  r6|| j	                         k  r#|| j                         d	z
  k  r|}|}|	dz   dz  }	n||k7  s||k7  r|||	   z   }|||	   z   }d
}|dz   }|s|dk  r|	dz   dz  }	|dk7  r|j                  ||       |dkD  r*|dz
  |cxk  r|dz   k  rn n|dz
  |cxk  r|dz   k  rn nd
}
|dz   }|dk(  rEt        |      \  }}|j                         }||k(  r|j                          n|j                          y|
s|dk  r?|j                          |j                         S )zThis method tries to build a path defining an area of the same color. It
	will mainly be used to paint this area, or to select it.r   r      FiP  i      T   
   i  N)cairoContextr   move_tor   r	   line_tolaunch_infinite_loop_dialogrundestroy
close_path	copy_path)r   r   r   windowcoefcairo_context	old_colorfirst_xfirst_y	directionshould_stopix_shifty_shiftnew_xnew_y
end_circlejfuture_xfuture_ydialogcontinue_idresults                          r   utilities_get_magic_pathr9      s    w'&w15 	"'1a0I=1q5!e! 	"'1a0I=1q5Uq!!7' Iq$dArDy"t)DIrDy"t)QdD!DAI
%
%*!QU	""8	""8 (H=J18a<7$$&&7%%'))EE1!I	
eqEzgi  Agi  AJ 	s1! QU$ {a)slA
 "f719q,719,719q3L7193L;!e!$Y4V<6;JJL6
NN
NN
U AIX !!r   c                 *   t        |       }|j                  t        d      d       }|j                  t        d      d d      }|j                  t        d             |j                  t        d             |j                  t        d             ||fS )NCancelContinueTz4The area seems poorly delimited, or is very complex.z9This algorithm may not be able to manage the wanted area.zADo you want to abort the operation, or to let the tool struggle ?)r   
set_action_
add_string)r%   r6   	cancel_idr7   s       r   r    r    \   s    
&
!q{D1  :d;1KLM1PQR1XYZr   ))        rA   )`"g      ?)rB   g         c                 R   ||k(  r||k(  rd}nt        j                  ||z
  ||z
        }t        j                  |      t        j                  |      }}t	        |dz  t
              }	g }
t        D ]R  \  }}||	z  ||	z  f}|d   |z  |d   |z  z
  |d   |z  |d   |z  z   f}|d   |z   |d   |z   f}|
j                  |       T t        | |
d       | j                         dkD  r4t        | |
d       t        | |
d       t        | |
d       t        | |
d       | j                          y)z+Adds a triangular head to the current path.r   g?r   TFN)mathatan2sincosmaxMIN_ARROW_SCALEARROW_TRIANGLEappend
_draw_headget_dash_countr#   )r'   x2y2x1y1
line_width
line_anglerG   rH   scaleheadr   r   ps                 r   utilities_add_arrow_trianglerX   q   s>   "Hr*zz"r'27+*HHZ $((:"6c 
Z#	/ 	 TQ5y!e)!tczAaD3J!s
QqTCZ 78!tby!A$)!++a.	 M4&   "Q&]D%(]D%(]D%(]D%( r   c                     |r | j                   |d     n | j                  |d      | j                  |d      | j                  |d     y )Nr   r   r   )r   r   )r'   rV   	first_trys      r   rM   rM      sU    -a!-a!Q Q r   c                     dx}}dx}}dx}}dx}}	|D ]3  }
|
d   dk(  rt        | ||||||	|
d   d   |
d   d   	      \  }}}}}}}}	5 t        | ||||||	dd	       y)zExtrapolate a path made of straight lines into a path made of curves. New
	points are added according to the length of the line it replaces, the length
	of the previous one, and the length of the next one.Nr    r   )	_next_arc)r'   
cairo_pathrQ   rR   rO   rP   x3y3x4y4ptss              r   utilities_smooth_pathrd      s     bbbb KSVr\#,]RRSVAYAq	$K "b"b"b"bK
 ="b"b"b$=r   c                     d}|| z
  }||z
  }t        j                  ||      }|t        j                  |      |z  |z  z   }	|t        j                  |      |z  |z  z   }
|	|
fS )Ng?)rE   rF   rH   rG   )rQ   rR   rO   rP   distr&   dxdyanglenxnys              r   _next_pointrl      sj    2g2g	B	488E?T!D((488E?T!D((
Br   c	                    ||
||||||||fS t        j                  ||z
  ||z
  z  ||z
  ||z
  z  z         }	|0|.| j                  ||       | j                  ||       ||||||||fS |||}}
t	        |||||	      \  }}n=|t	        |||||	      \  }
}||}}n$t	        |||||	      \  }
}t	        |||||	      \  }}| j                  |
|||||       ||||||||fS )N)rE   sqrtr   r   rl   curve_to)r'   rQ   rR   rO   rP   r_   r`   ra   rb   rf   nx1ny1nx2ny2s                 r   r]   r]      s2   J"*	RRRR	''		BGR(BGR+@@BJ2:BB	RRRR	''js#RR.(#sjRR.(#ss#RR.(#sRR.(#sS#sB3
BBBB&&r   )r   rE   gi.repositoryr   r   message_dialogr   r   r9   r    rK   rJ   rX   rM   rd   rl   r]   r\   r   r   <module>rv      sI     ( +I"V &R!> 'r   