o
    ¡:´aŒh  ã                
   @   sx  d dl Z d dlZd dlZd dlm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mZmZ d dlmZ d dlmZ d dlmZ zd dlZW n eyc Z zed	ƒe‚dZ[ww ze d
d¡ W n ey{ Z zee‚dZ[ww d dl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z-m.Z/m0Z1 e 2e3¡Z4ej5G dd„ dƒƒZ6e  7¡ dd„ ƒZ8G dd„ de$j9eƒZ:G dd„ deƒZ;G dd„ de+e$j<ƒZ=G dd„ dee$j>ƒZ?G dd„ de	j@ƒZAejBdddG d d!„ d!e	jCƒƒZDG d"d#„ d#e	jEƒZFG d$d%„ d%e	jGƒZHejId&krd'ZJnd(ZJeKe
 Ld)eJ¡ƒZMd.d*d+„ZNeAe	_Oe/e	_Pe1e	_QeFe	_ReHe	_Se?Z<ejTG d,d-„ d-e*ƒƒZUdS )/é    N)ÚPath)Ú_apiÚbackend_toolsÚcbook)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBaseÚToolContainerBase)ÚCursors)ÚFigure)ÚSubplotToolz#The GTK3 backends require PyGObjectÚGtkz3.0)ÚGioÚGLibÚGObjectr   ÚGdké   )Ú_create_applicationÚ_shutdown_applicationÚbackend_versionÚ_BackendGTKÚ_NavigationToolbar2GTKÚTimerGTKÚConfigureSubplotsGTKÚRubberbandGTKc                   @   s&   e Zd Zejdddedd„ ƒƒZdS )Ú__getattr__ú3.5Ú )Zobj_typec                 C   sx   z't  tjjtj ¡ ¡}tj|dƒtj	|dƒtj
|dƒtj|dƒtj|dƒiW S  ty; } zi W  Y d }~S d }~ww )NÚmoveÚpointerÚdefaultÚ	crosshairÚwait)Ú	functoolsÚpartialr   ÚCursorÚnew_from_nameÚDisplayÚget_defaultr   ÚMOVEÚHANDÚPOINTERÚSELECT_REGIONÚWAITÚ	TypeError)ÚselfZ
new_cursorÚexc© r4   úB/usr/lib/python3/dist-packages/matplotlib/backends/backend_gtk3.pyÚcursord.   s   ÿ




û€ÿz__getattr__.cursordN)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyr6   r4   r4   r4   r5   r   ,   s    r   c                 C   sL   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}t
j t
j ¡ |¡S )	Nr!   r"   r#   r$   r%   z	ew-resizez	ns-resize)Úcursor)r   Zcheck_getitemr   r,   r-   r.   r/   r0   ZRESIZE_HORIZONTALZRESIZE_VERTICALr   r(   r)   r*   r+   )Z
mpl_cursorÚnamer4   r4   r5   Ú_mpl_to_gtk_cursor?   s   ùø	r>   c                   @   s  e Zd ZdZeZejjejj	B ejj
B ejjB ejjB ejjB ejjB ejjB ejjB Zd/dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Z d!d"„ Z!d#d$„ Z"d%d&„ Z#d'd(„ Z$d)d*„ Z%d+d,„ Z&d-d.„ Z'dS )0ÚFigureCanvasGTK3Zgtk3Nc                 C   s<  t  | |¡ tj | ¡ d| _d | _d | _|  d| j¡ |  d| j¡ |  d| j	¡ |  d| j
¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d	| j¡ |  d
| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  d| j¡ |  | jj¡ |  d¡ t ¡ }| d¡ |  ¡ }| |tj¡ | d¡ d S )Nr   Úscroll_eventÚbutton_press_eventÚbutton_release_eventÚconfigure_eventzscreen-changedznotify::scale-factorÚdrawÚkey_press_eventÚkey_release_eventÚmotion_notify_eventÚleave_notify_eventÚenter_notify_eventÚsize_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)r   Ú__init__r   Ú_idle_draw_idZ_lastCursorÚ_rubberband_rectÚconnectr@   rA   rB   rC   Ú_update_device_pixel_ratioÚon_draw_eventÚ
_post_drawrE   rF   rG   rH   rI   rJ   Z
set_eventsÚ	__class__Ú
event_maskZset_can_focusr   ZCssProviderZload_from_dataZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_class)r2   ÚfigureZcssZ	style_ctxr4   r4   r5   rK   \   s4   

