U
    d»{j”+  ã                
   @   sd  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 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
e ¡ e ¡ e ¡ f 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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ÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBase)ÚCursors)ÚGdkÚGioÚGLibÚGtkZcairoz Gtk-based backends require cairoz%s.%s.%sc                 C   s$   |   ¡ D ]}| ¡  qd| _d ad S ©NT)Zget_windowsÚcloseÚ_created_by_matplotlibÚ_application)ÚappÚwin© r   ú_/var/www/html/bwave/python/venv/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_application1   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_nameI   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   r0   X   s    zTimerGTK.__init__c                 C   s   |   ¡  t | j| j¡| _d S r   )Ú_timer_stopr   Ztimeout_addZ	_intervalÚ	_on_timerr.   ©r1   r   r   r   Ú_timer_start\   s    zTimerGTK._timer_startc                 C   s    | j d k	rt | j ¡ d | _ d S r   )r.   r   Zsource_remover6   r   r   r   r4   b   s    
zTimerGTK._timer_stopc                 C   s   | j d k	r|  ¡  |  ¡  d S r   )r.   r4   r7   r6   r   r   r   Ú_timer_set_intervalg   s    
zTimerGTK._timer_set_intervalc                    s(   t ƒ  ¡  | jr| jsdS d | _dS d S )NTF)r/   r5   Ú	callbacksZ_singler.   r6   r2   r   r   r5   m   s
    
zTimerGTK._on_timer)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r7   r4   r8   r5   Ú__classcell__r   r   r2   r   r-   U   s   r-   c                       sP   e Zd ZdZ‡ fdd„Z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   rE   ©r   r6   r   r   r   ´   r   z,_FigureManagerGTK.__init__.<locals>.<lambda>Zdelete_eventzclose-request©r@   rD   c                     s
   t  ˆ ¡S r   rF   rG   r6   r   r   r   ¶   r   )+r   Úget_major_versionÚ_gtk_verr'   ZWindowÚwindowZ
add_windowr/   r0   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ÚappendZget_preferred_sizeÚheightÚset_default_sizeÚ_destroyingr%   r"   Úis_interactiveZ	draw_idleZ
grab_focus)r1   rR   ÚnumZgtk_verr   Zicon_extÚwÚhÚswZmin_sizeZnat_sizer2   r6   r   r0   ‰   sT    
ÿ







ÿ


z_FigureManagerGTK.__init__c                 G   s(   | j r
d S d| _ | j ¡  | j ¡  d S r   )rX   rK   rE   rR   ©r1   r   r   r   r   rE   ½   s
    
z_FigureManagerGTK.destroyc                 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_surfacerH   z#Cannot raise window yet to be setup)rK   rQ   rR   Zdrawr"   ZrcParamsrJ   r!   Zpresentr   Zwarn_external)r1   Ú	meth_namer   r   r   rQ   È   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   )r_   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_fullscreenra   r   r   r   r   Û   r   rH   )rJ   rK   ZunfullscreenZ
fullscreen)r1   rb   r   r   r   Úfull_screen_toggle×   s    ýü
z$_FigureManagerGTK.full_screen_togglec                 C   s
   | j  ¡ S r   )rK   Z	get_titler6   r   r   r   Úget_window_titleâ   s    z"_FigureManagerGTK.get_window_titlec                 C   s   | j  |¡ d S r   )rK   Ú	set_title)r1   Ú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sj|j|j  krfdkrzn n| j	 
||¡ n| j	 ||¡ d S )NrD   é   )ÚintrR   Zdevice_pixel_ratiorT   Zsize_requestrV   Zget_allocationrJ   ÚwidthrK   rW   Úresize)r1   rj   rV   Ztoolbar_sizeZcanvas_sizer   r   r   rk   è   s    


&z_FigureManagerGTK.resize)r:   r;   r<   r=   r0   rE   rQ   rc   rd   rg   rk   r>   r   r   r2   r   r?   y   s   4r?   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)r1   Ú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   )ri   )Ú.0Úvalr   r   r   Ú
<listcomp>  s     z:_NavigationToolbar2GTK.draw_rubberband.<locals>.<listcomp>)rR   ZfigureZbboxrV   Ú_draw_rubberband)r1   ÚeventÚx0Úy0Úx1Úy1rV   Úrectr   r   r   Údraw_rubberband  s
    z&_NavigationToolbar2GTK.draw_rubberbandc                 C   s   | j  d ¡ d S r   )rR   rt   r6   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)r1   r�   ZactiveZbuttonr   r   r   Ú_update_buttons_checked  s
    z._NavigationToolbar2GTK._update_buttons_checkedc                    s   t ƒ j|Ž  |  ¡  d S r   )r/   Úpanr‚   r^   r2   r   r   rƒ     s    z_NavigationToolbar2GTK.panc                    s   t ƒ j|Ž  |  ¡  d S r   )r/   Úzoomr‚   r^   r2   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   rh   ZBackZForward)Z
_nav_stackÚ_posÚlenZ	_elementsr~   Zset_sensitive)r1   Zcan_backwardZcan_forwardr   r   r   Úset_history_buttons  s    

z*_NavigationToolbar2GTK.set_history_buttons)r:   r;   r<   rp   r{   r|   r‚   rƒ   r„   r‡   r>   r   r   r2   r   rl   ù   s   rl   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRubberbandGTKc                 C   s   t  |  ¡ d ||||¡ d S r   )rl   r{   Ú"_make_classic_style_pseudo_toolbar)r1   rv   rw   rx   ry   r   r   r   r{   %  s         ÿzRubberbandGTK.draw_rubberbandc                 C   s   t  |  ¡ ¡ d S r   )rl   r|   r‰   r6   r   r   r   r|   )  s    ÿzRubberbandGTK.remove_rubberbandN)r:   r;   r<   r{   r|   r   r   r   r   rˆ   $  s   rˆ   c                   @   s   e Zd Zdd„ ZdS )ÚConfigureSubplotsGTKc                 G   s   t  | d ¡ d S r   )rl   Zconfigure_subplotsr^   r   r   r   Útrigger/  s    zConfigureSubplotsGTK.triggerN)r:   r;   r<   r‹   r   r   r   r   rŠ   .  s   rŠ   c                   @   s   e Zd Zedd„ ƒZdS )Ú_BackendGTKc                  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)Úcontextr   r   r   Úmainloop4  s    
z_BackendGTK.mainloopN)r:   r;   r<   Ústaticmethodr’   r   r   r   r   rŒ   3  s   rŒ   )-r=   ÚloggingrL   rA   r"   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r   r	   Zmatplotlib.backend_toolsr
   ÚgiZgi.repositoryr   r   r   r   Zrequire_foreignÚImportErrorÚeÚ	getLoggerr:   Ú_logrI   Zget_minor_versionZget_micro_versionZbackend_versionr   r   r'   r,   r-   r?   rl   ZRubberbandBaserˆ   ZConfigureSubplotsBaserŠ   rŒ   r   r   r   r   Ú<module>   s<   
  ÿ$ +
