a
    s=ic+                  
   @   sf  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y Z zed	eW Y dZ[n
dZ[0 0 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   q/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/backends/_backend_gtk.py_shutdown_application#   s    
r   c                  C   s   t d u r|tj } | d u 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movepointerdefaultZ	crosshairwaitz	ew-resizez	ns-resize)cursor)
r   Zcheck_getitemr
   ZMOVEZHAND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|i | d S r   )_timersuper__init__)selfr   r   	__class__r   r   r2   X   s    zTimerGTK.__init__c                 C   s   |    t| j| j| _d S r   )_timer_stopr   Ztimeout_add	_interval	_on_timerr0   r3   r   r   r   _timer_start\   s    zTimerGTK._timer_startc                 C   s    | j d urt| j  d | _ d S r   )r0   r   Zsource_remover9   r   r   r   r6   b   s    
zTimerGTK._timer_stopc                 C   s   | j d ur|   |   d S r   )r0   r6   r:   r9   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)r1   r8   	callbacksZ_singler0   r9   r4   r   r   r8   m   s
    
zTimerGTK._on_timer)
__name__
__module____qualname____doc__r2   r:   r6   r;   r8   __classcell__r   r   r4   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 u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   rH   r   r9   r   r   r      r   z,_FigureManagerGTK.__init__.<locals>.<lambda>Zdelete_eventzclose-requestrC   rG   c                     s
   t  S r   rI   rJ   r9   r   r   r      r   )+r   get_major_version_gtk_verr'   ZWindowwindowZ
add_windowr1   r2   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)r3   rU   numZgtk_verr   Zicon_extwhswZmin_sizeZnat_sizer4   r9   r   r2      sT    











z_FigureManagerGTK.__init__c                 G   s(   | j r
d S d| _ | j  | j  d S r   )r[   rN   rH   rU   r3   r   r   r   r   rH      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_surfacerK   z#Cannot raise window yet to be setup)rN   rT   rU   Zdrawr"   ZrcParamsrM   r!   Zpresentr   Zwarn_external)r3   	meth_namer   r   r   rT      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   )rb   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_fullscreenrd   r   r   r   r      r   rK   )rM   rN   ZunfullscreenZ
fullscreen)r3   re   r   r   r   full_screen_toggle   s    
z$_FigureManagerGTK.full_screen_togglec                 C   s
   | j  S r   )rN   Z	get_titler9   r   r   r   get_window_title   s    z"_FigureManagerGTK.get_window_titlec                 C   s   | j | d S r   )rN   	set_title)r3   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 )NrG      )intrU   Zdevice_pixel_ratiorW   Zsize_requestrY   Zget_allocationrM   widthrN   rZ   resize)r3   rm   rY   Ztoolbar_sizeZcanvas_sizer   r   r   rn      s    


&z_FigureManagerGTK.resize)r=   r>   r?   r@   r2   rH   rT   rf   rg   rj   rn   rA   r   r   r4   r   rB   y   s   4rB   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)r3   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   )rl   ).0valr   r   r   
<listcomp>  r   z:_NavigationToolbar2GTK.draw_rubberband.<locals>.<listcomp>)rU   ZfigureZbboxrY   _draw_rubberband)r3   eventx0y0x1y1rY   rectr   r   r   draw_rubberband  s
    z&_NavigationToolbar2GTK.draw_rubberbandc                 C   s   | j d  d S r   )rU   rw   r9   r   r   r   remove_rubberband	  s    z(_NavigationToolbar2GTK.remove_rubberbandc              	   C   s`   dD ]V\}}| j |}|r||j" || jj|k W d    q1 sP0    Y  qd S )N))PanZPAN)ZZoomZZOOM)_gtk_idsgetZhandler_blockZ_signal_handlerZ
set_activemodename)r3   r   activeZbuttonr   r   r   _update_buttons_checked  s
    z._NavigationToolbar2GTK._update_buttons_checkedc                    s   t  j|  |   d S r   )r1   panr   ra   r4   r   r   r     s    z_NavigationToolbar2GTK.panc                    s   t  j|  |   d S r   )r1   zoomr   ra   r4   r   r   r     s    z_NavigationToolbar2GTK.zoomc                 C   s\   | j jdk}| j jt| j jd k }d| jv r>| jd | d| jv rX| jd | d S )Nr   rk   BackForward)Z
_nav_stack_poslenZ	_elementsr   Zset_sensitive)r3   Zcan_backwardZcan_forwardr   r   r   set_history_buttons  s    

z*_NavigationToolbar2GTK.set_history_buttons)r=   r>   r?   rs   r~   r   r   r   r   r   rA   r   r   r4   r   ro      s   ro   c                   @   s   e Zd Zdd Zdd ZdS )RubberbandGTKc                 C   s   t |  d |||| d S r   )ro   r~   "_make_classic_style_pseudo_toolbar)r3   ry   rz   r{   r|   r   r   r   r~   %  s    zRubberbandGTK.draw_rubberbandc                 C   s   t |   d S r   )ro   r   r   r9   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   )ro   Zconfigure_subplotsra   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 u rd S zHzt   W n2 tyL   tj } |  rF| d q2 Y n0 W d a nd a 0 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@   loggingrO   rD   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=   _logrL   Zget_minor_versionZget_micro_versionZbackend_versionr   r   r'   r.   r/   rB   ro   ZRubberbandBaser   ZConfigureSubplotsBaser   r   r   r   r   r   <module>   s8    
$ +
