U
    ÂmœdP,  ã                
   @   s^  d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlZddlmZmZmZmZ ze d¡ W n, ek
r¾ Z zed	ƒe‚W 5 dZ[X Y nX e e¡Zdad
d„ Zdd„ Z dd„ Z!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd„ dej&ƒZ'G dd„ dej(ƒZ)G dd„ deƒZ*dS )z)
Common code for GTK3 and GTK4 backends.
é    N)Ú_apiÚbackend_toolsÚcbook)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBase)ÚCursors)ÚGdkÚGioÚGLibÚGtkZcairoz Gtk-based backends require cairoc                 C   s$   |   ¡ D ]}| ¡  qd| _d ad S ©NT)Zget_windowsÚcloseÚ_created_by_matplotlibÚ_application)ÚappÚwin© r   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/matplotlib/backends/_backend_gtk.pyÚ_shutdown_application   s    
r   c                  C   s€   t d kr|tj ¡ } | d ks&t| ddƒrxtj ¡ s8tdƒ‚t	j 
dtjj¡a t  ddd„ ¡ t  dt¡ t  ¡  t ¡  n| a t S )	Nr   FzInvalid DISPLAY variablezorg.matplotlib.Matplotlib3Úactivatec                  _   s   d S ©Nr   )ÚargsÚkwargsr   r   r   Ú<lambda>;   ó    z%_create_application.<locals>.<lambda>Úshutdown)r   r   ÚApplicationÚget_defaultÚgetattrÚmplZ_c_internal_utilsZdisplay_is_validÚRuntimeErrorr   ÚnewZApplicationFlagsZ
NON_UNIQUEÚconnectr   Úregisterr   Z_setup_new_guiapp)r   r   r   r   Ú_create_application-   s    

ÿ
r(   c                 C   s8   t jtjdtjdtjdtjdtjdtjdtj	di| d�S )	NÚmoveZpointerÚdefaultZ	crosshairÚwaitz	ew-resizez	ns-resize)Úcursor)
r   Zcheck_getitemr   ZMOVEZHANDZPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICAL)Z
mpl_cursorr   r   r   Úmpl_to_gtk_cursor_nameE   s$           ùør-   c                       sD   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡ fd
d„Z‡  Z	S )ÚTimerGTKz0Subclass of `.TimerBase` using GTK timer events.c                    s   d | _ tƒ j||Ž d S r   )Ú_timerÚsuperÚ__init__)Úselfr   r   ©Ú	__class__r   r   r1   T   s    zTimerGTK.__init__c                 C   s   |   ¡  t | j| j¡| _d S r   )Ú_timer_stopr   Ztimeout_addZ	_intervalÚ	_on_timerr/   ©r2   r   r   r   Ú_timer_startX   s    zTimerGTK._timer_startc                 C   s    | j d k	rt | j ¡ d | _ d S r   )r/   r   Zsource_remover7   r   r   r   r5   ^   s    
zTimerGTK._timer_stopc                 C   s   | j d k	r|  ¡  |  ¡  d S r   )r/   r5   r8   r7   r   r   r   Ú_timer_set_intervalc   s    
zTimerGTK._timer_set_intervalc                    s(   t ƒ  ¡  | jr| jsdS d | _dS d S )NTF)r0   r6   Ú	callbacksZ_singler/   r7   r3   r   r   r6   i   s
    
zTimerGTK._on_timer)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r8   r5   r9   r6   Ú__classcell__r   r   r3   r   r.   Q   s   r.   c                   @   s   e Zd ZeZdS )Ú_FigureCanvasGTKN)r;   r<   r=   r.   Z
_timer_clsr   r   r   r   r@   u   s   r@   c                       s\   e Zd ZdZ‡ fdd„Zdd„ Zedd„ ƒZdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )Ú_FigureManagerGTKaC  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar or Gtk.Box
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window
    c                    s   t  ¡  ˆ _}tƒ }t  ¡ ˆ _| ˆ j¡ tƒ  ||¡ |dkr|ˆ j 	dd¡ t