zFigureCanvasGTK3.__init__c                 C   s   |   ¡  d S ©N)Zclose_event©r2   r4   r4   r5   Údestroy}   s   zFigureCanvasGTK3.destroyc                 C   s<   |   d¡}|d ur| t|ƒ¡ tj ¡ }| d¡ d S d S )NÚwindowT)Úget_propertyÚ
set_cursorr>   r   ÚMainContextr#   Ú	iteration)r2   r<   rX   Úcontextr4   r4   r5   rZ   €   s   

ýzFigureCanvasGTK3.set_cursorc                 C   s*   |j | j }| jjj|j| j  }||fS )aI  
        Calculate mouse coordinates in physical pixels.

        GTK use logical pixels, but the figure is scaled to physical pixels for
        rendering.  Transform to physical pixels so that all of the down-stream
        transforms work as expected.

        Also, the origin is different and needs to be corrected.
        )ÚxÚdevice_pixel_ratiorT   ZbboxÚheightÚy)r2   Úeventr^   ra   r4   r4   r5   Ú_mouse_event_coordsˆ   s   
z$FigureCanvasGTK3._mouse_event_coordsc                 C   s<   |   |¡\}}|jtjjkrdnd}tj| ||||d dS )Nr   éÿÿÿÿ©ÚguiEventF)rc   Z	directionr   ZScrollDirectionZUPr   r@   )r2   Úwidgetrb   r^   ra   Ústepr4   r4   r5   r@   —   s   zFigureCanvasGTK3.scroll_eventc                 C   ó(   |   |¡\}}tj| |||j|d dS ©Nre   F)rc   r   rA   Úbutton©r2   rg   rb   r^   ra   r4   r4   r5   rA      ó
   ÿz#FigureCanvasGTK3.button_press_eventc                 C   ri   rj   )rc   r   rB   rk   rl   r4   r4   r5   rB   £   rm   z%FigureCanvasGTK3.button_release_eventc                 C   ó   |   |¡}tj| ||d dS ©Nre   T)Ú_get_keyr   rE   ©r2   rg   rb   Úkeyr4   r4   r5   rE   ©   ó   
z FigureCanvasGTK3.key_press_eventc                 C   rn   ro   )rp   r   rF   rq   r4   r4   r5   rF   ®   rs   z"FigureCanvasGTK3.key_release_eventc                 C   s$   |   |¡\}}tj| |||d dS rj   )rc   r   rG   rl   r4   r4   r5   rG   ³   s   z$FigureCanvasGTK3.motion_notify_eventc                 C   s   t  | |¡ d S rU   )r   rH   )r2   rg   rb   r4   r4   r5   rH   ¸   ó   z#FigureCanvasGTK3.leave_notify_eventc                 C   s&   |   |¡\}}tj| |||fd d S )N)rf   Zxy)rc   r   rI   rl   r4   r4   r5   rI   »   s   z#FigureCanvasGTK3.enter_notify_eventc                 C   sP   | j j}|j| j | }|j| j | }| j j||dd t | ¡ |  ¡  d S )NF©Zforward)	rT   ÚdpiÚwidthr_   r`   Úset_size_inchesr   Zresize_eventÚ	draw_idle)r2   rg   Z
allocationZdpivalZwinchZhinchr4   r4   r5   rJ   ¿   s   
zFigureCanvasGTK3.size_allocatec                 C   sŠ   t t |j¡ƒ}t |t |j¡¡}tjjdftjj	dftjj
dftjjdfg}|D ]\}}|j|@ rB|dkr;| ¡ sB|› d|› }q*|S )NZctrlZaltÚshiftÚsuperú+)Úchrr   Zkeyval_to_unicodeZkeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASKÚstateÚisprintable)r2   rb   Zunikeyrr   Ú	modifiersZkey_maskÚprefixr4   r4   r5   rp   Ç   s    
þ



