B
    ¶‰\4  ã               @   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 )NZ
draw_event)ÚaxÚfigureÚcanvasÚmpl_connectÚon_draw_eventÚ
backgroundÚartists)Úselfr   © r
   ú:lib/python3.7/site-packages/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   x|D ]}| j  |¡ qW d S )N)r   Úremove)r	   r   Úartistr
   r
   r   Úremove_artists   s    
zBlitManager.remove_artistsNc             C   s   | j  | jj¡| _|  ¡  d S )N)r   Zcopy_from_bboxr   Úbboxr   Údraw_artists)r	   Úeventr
   r
   r   r      s    zBlitManager.on_draw_eventc             C   s@   | j d k	r2| j | j ¡ |  ¡  | j | jj¡ n
| j ¡  d S )N)r   r   Zrestore_regionr   Zblitr   r   Z	draw_idle)r	   r
   r
   r   r      s
    
zBlitManager.redrawc             C   s    x| j D ]}| j |¡ qW d S )N)r   r   Zdraw_artist)r	   r   r
   r
   r   r   #   s    zBlitManager.draw_artists)N)
Ú__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 )NZbutton_press_eventZkey_press_eventZbutton_release_eventZmotion_notify_eventZscroll_event)
r   r   Úconnect_eventÚon_mouse_pressÚon_key_pressÚon_mouse_releaseÚon_moveÚ	on_scrollÚtoolsÚactive_tool)r	   r   r
   r
   r   r   ,   s    
zEventManager.__init__c             C   s   | j  ||¡ d S )N)r   r   )r	   ÚnameZhandlerr
   r
   r   r   7   s    zEventManager.connect_eventc             C   s   | j  |¡ || _d S )N)r!   Úappendr"   )r	   Útoolr
   r
   r   Úattach:   s    zEventManager.attachc             C   s*   | j  |¡ | j r | j d | _nd | _d S )Néÿÿÿÿ)r!   r   r"   )r	   r%   r
   r
   r   Údetach>   s    zEventManager.detachc             C   s„   x*| j D ] }| |¡s| |¡r|| _P qW | jrN| j |¡sN| j |¡ d S x0t| j ƒD ]"}| |¡sZ|| _| |¡ d S qZW d S )N)r!   ÚignoreZhit_testr"   r   Úreversed)r	   r   r%   r
   r
   r   r   E   s    

zEventManager.on_mouse_pressc             C   s    |   |¡}|d k	r| |¡ d S )N)Ú	_get_toolr   )r	   r   r%   r
   r
   r   r   S   s    
zEventManager.on_key_pressc             C   s   | j r| j |¡rd S | jS )N)r!   r"   r)   )r	   r   r
   r
   r   r+   X   s    zEventManager._get_toolc             C   s    |   |¡}|d k	r| |¡ d S )N)r+   r   )r	   r   r%   r
   r
   r   r   ]   s    
zEventManager.on_mouse_releasec             C   s    |   |¡}|d k	r| |¡ d S )N)r+   r   )r	   r   r%   r
   r
   r   r   b   s    
zEventManager.on_movec             C   s    |   |¡}|d k	r| |¡ d S )N)r+   r    )r	   r   r%   r
   r
   r   r    g   s    
zEventManager.on_scrollN)r   r   r   r   r   r   r&   r(   r   r   r+   r   r   r    r
   r
   r
   r   r   (   s   r   N)Úobjectr   r   r
   r
   r
   r   Ú<module>   s   %