
    cc$                     f    d dl Z d dlZd dlmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZ  G d de      Zy)	    N)Gdk	GdkPixbuf   )
ToolPencil)AbstractClassicTool)utilities_blur_surfaceBlurTypeBlurDirectionc                   p     e Zd Zd Z fdZd Zd Zd Z fdZddZ	d Z
d Zd	 Zd
 Zd Zd Zd Z xZS )
ToolEraserc                    t         |   |       t        j                  | dt        d      d|       d| _        d| _        | j                  dd       | j                  dd	       | j                  d
d       g d| _        y )NeraserEraserztool-eraser-symbolicFclearselection-colorzlast-delete-replaceeraser-typemosaiceraser-shapepencil        r   r   r   )	super__init__r   _use_operator_fallback_operatorload_tool_action_enumadd_tool_action_enum_rgba)selfwindowkwargs	__class__s      5/usr/lib/python3/dist-packages/drawing/tool_eraser.pyr   zToolEraser.__init__   sw    '6tXq{+A6K$#$.0EFM84NH5#$*    c                    | j                  d      | _        | j                  d      | _        | j                          | j                  }| j                  dk(  r|dt        d      z   z  }n|dt        d      z   z  }| j                  dk(  r5|dt        d      t        d	      t        d
      d| j                     z   z  }n>|dt        d      t        d      t        d      t        d      d| j                     z   z  }| j                         j                         rd }n;| j                  dz   }| j                  dk(  r|t        d      z  }n|t        d      z  }||g}t        t        d |            S )Nr   r   r   z - Pencil	RectanglesolidTransparencyzDefault colorzSecondary color)alphainitial	secondaryBlurzShuffle pixelszShuffle and blurMosaic)blurshufflemixedr   z/Press <Shift> to erase a rectangle area insteadz%Press <Shift> to erase a path instead)get_option_value
_rgba_type_eraser_shape_apply_shape_constraintslabelr   _eraser_type	get_imageget_mouse_is_pressedlistfilter)r    label_optionslabel_modifier_shift	full_lists       r$   get_editing_tipszToolEraser.get_editing_tips'   s{   ))*;<$/,,^<$!**-	8#EAhK''=EAkN**=	'!E~!$% 
__	  = EfI!"!"k	
 
  = 
^^**,**u,
H$AOPPAEFF23)	fT9%	&&r%   c                     t        d      S )NzEraser options)r   r    s    r$   get_options_labelzToolEraser.get_options_labelK   s    	
	r%   c                 (   | j                  d      | _        | j                  dk7  }| j                  d|       |sd| _        d| j                  k(  rd| j                  k(  rd| _        nd| _        | j                  j                  j                  |        y )Nr   r   r)   r-   sourcer   )	r3   r8   r5   set_action_sensitivityr4   r   r!   options_managerupdate_pane)r    can_blurs     r$   r6   z#ToolEraser._apply_shape_constraintsN   s    ++M:$8+(mX6	4!!!kT__&D%4$4
 ++))$/r%   c                    t         |   ||||       | j                  dk(  r
g d| _        n| j                  dk(  rR| j	                         j                         }|j                  |j                  |j                  |j                  g| _        n | j                  dk(  r| j                  | _        | j                  |j                         d| j                  v r/| j                  dk(  rd| _        nd| _        | j                          y y )Nr+   r   r,   r-   SHIFT	rectangler   )r   on_press_on_arear4   r   r9   get_initial_rgbaredgreenbluer+   secondary_colorupdate_modifier_statestate_modifier_keysr5   r6   )r    eventsurfaceevent_xevent_yclrr#   s         r$   rM   zToolEraser.on_press_on_areab   s    '5'7G< 
__$4:)#			*	*	,3#))SXXsyy94:+%$$4:U[[)###
K'!D$D  " $r%   c                     | j                   dk(  r| j                  ||       n| j                  ||       |sy | j                  d      }| j	                  |       y )NrL   T)r5   _draw_rectangle
_add_pointbuild_operationdo_tool_operation)r    rV   rW   rX   rY   render	operations          r$   on_motion_on_areazToolEraser.on_motion_on_areaw   sR    	;&)??7G$		""4()#r%   c                     | j                   dk(  r| j                  ||       n| j                  ||       | j                  d      }| j	                  |       | j                          y )NrL   F)r5   r\   r]   r^   apply_operation_reset_temp_points)r    rV   rW   rX   rY   ra   s         r$   on_release_on_areazToolEraser.on_release_on_area   sX    	;&)??7G$""5))y!r%   c                 N   | j                         }|j                  | j                  | j                         |j	                  | j                  |       |j	                  ||       |j	                  || j                         |j                          |j                         | _        y )N)get_contextmove_tox_pressy_pressline_to
close_path	copy_path_path)r    rX   rY   cairo_contexts       r$   r\   zToolEraser._draw_rectangle   s|    ""$-dll3g.).&&($*r%   c                 .    d | _         d| _        d| _        y )Ng      )ro   rj   rk   rB   s    r$   re   zToolEraser._reset_temp_points   s    $*$,$,r%   c                     |rd}n| j                   }| j                  || j                  | j                  | j                  | j
                  || j                  | j                  | j                  d
}|S )Nr)   )
tool_id
is_preview
line_widthline_cap	line_joinreplacementcensor-typecensor-shape	antialiaspath)	r8   id
tool_width_cap_id_join_idr   r5   _use_antialiasro   )r    rt   eraser_typera   s       r$   r^   zToolEraser.build_operation   sf    ;"";gg||**%%##::) 
r%   c           	      :   |d   y | j                  |      }|j                  t        j                  j                         |d   }|dk(  r |j
                  |d     |d   dk(  r%|j                  |d          |j                          y |j                  t        j                  j                         |j                  t        j                  j                         |j                  |d          |j                  |d          |j                          y |j                  |d          |j                         \  }}}}t!        |      t!        |      t!        |      t!        |      g\  }}}}||z
  }||z
  }	t        j"                  t        j$                  j&                  ||	      }