ü
€zFigureCanvasGTK3._get_keyc                 O   s&   |   |  ¡ ¡r|  ¡  |  ¡  d S d S rU   )Z_set_device_pixel_ratioZget_scale_factorZqueue_resizeÚ
queue_draw)r2   ÚargsÚkwargsr4   r4   r5   rO   Ø   s   ûz+FigureCanvasGTK3._update_device_pixel_ratioc                 C   sd   |  d¡d u r	d S |j| j }|j| j }|dk s|dk rd S | jj}| jj|| || dd dS )NrX   é   Fru   )rY   rw   r_   r`   rT   rv   rx   )r2   rg   rb   ÚwÚhrv   r4   r4   r5   rC   â   s   z FigureCanvasGTK3.configure_eventc                 C   s   || _ |  ¡  d S rU   )rM   r‚   )r2   Zrectr4   r4   r5   Ú_draw_rubberbandî   s   z!FigureCanvasGTK3._draw_rubberbandc           	         sö   ˆ j d u rd S ‡ fdd„ˆ j D ƒ\}}}}|| }|| }| ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | ||¡ | d¡ | d¡ | dd¡ | ddd¡ | ¡  | dd¡ | ddd¡ | ¡  d S )Nc                 3   s    | ]}|ˆ j  V  qd S rU   )r_   )Ú.0ZdimrV   r4   r5   Ú	<genexpr>÷   s   € ÿz.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r…   r…   r   r…   )	rM   Zmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)	r2   rg   ÚctxZx0Zy0r†   r‡   Zx1Zy1r4   rV   r5   rQ   ó   s.   

ÿ

zFigureCanvasGTK3._post_drawc                 C   s   d S rU   r4   )r2   rg   r‹   r4   r4   r5   rP     s   zFigureCanvasGTK3.on_draw_eventc                 C   s   |   ¡ r
|  ¡  d S d S rU   )Zis_drawabler‚   rV   r4   r4   r5   rD     s   ÿzFigureCanvasGTK3.drawc                    s*   ˆ j dkrd S ‡ fdd„}t |¡ˆ _ d S )Nr   c                     s   z
ˆ   ¡  W dˆ _dS dˆ _w )Nr   F)rD   rL   ©rƒ   rV   r4   r5   Ú	idle_draw  s
   
ÿz-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rL   r   Zidle_add)r2   r   r4   rV   r5   ry     s   
zFigureCanvasGTK3.draw_idlec                 C   s,   t j ¡ }| ¡ r| d¡ | ¡ s	d S d S ©NT)r   r[   r#   Zpendingr\   )r2   r]   r4   r4   r5   Úflush_events&  s   

ÿzFigureCanvasGTK3.flush_eventsrU   )(r7   r8   r9   Zrequired_interactive_frameworkÚ	TimerGTK3Z
_timer_clsr   Z	EventMaskZBUTTON_PRESS_MASKZBUTTON_RELEASE_MASKZEXPOSURE_MASKZKEY_PRESS_MASKZKEY_RELEASE_MASKZENTER_NOTIFY_MASKZLEAVE_NOTIFY_MASKZPOINTER_MOTION_MASKZSCROLL_MASKrS   rK   rW   rZ   rc   r@   rA   rB   rE   rF   rG   rH   rI   rJ   rp   rO   rC   rˆ   rQ   rP   rD   ry   r   r4   r4   r4   r5   r?   M   sT    ÿþýüûúùø

!
r?   c                       s\   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚFigureManagerGTK3a9  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window

    c                    s|  t ƒ }t ¡ ˆ _| ˆ j¡ tƒ  ||¡ ˆ j dd¡ ˆ j t	¡ t 
¡ ˆ _ˆ j dtjj¡ ˆ j ˆ j¡ ˆ j ¡  ˆ j ¡  ˆ j ˆ jddd¡ ˆ j ¡ \}}ˆ  ¡ ˆ _ˆ jrit ˆ j¡ ˆ jrit ˆ j¡ ˆ jd ur‰ˆ j ¡  ˆ j ˆ jddd¡ ˆ j ¡ \}}||j7 }ˆ j ||¡ dˆ _ˆ j d‡ fdd	„¡ ˆ j d
‡ fdd	„¡ t  !¡ r·ˆ j ¡  ˆ j "¡  ˆ j #¡  d S )NÚ
matplotlibZ
MatplotlibÚorientationTr   FrW   c                     ó
   t  ˆ ¡S rU   ©r   rW   rŒ   rV   r4   r5   Ú<lambda>a  ó   
 z,FigureManagerGTK3.__init__.<locals>.<lambda>Zdelete_eventc                     r”   rU   r•   rŒ   rV   r4   r5   r–   b  r—   )$r   r   ZWindowrX   Z
add_windowr{   rK   Zset_wmclassZset_icon_from_fileÚwindow_iconÚBoxÚvboxÚset_propertyÚOrientationÚVERTICALÚaddÚshowÚcanvasÚ
pack_startZget_width_heightÚ_get_toolbarÚtoolbarÚtoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerÚpack_endZget_preferred_sizer`   Úset_default_sizeÚ_destroyingrN   ÚmplZis_interactivery   Z
grab_focus)r2   r    ZnumZappr†   r‡   Zmin_sizeZnat_size©rR   rV   r5   rK   =  s>   









