o
    i?"                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 ddl
mZ ddlmZ d dlmZmZmZmZmZmZ G dd	 d	ejeZG d
d deejeZG dd dejeZG dd dejeZe jdd ZejG dd deZdS )    N)_apicbook)Gcf   )_macosx)FigureCanvasAgg)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2ResizeEvent	TimerBasec                   @   s   e Zd ZdZdS )TimerMacz6Subclass of `.TimerBase` using CFRunLoop timer events.N)__name__
__module____qualname____doc__ r   r   q/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/matplotlib/backends/backend_macosx.pyr      s    r   c                       sv   e Zd ZdZeZedd Z fddZ	 fddZ
dd	 Zd
d Zdd Zd fdd	Zdd ZdddZ  ZS )FigureCanvasMacmacosxc                 C   s   t S N)FigureManagerMacclsr   r   r   <lambda>%   s    zFigureCanvasMac.<lambda>c                    s&   t  j|d d| _d| _t | _d S )N)figureF)super__init___draw_pending_is_drawingset_timers)selfr   	__class__r   r   r   '   s   zFigureCanvasMac.__init__c                    sN   | j rdS tj| dd t   W d   n1 sw   Y  |   dS )z/Render the figure and update the macosx canvas.NT)r    )r    r   Z_setattr_cmr   drawupdater#   r$   r   r   r&   .   s   zFigureCanvasMac.drawc                 C   s6   t | ddst | ddsd| _| | j d S d S d S )Nr   Fr    T)getattrr   _single_shot_timer
_draw_idler(   r   r   r   	draw_idle8   s   
zFigureCanvasMac.draw_idlec                    sD    fdd} j dd}d|_||||  j| |  dS )z/Add a single shot timer with the given callbackc                    s   |    j | |  d S r   )r"   removestop)callbacktimerr(   r   r   callback_funcF   s   z9FigureCanvasMac._single_shot_timer.<locals>.callback_funcr   )intervalTN)Z	new_timerZsingle_shotZadd_callbackr"   addstart)r#   r/   r1   r0   r   r(   r   r*   A   s   z"FigureCanvasMac._single_shot_timerc                 C   sT   |    | js	 W d   dS d| _|   W d   dS 1 s#w   Y  dS )a	  
        Draw method for singleshot timer

        This draw method can be added to a singleshot timer, which can
        accumulate draws while the eventloop is spinning. This method will
        then only draw the first time and short-circuit the others.
        NF)Z_idle_draw_cntxr   r&   r(   r   r   r   r+   P   s   

"zFigureCanvasMac._draw_idleNc                    s   t  | |   d S r   )r   blitr'   )r#   Zbboxr$   r   r   r5   `   s   zFigureCanvasMac.blitc                 C   sJ   | j j| j }|| }|| }| j j||dd td|   |   d S )NF)forwardZresize_event)r   ZdpiZdevice_pixel_ratioZset_size_inchesr   Z_processr,   )r#   widthheightscaler   r   r   resizee   s   zFigureCanvasMac.resizer   c                 C   s8   t   | j|d W d    d S 1 sw   Y  d S )N)timeout)_maybe_allow_interruptZ_start_event_loop)r#   r;   r   r   r   start_event_loopn   s   "z FigureCanvasMac.start_event_loopr   )r   )r   r   r   Zrequired_interactive_frameworkr   Z
_timer_clsr   ZclasspropertyZmanager_classr   r&   r,   r*   r+   r5   r:   r=   __classcell__r   r   r$   r   r      s    
		r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
