o
    qee                     @   s   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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   RD:\Projects\ConvertPro\env\Lib\site-packages\matplotlib/backends/backend_macosx.pyr      s    r   c                       sl   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  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_idle7   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_funcE   s   z9FigureCanvasMac._single_shot_timer.<locals>.callback_funcr   )intervalTN)Z	new_timerZsingle_shotZadd_callbackr!   addstart)r"   r.   r0   r/   r   r'   r   r)   @   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*   O   s   

"zFigureCanvasMac._draw_idleNc                    s   t  | |   d S r   )r   blitr&   )r"   Zbboxr#   r   r   r4   _   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   resized   s   zFigureCanvasMac.resizer   )r   r   r   Zrequired_interactive_frameworkr   Z
_timer_clsr   ZclasspropertyZmanager_classr   r%   r+   r)   r*   r4   r9   __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>u   s    
z1NavigationToolbar2Mac.__init__.<locals>.<genexpr>c                 s   s    | ]	}|d ur|V  qd S r   r   )r=   Ztooltipr   r   r   r?   w   s    )r   _get_data_pathzipr   Z	toolitemsr   r   tuple)r"   canvas_ZtooltipsZimage_namesr   r>   r   r   p   s   
zNavigationToolbar2Mac.__init__c                 C   s&   | j t|t|t|t| d S r   )rC   Zset_rubberbandint)r"   eventZx0Zy0x1y1r   r   r   draw_rubberbandz   s   &z%NavigationToolbar2Mac.draw_rubberbandc                 C   s   | j   d S r   )rC   remove_rubberbandr'   r   r   r   rJ   }   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_filerC   Zget_default_filenamedirnamer   Zsavefig)r"   args	directoryfilenamer   r   r   save_figure   s   
z!NavigationToolbar2Mac.save_figureN)r   r   r   r   rI   rJ   rT   r   r   r   r   r;   n   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d | jd ur2| j  t
 rA|   | j  d S d S )NFzimages/matplotlib.pdfzmacosx.window_modesystem)_shownr   FigureManagerr   r<   r   r@   Zset_iconr
   Z_set_window_moderN   rO   getZtoolbarr&   is_interactiveshowrC   r+   )r"   rC   numZ	icon_pathr   r   r   r      s   

zFigureManagerMac.__init__c                 C   s   t |  | j  d S r   )r   destroyrC   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   )rC   r!   popr-   r   r\   )r"   r/   r#   r   r   r\      s
   zFigureManagerMac.destroyc              
      s  t t j}|d t jt jfv rt  d S d  t \}}|	d |	d t 
| }t|   fdd}t  t j| z%t  W |  |  t 
| t  t j|  d urf|   d S d S |  |  t 
| t  t j|  d ur|   w w )NFc                     s   |  t   d S r   )r   r-   )rQ   Zhandler_argsr   r   handle   s   z0FigureManagerMac.start_main_loop.<locals>.handle)signal	getsignalSIGINTSIG_IGNSIG_DFLr   rZ   socket
socketpairsetblockingset_wakeup_fdfilenoZwake_on_fd_writeclose)r   Zold_sigint_handlerZwsockZrsockZold_wakeup_fdr`   r   r_   r   start_main_loop   s8   





z FigureManagerMac.start_main_loopc                 C   s.   | j s
|   d| _ tjd r|   d S d S )NTzfigure.raise_window)rV   Z_showrN   rO   _raiser'   r   r   r   rZ      s   
zFigureManagerMac.show)r   r   r   r;   Z_toolbar2_classr   r]   r\   classmethodrl   rZ   r:   r   r   r#   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   rW   rl   Zmainloopr   r   r   r   ro      s    
ro   )rK   ra   rf   Z
matplotlibrN   r   r   Zmatplotlib._pylab_helpersr    r   Zbackend_aggr   Zmatplotlib.backend_basesr   r	   r
   r   r   r   Timerr   rp   r   r;   rW   r   Zexportro   r   r   r   r   <module>   s     ZF