zFigureManagerGTK3.__init__c                 G   sF   | j rd S d| _ | j ¡  | j ¡  | j ¡  | jr!| j ¡  d S d S rŽ   )r§   rš   rW   rX   r    r£   ©r2   rƒ   r4   r4   r5   rW   i  s   


ÿzFigureManagerGTK3.destroyc                 C   sH   | j  ¡  | j ¡  tjd r"| j  ¡ r| j  ¡  d S t 	d¡ d S d S )Nzfigure.raise_windowz#Cannot raise window yet to be setup)
rX   rŸ   r    rD   r¨   ÚrcParamsÚ
get_windowZpresentr   Zwarn_externalrV   r4   r4   r5   rŸ   w  s   



øzFigureManagerGTK3.showc                 C   s,   | j  | _ | j r| j ¡  d S | j ¡  d S rU   )Ú_full_screen_flagrX   Z
fullscreenZunfullscreenrV   r4   r4   r5   Úfull_screen_toggle…  s   
z$FigureManagerGTK3.full_screen_toggleFc                 C   sD   t jd dkrt| j| jƒ}|S t jd dkrt| jƒ}|S d }|S )Nr£   Ztoolbar2r¤   )r¨   r«   ÚNavigationToolbar2GTK3r    rX   ÚToolbarGTK3r¤   )r2   r£   r4   r4   r5   r¢     s   ü
ÿzFigureManagerGTK3._get_toolbarc                 C   s
   | j  ¡ S rU   )rX   Z	get_titlerV   r4   r4   r5   Úget_window_title˜  s   
z"FigureManagerGTK3.get_window_titlec                 C   ó   | j  |¡ d S rU   )rX   Z	set_title)r2   Útitler4   r4   r5   Úset_window_title›  rt   z"FigureManagerGTK3.set_window_titlec                 C   s„   t || jj ƒ}t || jj ƒ}| jr| j ¡ }||j7 }| j ¡ }|j|j  kr.dkr9n n	| j 	||¡ dS | j 
||¡ dS )zSet the canvas size in pixels.r   N)Úintr    r_   r£   Zsize_requestr`   Zget_allocationrw   rX   r¦   Úresize)r2   rw   r`   Ztoolbar_sizeZcanvas_sizer4   r4   r5   r¶   ž  s   


zFigureManagerGTK3.resize)r7   r8   r9   Ú__doc__rK   rW   rŸ   r®   r­   r¢   r±   r´   r¶   Ú__classcell__r4   r4   r©   r5   r‘   -  s    ,r‘   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r¯   c                 C   s\  || _ tj | ¡ |  tjj¡ i | _| jD ]Y\}}}}|d u r)|  	t 
¡ d¡ qtj tj tt d|› d¡ƒ¡tjj¡}|dv rGt ¡ nt ¡  | j|< }| |¡ | |¡ | dt| |ƒ¡|_| |¡ |  	|d¡ qt ¡ }	|  	|	d¡ t ¡ }
|
 d¡ |	  d¡ |	 !|