NavigationToolbar2Macc                    s^   t d ttj \}}}}tj| |t fdd|D tdd |D  t| | d S )NZimagesc                 3   s(    | ]}|d urt  | d V  qd S )Nz.pdf)str).0Z
image_nameZ	data_pathr   r   	<genexpr>}   s    
z1NavigationToolbar2Mac.__init__.<locals>.<genexpr>c                 s   s    | ]	}|d ur|V  qd S r   r   )rA   Ztooltipr   r   r   rC      s    )r   _get_data_pathzipr   Z	toolitemsr   r   tuple)r#   canvas_ZtooltipsZimage_namesr   rB   r   r   x   s   
zNavigationToolbar2Mac.__init__c                 C   s&   | j t|t|t|t| d S r   )rG   Zset_rubberbandint)r#   eventZx0Zy0x1y1r   r   r   draw_rubberband   s   &z%NavigationToolbar2Mac.draw_rubberbandc                 C   s   | j   d S r   )rG   remove_rubberbandr(   r   r   r   rN      s   z'NavigationToolbar2Mac.remove_rubberbandc                 G   s`   t jtjd }td|| j }|d u rd S tjd r't j	|tjd< | jj
| d S )Nzsavefig.directoryzSave the figure)ospath
expandusermplrcParamsr   Zchoose_save_filerG   Zget_default_filenamedirnamer   Zsavefig)r#   args	directoryfilenamer   r   r   save_figure   s   
z!NavigationToolbar2Mac.save_figureN)r   r   r   r   rM   rN   rX   r   r   r   r   r?   v   s
    
r?   c                       sD   e Zd ZeZdd Zdd Z fddZedd Z	d	d
 Z
  ZS )r   c                 C   s   d| _ tj| | ttd}tj| t| || | 	t
jd  | jd ur0| j  t
 r?|   | j  d S d S )NFzimages/matplotlib.pdfzmacosx.window_mode)_shownr   FigureManagerr   r@   r   rD   Zset_iconr
   Z_set_window_moderR   rS   Ztoolbarr'   is_interactiveshowrG   r,   )r#   rG   numZ	icon_pathr   r   r   r      s   

zFigureManagerMac.__init__c                 C   s   t |  | j  d S r   )r   destroyrG   Zflush_eventsr(   r   r   r   _close_button_pressed   s   
z&FigureManagerMac._close_button_pressedc                    s2   | j jr| j j }|  | j jst   d S r   )rG   r"   popr.   r   r^   )r#   r0   r$   r   r   r^      s
   zFigureManagerMac.destroyc                 C   s4   t   t  W d    d S 1 sw   Y  d S r   )r<   r   r\   r   r   r   r   start_main_loop   s   
"z FigureManagerMac.start_main_loopc                 C   s.   | j s
|   d| _ tjd r|   d S d S )NTzfigure.raise_window)rY   Z_showrR   rS   _raiser(   r   r   r   r\      s   
zFigureManagerMac.show)r   r   r   r?   Z_toolbar2_classr   r_   r^   classmethodra   r\   r>   r   r   r$   r   r      s    
r   c               
   #   s
   t t j} | dt jt jfv rdV  dS d t \}}|d |d t |	 }t
|	   fdd}t  t j| z$dV  W |  |  t | t  t j|   dure|    dS dS |  |  t | t  t j|   dur|    w w )a  
    This manager allows to terminate a plot by sending a SIGINT. It is
    necessary because the running backend prevents Python interpreter to
    run and process signals (i.e., to raise KeyboardInterrupt exception). To
    solve this one needs to somehow wake up the interpreter and make it close
    the plot window. The implementation is taken from qt_compat, see that
    docstring for a more detailed description.
    NFc                     s   |  t   d S r   )r   r.   )rU   Zhandler_argsr   r   handle   s   z&_maybe_allow_interrupt.<locals>.handle)signal	getsignalSIGINTSIG_IGNSIG_DFLsocket
socketpairsetblockingset_wakeup_fdfilenor   Zwake_on_fd_writeclose)Zold_sigint_handlerZwsockZrsockZold_wakeup_fdre   r   rd   r   r<      s:   





r<   c                   @   s   e Zd ZeZeZejZdS )_BackendMacN)	r   r   r   r   FigureCanvasr   rZ   ra   Zmainloopr   r   r   r   rq      s    
rq   ) 
contextlibrO   rf   rk   Z
matplotlibrR   r   r   Zmatplotlib._pylab_helpersr    r   Zbackend_aggr   Zmatplotlib.backend_basesr   r	   r
   r   r   r   Timerr   rr   r   r?   rZ   r   contextmanagerr<   Zexportrq   r   r   r   r   <module>   s$     a,
&