t        j(                  |
      }|j+                  | j-                         d|z  d|z         |j/                          | j1                         }|
j3                  ||       t5        d	t!        t5        ||	      d
z              }t6        j8                  }t!        ||	z  dz        }|dk(  rt;        |
|t<        j>                  |      }np|dk(  rt;        |
|t<        j@                  |      }nN|dk(  r| jC                  |
|      }n6|dk(  r1| jC                  |
|dz        }t;        ||t<        jD                  |      }|jG                          |j+                  ||       |j/                          y )Nr|   ry   r)   rx   rz   rL   ru            r   r0   r1   r2   )$start_tool_operationset_operatorcairoOperatorSOURCEset_source_rgbaappend_pathfillset_line_capLineCapROUNDset_line_joinLineJoinset_line_widthstrokepath_extentsintImageSurfaceFormatARGB32Contextset_source_surfaceget_surfacepaintscale_factorset_device_scaleminr
   BOTHr   r	   TILESPX_BOX_shuffle_pixelsCAIRO_REPAINTSclip)r    ra   rp   censor_typer0r1r2r3widthheightrW   	ccontext2scaleb_radb_dirshuffle_intensitybss                    r$   r_   zToolEraser.do_tool_operation   s   v	++I6-U^^223-(+G =  )M":;;.i/0 
 u}}223 4 45  <!89i/0	Yv./"//12r2r"gs2wBR92r2r
r'%7&u||22E6B'mmG$)t//127BGD//



%	5%(
b#c%(1,-
.%


%56>Q./Hwx~~uE2fwxF2iW&782gW&7!&;<2r5(*A*A5I2 ""2r2.r%   c                     |j                         }|j                         }d}|dk  s|dk  r|S |j                         }t        j                  d       |dkD  r|dz
  }| j                  ||||       |dkD  r|S )Nr   r   r   )	get_width
get_heightget_datarandomseed_shuffle_one_iteration)r    rW   
iterationswhchannelspixelss          r$   r   zToolEraser._shuffle_pixels   s    !!(!VqAv
>&++a.QQ:q!Xv6 	Q 
.r%   c                    t        j                  d|dz
        }t        j                  d|dz
        }||z  |z   |z  }||dz      }||dz      }	||dz      }
||dz      }t        j                  d|dz
        }t        j                  d|dz
        }||z  |z   |z  }||dz      }||dz      }||dz      }||dz      }|||dz   <   |	||dz   <   |
||dz   <   |||dz   <   ||z  |z   |z  }|||dz   <   |||dz   <   |||dz   <   |||dz   <   y )Nr   r   r      )r   randint)r    r   r   r   r   pix1_xpix1_y	cur_pixela1r   g1b1pix2_xpix2_ya2r   g2b2s                     r$   r   z!ToolEraser._shuffle_one_iteration   ss   >>!QU#&>>!QU#& zF"h.)i!m"i!m"i!m"i!m">>!QU#&>>!QU#& zF"h.)i!m"i!m"i!m"i!m" &Q&Q&Q&Q zF"h.)&Q&Q&Q&Qr%   )T)__name__
__module____qualname____gtype_name__r   r@   rC   r6   rM   rb   rf   r\   re   r^   r_   r   r   __classcell__)r#   s   @r$   r   r      sK    
$"'H0(#*	$)&2l r%   r   )r   r   gi.repositoryr   r   tool_pencilr   abstract_classic_toolr   utilities_blurr   r	   r
   r    r%   r$   <module>r      s'   $  ( # 6 K K{ {r%   