¡ t ¡ }	|  	|	d¡ t ¡ | _"|	 !| j"¡ |  #¡  t$ | |¡ d S )Nrd   Úimagesú-symbolic.svg)ZzoomZpanÚclickedu   <small>Â 
Â </small>T)%Úwinr   rK   Ú	set_styler   ÚToolbarStyleÚICONSZ_gtk_idsZ	toolitemsÚinsertZSeparatorToolItemÚImageÚnew_from_giconr   ÚIconÚnew_for_stringÚstrr   Ú_get_data_pathÚIconSizeÚLARGE_TOOLBARÚToggleToolButtonÚ
ToolButtonÚ	set_labelÚset_icon_widgetrN   ÚgetattrZ_signal_handlerÚset_tooltip_textZToolItemÚLabelZ
set_markupZ
set_expandrž   ÚmessageÚshow_allr
   )r2   r    rX   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimagerk   ÚtoolitemZlabelr4   r4   r5   rK   ±  sP   ÿÿüþ


ÿ
ÿ


zNavigationToolbar2GTK3.__init__c           
   
      sŽ  t jdˆj ¡ t jjt jt jjt j	t jj
fd‰ ˆj ¡  ¡ D ]+\}}t  ¡ }| |¡ |D ]
}| d|› ¡ q.ˆ  |¡ ˆj ¡ |v rJˆ  |¡ qt ˆ jd¡‡ ‡fdd„ƒ}ˆ  tjd ¡ ˆ  ˆj ¡ ¡ ˆ  d¡ ˆ  ¡ }ˆ  ¡ }ˆ  ¡ }ˆj ¡ | ¡  d	 }ˆ   ¡  |t jj
kr‘d S tjd rŸt!j" #|¡tjd< zˆjj$j%||d
 W d S  t&yÆ }	 zt't(|	ƒˆd W Y d }	~	d S d }	~	ww )NzSave the figure)r³   ÚparentÚactionÚbuttonsz*.znotify::filterc                     sD   ˆ   ¡  ¡ }ˆj ¡ | d }ˆ  ttˆ  ¡ ƒ d|› ¡ƒ¡ d S )Nr   Ú.)	Ú
get_filterÚget_namer    Úget_supported_filetypes_groupedÚset_current_namerÅ   r   Zget_current_nameZwith_suffix)rƒ   r=   Úfmt©Údialogr2   r4   r5   Úon_notify_filteró  s
   ÿz<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )Úformat)r×   ))r   ZFileChooserDialogr    Úget_toplevelZFileChooserActionZSAVEZSTOCK_CANCELZResponseTypeZCANCELZ
STOCK_SAVEÚOKrÝ   ÚitemsZ
FileFilterZset_nameZadd_patternZ
add_filterZget_default_filetypeZ
set_filterr&   r'   rN   Zset_current_folderr¨   r«   rÞ   Zget_default_filenameZset_do_overwrite_confirmationÚrunÚget_filenamerÛ   rÜ   rW   ÚosÚpathÚdirnamerT   ZsavefigÚ	ExceptionÚerror_msg_gtkrÅ   )
r2   rƒ   r=   ZfmtsZffrß   râ   ZresponseÚfnameÚer4   rà   r5   Úsave_figureá  sL   

ÿü
ÿ


€

€ÿz"NavigationToolbar2GTK3.save_figureN)r7   r8   r9   rK   rð   r4   r4   r4   r5   r¯   °  s    0r¯   c                   @   sP   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )r°   rº   c                 C   s\   t  | |¡ tj | ¡ |  dtjj¡ t ¡ | _|  	| jddd¡ |  
¡  i | _i | _d S )Nr“   Fr   )r   rK   r   r™   r›   rœ   Z
HORIZONTALrÏ   Ú_messager¥   rÑ   Ú_groupsÚ
_toolitems)r2   r¤   r4   r4   r5   rK     s   

zToolbarGTK3.__init__c           
      C   s®   |rt  ¡ }nt  ¡ }| |¡ |d ur&t j tj |¡t j	j
¡}| |¡ |d u r,d}|  |||¡ | d| j|¡}	| |¡ | ¡  | j |g ¡ | j|  ||	f¡ d S )Nrd   r»   )r   rÉ   rÊ   rË   rÁ   rÂ   r   rÃ   rÄ   rÇ   rÈ   rÌ   Ú_add_buttonrN   Ú
_call_toolrÎ   rÑ   ró   Ú
setdefaultÚappend)
r2   r=   ÚgroupÚpositionrÓ   ÚdescriptionZtogglerk   rÕ   Úsignalr4   r4   r5   Úadd_toolitem  s$   


þ