jdkr\dnd}ˆ j tt d|› �¡ƒ¡ t  ¡ ˆ _ˆ j dt jj¡ |dkrØˆ j ˆ j¡ ˆ j ¡  ˆ j ¡  ˆ j ˆ jd	d	d
¡ n$|dkrüˆ j ˆ j¡ ˆ j ˆ j¡ ˆ j ¡ \}}ˆ jd k	�rŠ|dk�r@ˆ j ¡  ˆ j ˆ jddd
¡ n2|dk�rrt jt jj d�}| ˆ j¡ ˆ j !|¡ ˆ j "¡ \}	}
||
j#7 }ˆ j $||¡ dˆ _%ˆ j &d‡ fdd„¡ ˆ j &dddœ| ‡ fdd„¡ t' (¡ �ròˆ j ¡  ˆ j )¡  ˆ j *¡  d S )Né   Ú
matplotlibZ
MatplotlibÚwin32ZpngÚsvgzimages/matplotlib.ZorientationTr   é   F)Zvscrollbar_policyÚdestroyc                     s
   t  ˆ ¡S r   ©r   rG   ©r   r7   r   r   r   ´   r   z,_FigureManagerGTK.__init__.<locals>.<lambda>Zdelete_eventzclose-request©rB   rF   c                     s
   t  ˆ ¡S r   rH   rI   r7   r   r   r   ¶   r   )+r   Úget_major_versionÚ_gtk_verr(   ZWindowÚwindowZ
add_windowr0   r1   Zset_wmclassÚsysÚplatformZset_icon_from_fileÚstrr   Z_get_data_pathÚBoxZvboxZset_propertyZOrientationZVERTICALÚaddÚshowÚcanvasZ
pack_startZ	set_childÚprependZget_width_heightÚtoolbarZpack_endZScrolledWindowZ
PolicyTypeZNEVERÚappendÚget_preferred_sizeÚheightÚset_default_sizeÚ_destroyingr&   r#   Úis_interactiveZ	draw_idleZ
grab_focus)r2   rT   ÚnumZgtk_verr   Zicon_extÚwÚhÚswÚmin_sizeÚnat_sizer3   r7   r   r1   ‰   sT    
ÿ







ÿ


z_FigureManagerGTK.__init__c                 G   s(   | j r
d S d| _ | j ¡  | j ¡  d S r   )r[   rM   rG   rT   ©r2   r   r   r   r   rG   ½   s
    
z_FigureManagerGTK.destroyc                 C   s^   t d krd S zFzt  ¡  W n4 tk
rN   tj ¡ }| ¡ rH| d¡ q4‚ Y nX W 5 d a X d S r   )r   ÚrunÚKeyboardInterruptr   ZMainContextr*   ÚpendingÚ	iteration)ÚclsÚcontextr   r   r   Ústart_main_loopÈ   s    
z!_FigureManagerGTK.start_main_loopc                 C   sV   | j  ¡  | j ¡  tjd rRdddœ| j }t| j |ƒƒ rH| j  ¡  n
t	 
d¡ d S )Nzfigure.raise_windowÚ
get_windowZget_surfacerJ   z#Cannot raise window yet to be setup)rM   rS   rT   Zdrawr#   ZrcParamsrL   r"   Zpresentr   Zwarn_external)r2   Ú	meth_namer   r   r   rS   Û   s    


z_FigureManagerGTK.showc                 C   s<   dd„ dd„ dœ| j  }|| jƒr.| j ¡  n
| j ¡  d S )Nc                 S   s   |   ¡  ¡ tjj@ S r   )rk   Z	get_stater   ZWindowStateZ
FULLSCREEN©r^   r   r   r   r   ì   s   
ÿz6_FigureManagerGTK.full_screen_toggle.<locals>.<lambda>c                 S   s   |   ¡ S r   )Úis_fullscreenrm   r   r   r   r   î   r   rJ   )rL   rM   ZunfullscreenZ
fullscreen)r2   rn   r   r   r   Úfull_screen_toggleê   s    ýü
z$_FigureManagerGTK.full_screen_togglec                 C   s
   | j  ¡ S r   )rM   Z	get_titler7   r   r   r   Úget_window_titleõ   s    z"_FigureManagerGTK.get_window_titlec                 C   s   | j  |¡ d S r   )rM   Ú	set_title)r2   Útitler   r   r   Úset_window_titleø   s    z"_FigureManagerGTK.set_window_titlec                 C   s�   t || jj ƒ}t || jj ƒ}| jr>| j ¡ \}}||j7 }| j ¡ }| jdksn|j|j  krjdkr~n n| j	 
||¡ n| j	 ||¡ d S )NrF   é   )ÚintrT   Zdevice_pixel_ratiorV   rX   rY   Zget_allocationrL   ÚwidthrM   rZ   Úresize)r2   rv   rY   ra   rb   Zcanvas_sizer   r   r   rw   û   s    

