o
    :Î®c4  ã                   @   s$   G d d„ de ƒZG dd„ de ƒZdS )c                   @   sB   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Z	dS )ÚBlitManagerz$Object that manages blits on an axesc                 C   s6   || _ |jj| _| j d| j¡ || _ d | _g | _d S )NÚ
draw_event)ÚaxÚfigureÚcanvasÚmpl_connectÚon_draw_eventÚ
backgroundÚartists©Úselfr   © r   úB/tmp/pip-target-vg8gfxp4/lib/python/skimage/viewer/utils/canvas.pyÚ__init__   s   

zBlitManager.__init__c                 C   s   | j  |¡ |  ¡  d S ©N)r	   ÚextendÚredraw)r   r	   r   r   r   Úadd_artists   s   zBlitManager.add_artistsc                 C   s   |D ]}| j  |¡ qd S r   )r	   Úremove)r   r	   Úartistr   r   r   Úremove_artists   s   ÿzBlitManager.remove_artistsNc                 C   s   | j  | jj¡| _|  ¡  d S r   )r   Úcopy_from_bboxr   Úbboxr   Údraw_artists©r   Úeventr   r   r   r      s   zBlitManager.on_draw_eventc                 C   sB   | j d ur| j | j ¡ |  ¡  | j | jj¡ d S | j ¡  d S r   )r   r   Úrestore_regionr   Úblitr   r   Ú	draw_idle)r   r   r   r   r      s
   
zBlitManager.redrawc                 C   s   | j D ]}| j |¡ qd S r   )r	   r   Údraw_artist)r   r   r   r   r   r   #   s   
ÿzBlitManager.draw_artistsr   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r   r   r      s    
r   c                   @   s`   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚEventManagerz&Object that manages events on a canvasc                 C   s`   |j j| _|  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ g | _d | _	d S )NÚbutton_press_eventÚkey_press_eventÚbutton_release_eventÚmotion_notify_eventÚscroll_event)
r   r   Úconnect_eventÚon_mouse_pressÚon_key_pressÚon_mouse_releaseÚon_moveÚ	on_scrollÚtoolsÚactive_toolr
   r   r   r   r   ,   s   

zEventManager.__init__c                 C   s   | j  ||¡ d S r   )r   r   )r   ÚnameÚhandlerr   r   r   r)   7   s   zEventManager.connect_eventc                 C   s   | j  |¡ || _d S r   )r/   Úappendr0   ©r   Útoolr   r   r   Úattach:   s   
zEventManager.attachc                 C   s,   | j  |¡ | j r| j d | _d S d | _d S )Néÿÿÿÿ)r/   r   r0   r4   r   r   r   Údetach>   s   
zEventManager.detachc                 C   s€   | j D ]}| |¡s| |¡r|| _ nq| jr&| j |¡s&| j |¡ d S t| j ƒD ]}| |¡s=|| _| |¡  d S q+d S r   )r/   ÚignoreÚhit_testr0   r*   Úreversed©r   r   r5   r   r   r   r*   E   s   
€

ýÿzEventManager.on_mouse_pressc                 C   ó$   |   |¡}|d ur| |¡ d S d S r   )Ú	_get_toolr+   r<   r   r   r   r+   S   ó   
ÿzEventManager.on_key_pressc                 C   s   | j r	| j |¡rd S | jS r   )r/   r0   r9   r   r   r   r   r>   X   s   zEventManager._get_toolc                 C   r=   r   )r>   r,   r<   r   r   r   r,   ]   r?   zEventManager.on_mouse_releasec                 C   r=   r   )r>   r-   r<   r   r   r   r-   b   r?   zEventManager.on_movec                 C   r=   r   )r>   r.   r<   r   r   r   r.   g   r?   zEventManager.on_scrollN)r   r    r!   r"   r   r)   r6   r8   r*   r+   r>   r,   r-   r.   r   r   r   r   r#   (   s    r#   N)Úobjectr   r#   r   r   r   r   Ú<module>   s   %