zToolbarGTK3.add_toolitemc                 C   sf   || j vr(| j r|  ¡  t ¡ }| tjj¡ |  |ddd¡ | ¡  || j |< | j |  	||¡ d S )NFr   )
rò   Ú_add_separatorr   ÚToolbarr½   r¾   r¿   r¡   rÑ   rÀ   )r2   rk   rø   rù   r£   r4   r4   r5   rô   3  s   

zToolbarGTK3._add_buttonc                 C   s   |   |¡ d S rU   )Ztrigger_tool)r2   Zbtnr=   r4   r4   r5   rõ   >  s   zToolbarGTK3._call_toolc                 C   sD   || j vrd S | j | D ]\}}| |¡ | |¡ | |¡ qd S rU   )ró   Zhandler_blockZ
set_activeZhandler_unblock)r2   r=   ZtoggledrÖ   rû   r4   r4   r5   Útoggle_toolitemA  s   


ýzToolbarGTK3.toggle_toolitemc                 C   sl   || j vr| j |› d| ¡ d S | jD ]}| j | D ]\}}|| j| v r.| j|  |¡ qq| j |= d S )Nz not in toolbar)ró   r¤   Zmessage_eventrò   Úremove)r2   r=   rø   rÖ   Z_signalr4   r4   r5   Úremove_toolitemI  s   

€þzToolbarGTK3.remove_toolitemc                 C   s4   t  ¡ }| dt jj¡ |  |ddd¡ | ¡  d S )Nr“   FTr   )r   Z	Separatorr›   rœ   r   r¡   rÑ   )r2   Úsepr4   r4   r5   rý   T  s   zToolbarGTK3._add_separatorc                 C   r²   rU   )rñ   rË   )r2   Úsr4   r4   r5   Úset_messageZ  rt   zToolbarGTK3.set_messageN)r7   r8   r9   Z_icon_extensionrK   rü   rô   rõ   rÿ   r  rý   r  r4   r4   r4   r5   r°     s    
r°   c                   @   ó   e Zd Zdd„ ZdS )ÚSaveFigureGTK3c                    s   G ‡ fdd„dƒ}t  |ƒ ¡S )Nc                       s   e Zd Z” jjZdS )z-SaveFigureGTK3.trigger.<locals>.PseudoToolbarN)r7   r8   r9   rT   r    r4   rV   r4   r5   ÚPseudoToolbara  ó    r  )r¯   rð   )r2   rƒ   r„   r  r4   rV   r5   Útrigger_  s   zSaveFigureGTK3.triggerN©r7   r8   r9   r	  r4   r4   r4   r5   r  ^  r  r  r   ZToolSetCursor)Zalternativec                   @   r  )ÚSetCursorGTK3c                 C   s   t  |  ¡ |¡ d S rU   )r¯   rZ   Z"_make_classic_style_pseudo_toolbar)r2   r<   r4   r4   r5   rZ   i  s   ÿzSetCursorGTK3.set_cursorN)r7   r8   r9   rZ   r4   r4   r4   r5   r  g  s    r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚHelpGTK3c                 C   s~   dddddœ}|  d¡}dd„ |d	d
… D ƒ}|d
 }||v r$|| }nt|ƒdkr/| ¡ }n	| ¡ r8|dg7 }d |¡| S )z‚
        Convert Matplotlib key presses to GTK+ accelerator identifiers.

        Related to `FigureCanvasGTK3._get_key`.
        Z	BackSpaceZ	Page_DownZPage_UpZScroll_Lock)Z	backspaceZpagedownZpageupZscroll_lockr|   c                 S   s   g | ]}d | d ‘qS )ú<ú>r4   )r‰   Úmodr4   r4   r5   Ú
<listcomp>}  s    z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nrd   r   z<shift>r    )ÚsplitÚlenÚ
capitalizeÚisupperÚjoin)r2   rr   ZspecialÚpartsZmodsr4   r4   r5   Ú_normalize_shortcuto  s   ü



zHelpGTK3._normalize_shortcutc                 C   s   d|vo	|  d¡ S )zÖ
        Check for a valid shortcut to be displayed.

        - GTK will never send 'cmd+' (see `FigureCanvasGTK3._get_key`).
        - The shortcut window only shows keyboard shortcuts, not mouse buttons.
        zcmd+zMouseButton.)Ú
