o
    tBh                     @   s   d Z ddlZddlZddlmZmZ ddlmZmZm	Z	 ddl
mZmZmZ eeZde e e f Zdadd Zd	d
 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ejZG dd deZdS )z)
Common code for GTK3 and GTK4 backends.
    N)backend_toolscbook)_BackendNavigationToolbar2	TimerBase)GioGLibGtkz%s.%s.%sc                 C   s$   |   D ]}|  qd| _d ad S NT)get_windowsclose_created_by_matplotlib_application)appwin r   w/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/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r=tj stdt	j
dtjja t ddd  t dt t   t  t S | a t S )	Nr   FzInvalid DISPLAY variablezorg.matplotlib.Matplotlib3activatec                  _   s   d S Nr   )argskwargsr   r   r   <lambda>7   s    z%_create_application.<locals>.<lambda>shutdown)r   r   Applicationget_defaultgetattrmpl_c_internal_utilsdisplay_is_validRuntimeErrorr	   newApplicationFlags
NON_UNIQUEconnectr   registerr   _setup_new_guiapp)r   r   r   r   _create_application)   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   r+   D   s   zTimerGTK.__init__c                 C   s   |    t| j| j| _d S r   )_timer_stopr   timeout_add	_interval	_on_timerr)   r,   r   r   r   _timer_startH   s   zTimerGTK._timer_startc                 C   s$   | j d urt| j  d | _ d S d S r   )r)   r   source_remover3   r   r   r   r/   N   s   

zTimerGTK._timer_stopc                 C   s"   | j d ur|   |   d S d S r   )r)   r/   r4   r3   r   r   r   _timer_set_intervalS   s   
zTimerGTK._timer_set_intervalc                    s$   t    | jr| jsdS d | _dS )NTF)r*   r2   	callbacks_singler)   r3   r-   r   r   r2   Y   s
   
zTimerGTK._on_timer)
__name__
__module____qualname____doc__r+   r4   r/   r6   r2   __classcell__r   r   r-   r   r(   A   s    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   markup_escape_textmessage
set_markup)r,   sescapedr   r   r   set_messagej   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   )int).0valr   r   r   
<listcomp>r   s    z:_NavigationToolbar2GTK.draw_rubberband.<locals>.<listcomp>)canvasfigurebboxheight_draw_rubberband)r,   eventx0y0x1y1rL   rectr   r   r   draw_rubberbandn   s
   z&_NavigationToolbar2GTK.draw_rubberbandc                 C   s   | j d  d S r   )rI   rM   r3   r   r   r   remove_rubberbandu      z(_NavigationToolbar2GTK.remove_rubberbandc              	   C   s`   dD ]+\}}| j |}|r-||j || jj|k W d    n1 s(w   Y  qd S )N))PanPAN)ZoomZOOM)_gtk_idsgethandler_block_signal_handler
set_activemodename)r,   ra   activebuttonr   r   r   _update_buttons_checkedx   s   z._NavigationToolbar2GTK._update_buttons_checkedc                       t  j|  |   d S r   )r*   panrd   r,   r   r-   r   r   rf         z_NavigationToolbar2GTK.panc                    re   r   )r*   zoomrd   rg   r-   r   r   ri      rh   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 r.| jd | d S d S )Nr      BackForward)
_nav_stack_poslen	_elementsr[   set_sensitive)r,   can_backwardcan_forwardr   r   r   set_history_buttons   s   

z*_NavigationToolbar2GTK.set_history_buttons)r9   r:   r;   rD   rT   rU   rd   rf   ri   rt   r=   r   r   r-   r   r>   e   s    r>   c                   @      e Zd Zdd Zdd ZdS )RubberbandGTKc                 C   s   t |  d |||| d S r   )r>   rT   "_make_classic_style_pseudo_toolbar)r,   rO   rP   rQ   rR   r   r   r   rT      s   zRubberbandGTK.draw_rubberbandc                 C   s   t |   d S r   )r>   rU   rw   r3   r   r   r   rU      s   zRubberbandGTK.remove_rubberbandN)r9   r:   r;   rT   rU   r   r   r   r   rv      s    rv   c                   @   ru   )ConfigureSubplotsGTKc                 C   s   | j |S r   )rI   r.   )r,   figr   r   r   _get_canvas   s   z ConfigureSubplotsGTK._get_canvasc                 G   s   t | d  d S r   )r>   configure_subplotsrg   r   r   r   trigger   rV   zConfigureSubplotsGTK.triggerN)r9   r:   r;   rz   r|   r   r   r   r   rx      s    rx   c                   @   s   e Zd Zedd ZdS )_BackendGTKc                  C   s`   t d u rd S z&zt   W n ty'   tj } |  r&| d |  s w W d a d S d a w r
   )r   runKeyboardInterruptr   MainContextdefaultpending	iteration)contextr   r   r   mainloop   s   


z_BackendGTK.mainloopN)r9   r:   r;   staticmethodr   r   r   r   r   r}      s    r}   ) r<   logging
matplotlibr   r   r   matplotlib.backend_basesr   r   r   gi.repositoryr   r   r	   	getLoggerr9   _logget_major_versionget_minor_versionget_micro_versionbackend_versionr   r   r'   r(   r>   RubberbandBaserv   ConfigureSubplotsBaseWindowrx   r}   r   r   r   r   <module>   s$    
$+