&z_FigureManagerGTK.resize)r;   r<   r=   r>   r1   rG   Úclassmethodrj   rS   ro   rp   rs   rw   r?   r   r   r3   r   rA   y   s   4
rA   c                       sP   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Z‡ fd	d
„Z‡ fdd„Zdd„ Z	‡  Z
S )Ú_NavigationToolbar2GTKc                 C   s"   t  |¡}| j d|› d�¡ d S )Nz<small>z</small>)r   Zmarkup_escape_textÚmessageZ
set_markup)r2   ÚsÚescapedr   r   r   Úset_message  s    
z"_NavigationToolbar2GTK.set_messagec                 C   sJ   | j jjj}|| }|| }dd„ |||| || fD ƒ}| j  |¡ d S )Nc                 S   s   g | ]}t |ƒ‘qS r   )ru   )Ú.0Úvalr   r   r   Ú
<listcomp>  s     z:_NavigationToolbar2GTK.draw_rubberband.<locals>.<listcomp>)rT   ZfigureZbboxrY   Ú_draw_rubberband)r2   ÚeventÚx0Úy0Úx1Úy1rY   Úrectr   r   r   Údraw_rubberband  s
    z&_NavigationToolbar2GTK.draw_rubberbandc                 C   s   | j  d ¡ d S r   )rT   r�   r7   r   r   r   Úremove_rubberband  s    z(_NavigationToolbar2GTK.remove_rubberbandc              
   C   sL   dD ]B\}}| j  |¡}|r| |j¡� | | jj|k¡ W 5 Q R X qd S )N))ÚPanZPAN)ZZoomZZOOM)Ú_gtk_idsÚgetZhandler_blockZ_signal_handlerZ
set_activeÚmodeÚname)r2   rŽ   ÚactiveZbuttonr   r   r   Ú_update_buttons_checked  s
    z._NavigationToolbar2GTK._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S r   )r0   Úpanr�   rc   r3   r   r   r‘   &  s    z_NavigationToolbar2GTK.panc                    s   t ƒ j|Ž  |  ¡  d S r   )r0   Úzoomr�   rc   r3   r   r   r’   *  s    z_NavigationToolbar2GTK.zoomc                 C   s\   | j jdk}| j jt| j jƒd k }d| jkr>| jd  |¡ d| jkrX| jd  |¡ d S )Nr   rt   ZBackÚForward)Z
_nav_stackÚ_posÚlenZ	_elementsr‹   Zset_sensitive)r2   Zcan_backwardZcan_forwardr   r   r   Úset_history_buttons.  s    

z*_NavigationToolbar2GTK.set_history_buttons)r;   r<   r=   r}   rˆ   r‰   r�   r‘   r’   r–   r?   r   r   r3   r   ry     s   ry   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandGTKc                 C   s   t  |  ¡ d ||||¡ d S r   )ry   rˆ   Ú"_make_classic_style_pseudo_toolbar)r2   rƒ   r„   r…   r†   r   r   r   rˆ   8  s         ÿzRubberbandGTK.draw_rubberbandc                 C   s   t  |  ¡ ¡ d S r   )ry   r‰   r˜   r7   r   r   r   r‰   <  s    ÿzRubberbandGTK.remove_rubberbandN)r;   r<   r=   rˆ   r‰   r   r   r   r   r—   7  s   r—   c                   @   s   e Zd Zdd„ ZdS )ÚConfigureSubplotsGTKc                 G   s   t  | d ¡ d S r   )ry   Zconfigure_subplotsrc   r   r   r   ÚtriggerB  s    zConfigureSubplotsGTK.triggerN)r;   r<   r=   rš   r   r   r   r   r™   A  s   r™   c                   @   s,   e Zd Zde ¡ e ¡ e ¡ f Zej	Z
dS )Ú_BackendGTKz%s.%s.%sN)r;   r<   r=   r   rK   Zget_minor_versionZget_micro_versionZbackend_versionrA   rj   Zmainloopr   r   r   r   r›   F  s   ýr›   )+r>   ÚloggingrN   rC   r#   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r   r	   r
   Zmatplotlib.backend_toolsr   ÚgiZgi.repositoryr   r   r   r   Zrequire_foreignÚImportErrorÚeÚ	getLoggerr;   Ú_logr   r   r(   r-   r.   r@   rA   ry   ZRubberbandBaser—   ZConfigureSubplotsBaser™   r›   r   r   r   r   Ú<module>   s4   
$ +