startswith)r2   rr   r4   r4   r5   Ú_is_valid_shortcut‰  s   zHelpGTK3._is_valid_shortcutc                    s¼   t  ¡ }tˆ jj ¡ ƒD ]6\}}|jsqt  ¡ }| |¡ | 	dd„ d ¡ t j
d ‡ fdd„ˆ j |¡D ƒ¡|j|jd}| |¡ qt jddˆ jj ¡ d	}| ¡  | |¡ | ¡  d S )
Nc                 S   s
   |   d¡S )NF)Zset_visible)rg   Údatar4   r4   r5   r–      r—   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c                 3   s$    | ]}ˆ   |¡rˆ  |¡V  qd S rU   )r  r  )r‰   rr   rV   r4   r5   rŠ   £  s   € ý
ÿz2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorr³   ZsubtitleÚHelpT)r³   ZmodalZtransient_for)r   ZShortcutsSectionÚsortedr¤   Ztoolsræ   rú   ZShortcutsGrouprž   ZforallZShortcutsShortcutr  Zget_tool_keymapr=   ZShortcutsWindowÚ_figurer    rä   rŸ   rÑ   )r2   Úsectionr=   Ztoolrø   ZshortcutrX   r4   rV   r5   Ú_show_shortcuts_window’  s.   

þú
ý
zHelpGTK3._show_shortcuts_windowc                 C   s>   t j| jj ¡ dt jjt jj|  	¡ dd}| 
¡  | ¡  d S )Nr   r  )r³   )r   ÚMessageDialogr  r    rä   ÚMessageTypeÚINFOÚButtonsTyperå   Z_get_help_textrç   rW   )r2   rá   r4   r4   r5   Ú_show_shortcuts_dialog´  s   
ýzHelpGTK3._show_shortcuts_dialogc                 G   s*   t  ddd¡d u r|  ¡  d S |  ¡  d S )Nr…   é   r   )r   Zcheck_versionr   r%  rª   r4   r4   r5   r	  ¼  s   zHelpGTK3.triggerN)r7   r8   r9   r  r  r   r%  r	  r4   r4   r4   r5   r  n  s    	"r  c                   @   r  )ÚToolCopyToClipboardGTK3c           
      O   sH   t j tj¡}| j ¡ }| ¡ \}}}}t |||||¡}	| 	|	¡ d S rU   )
r   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr    r¬   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r2   rƒ   r„   Z	clipboardrX   r^   ra   rw   r`   Zpbr4   r4   r5   r	  Ä  s
   
zToolCopyToClipboardGTK3.triggerNr
  r4   r4   r4   r5   r'  Ã  r  r'  Úwin32zmatplotlib.pngzmatplotlib.svgr¹   c                 C   sd   |d ur|  ¡ }| ¡ sd }t| tƒsd tt| ƒ¡} tj|tjj	tj
j| d}| ¡  | ¡  d S )Nú,)r×   ÚtyperÙ   Zmessage_format)rä   Zis_toplevelÚ
isinstancerÅ   r  Úmapr   r!  r"  ZERRORr$  rå   rç   rW   )Úmsgr×   rá   r4   r4   r5   rí   Ô  s   
þrí   c                   @   s   e Zd ZeZeZdS )Ú_BackendGTK3N)r7   r8   r9   r?   ZFigureCanvasr‘   ZFigureManagerr4   r4   r4   r5   r/  ë  s    r/  rU   )Vr&   Zloggingré   Zpathlibr   Úsysr’   r¨   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r	   r
   r   r   Zmatplotlib.backend_toolsr   Zmatplotlib.figurer   Zmatplotlib.widgetsr   ZgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorrï   Zgi.repositoryr   r   r   r   r   Z_backend_gtkr   r   r   r   r   r   r   r   ZConfigureSubplotsGTK3r   ZRubberbandGTK3Z	getLoggerr7   Z_logZcaching_module_getattrr   Ú	lru_cacher>   ZDrawingArear?   r‘   rþ   r¯   r™   r°   ZSaveFigureBaser  r:   ZSetCursorBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser'  ÚplatformZicon_filenamerÅ   rÆ   r˜   rí   ZToolSaveFigureZToolConfigureSubplotsZToolRubberbandZToolHelpZToolCopyToClipboardZexportr/  r4   r4   r4   r5   Ú<module>   sn     
€ÿ€ý(
	
 a ^P	U

