U
    d»{jîY  ã                
   @   st  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mZmZmZmZmZmZ d dlmZ zd dlZW n, ek
r° Z zedƒe‚W 5 dZ[X Y nX ze dd¡ W n( ek
rê Z z
ee‚W 5 dZ[X Y nX d d	lmZmZ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( e )e*¡Z+ej,G dd„ dƒƒZ-e  .¡ dd„ ƒZ/G dd„ deej0ƒZ1G dd„ de%ej2ƒZ3G dd„ deej4ƒZ5e	 6e1¡G dd„ de	j7ƒƒZ8ej9ddd�G dd„ de	j:ƒƒZ;e	 6e1¡G dd „ d e	j<ƒƒZ=e	 6e1¡G d!d"„ d"e	j>ƒƒZ?e 9d#¡d*d$d%„ƒZ@e5Z2e	 6e1e"jA¡ e	 6e1e"jB¡ G d&d'„ d'e$ƒZCe#jDG d(d)„ d)e#ƒƒZEdS )+é    N)ÚPath)Ú_apiÚbackend_toolsÚcbook)ÚFigureCanvasBaseÚToolContainerBaseÚ
CloseEventÚKeyEventÚLocationEventÚ
MouseEventÚResizeEvent)ÚCursorsz#The GTK3 backends require PyGObjectÚGtkz3.0)ÚGioÚGLibÚGObjectr   ÚGdké   )Ú_backend_gtk)Ú_BackendGTKÚ_FigureManagerGTKÚ_NavigationToolbar2GTKÚTimerGTK)Úbackend_versionc                   @   sZ   e Zd Zejddd�edd„ ƒƒZejddd�edd„ ƒƒZejddd�ed	d„ ƒƒZd
S )Ú__getattr__ú3.5Ú )Úobj_typec                 C   sl   zNt  tjjtj ¡ ¡}tj|dƒtj	|dƒtj
|dƒtj|dƒtj|dƒiW S  tk
rf   i  Y S X d S )NÚmoveZpointerÚdefaultZ	crosshairÚwait)Ú	functoolsÚpartialr   ÚCursorÚnew_from_nameÚDisplayÚget_defaultr   ZMOVEZHANDZPOINTERZSELECT_REGIONZWAITÚ	TypeError)ÚselfZ
new_cursor© r)   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/matplotlib/backends/backend_gtk3.pyÚcursord*   s$     ÿ     ûz__getattr__.cursordú3.6c                 C   s   t jdkrdS dS )NÚwin32zmatplotlib.pngzmatplotlib.svg)ÚsysÚplatform©r(   r)   r)   r*   Ú<lambda>;   s    z__getattr__.<lambda>c                 C   s   t t dtdƒ¡ƒS )NÚimagesÚicon_filename)Ústrr   Ú_get_data_pathr   r0   r)   r)   r*   r1   >   s    N)	Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyr+   r3   Zwindow_iconr)   r)   r)   r*   r   (   s   ÿÿr   c                 C   s   t j t j ¡ t | ¡¡S ©N)r   r#   r$   r%   r&   r   Zmpl_to_gtk_cursor_name)Z
mpl_cursorr)   r)   r*   Ú_mpl_to_gtk_cursorB   s    þr<   c                       s&  e Zd ZdZeZe dd„ ¡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d1‡ fdd„	Zdd„ Zd	d
„ Zd2d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/d0„ Z*‡  Z+S )3ÚFigureCanvasGTK3Zgtk3c                 C   s   t S r;   )ÚFigureManagerGTK3)Úclsr)   r)   r*   r1   L   ó    zFigureCanvasGTK3.<lambda>Nc                    s,  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 )N)Úfigurer   Ú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Úenter_notify_eventÚleave_notify_eventÚsize_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)ÚsuperÚ__init__Ú_idle_draw_idÚ_rubberband_rectÚconnectrB   rC   rD   rE   Ú_update_device_pixel_ratioÚon_draw_eventÚ
_post_drawrG   rH   rI   rJ   rK   rL   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)r(   rA   ÚcssZ	style_ctx©rU   r)   r*   rN   Y   s0    

zFigureCanvasGTK3.__init__c                 C   s   t d| ƒ ¡  d S )NZclose_event)r   Ú_processr0   r)   r)   r*   Údestroyx   s    zFigureCanvasGTK3.destroyc                 C   s8   |   d¡}|d k	r4| t|ƒ¡ tj ¡ }| d¡ d S )NÚwindowT)Úget_propertyÚ
set_cursorr<   r   ÚMainContextr   Ú	iteration)r(   Úcursorr[   Úcontextr)   r)   r*   r]   {   s
    

zFigureCanvasGTK3.set_cursorc                 C   sd   |dkr0|   ¡ }| | ¡  ¡  ¡ ¡\}}}}n|j|j }}|| j }| jj	j
|| j  }||fS )a—  
        Convert the position of a GTK event, or of the current cursor position
        if *event* is None, to Matplotlib coordinates.

        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.
        N)Ú
get_windowZget_device_positionZget_displayZget_device_managerZget_client_pointerÚxÚyÚdevice_pixel_ratiorA   ZbboxÚheight)r(   Úeventr[   Útrc   rd   Ústater)   r)   r*   Ú_mpl_coordsƒ   s    ÿ
zFigureCanvasGTK3._mpl_coordsc                 C   s<   |j tjjkrdnd}td| f|  |¡ž||dœŽ ¡  dS )Nr   éÿÿÿÿrB   )ÚstepÚguiEventF)Ú	directionr   ZScrollDirectionZUPr   rj   rY   )r(   Úwidgetrg   rl   r)   r)   r*   rB   ™   s
    ÿzFigureCanvasGTK3.scroll_eventc                 C   s*   t d| f|  |¡|jfžd|iŽ ¡  dS )NrC   rm   F©r   rj   ÚbuttonrY   ©r(   ro   rg   r)   r)   r*   rC   Ÿ   s     ÿþ
z#FigureCanvasGTK3.button_press_eventc                 C   s*   t d| f|  |¡|jfžd|iŽ ¡  dS )NrD   rm   Frp   rr   r)   r)   r*   rD   ¥   s     ÿþ
z%FigureCanvasGTK3.button_release_eventc                 C   s*   t d| |  |¡f|  ¡ žd|iŽ ¡  dS )NrG   rm   T©r	   Ú_get_keyrj   rY   rr   r)   r)   r*   rG   «   s    ÿÿþ
z FigureCanvasGTK3.key_press_eventc                 C   s*   t d| |  |¡f|  ¡ žd|iŽ ¡  dS )NrH   rm   Trs   rr   r)   r)   r*   rH   ±   s    ÿÿþ
z"FigureCanvasGTK3.key_release_eventc                 C   s$   t d| f|  |¡žd|iŽ ¡  dS )NrI   rm   F)r   rj   rY   rr   r)   r)   r*   rI   ·   s    ÿ
z$FigureCanvasGTK3.motion_notify_eventc                 C   s$   t d| f|  |¡žd|iŽ ¡  d S )NZfigure_enter_eventrm   ©r
   rj   rY   rr   r)   r)   r*   rJ   ¼   s    ÿz#FigureCanvasGTK3.enter_notify_eventc                 C   s$   t d| f|  |¡žd|iŽ ¡  d S )NZfigure_leave_eventrm   ru   rr   r)   r)   r*   rK   À   s    ÿz#FigureCanvasGTK3.leave_notify_eventc                 C   sT   | j j}|j| j | }|j| j | }| j j||dd� td| ƒ ¡  |  ¡  d S )NF©ÚforwardZresize_event)	rA   ÚdpiÚwidthre   rf   Úset_size_inchesr   rY   Ú	draw_idle)r(   ro   Z
allocationZdpivalZwinchZhinchr)   r)   r*   rL   Ä   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 ]0\}}|j|@ rT|dkrv| ¡ sT|› d|› �}qT|S )NZctrlZaltÚshiftrM   ú+)Úchrr   Zkeyval_to_unicodeÚkeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASKri   Úisprintable)r(   rg   ZunikeyÚkeyÚ	modifiersZkey_maskÚprefixr)   r)   r*   rt   Ì   s    
þ



ü
zFigureCanvasGTK3._get_keyc                 O   s"   |   |  ¡ ¡r|  ¡  |  ¡  d S r;   )Z_set_device_pixel_ratioZget_scale_factorZqueue_resizeÚ
queue_draw©r(   ÚargsÚkwargsr)   r)   r*   rR   Ý   s    z+FigureCanvasGTK3._update_device_pixel_ratioc                 C   sd   |  d¡d krd S |j| j }|j| j }|dk s:|dk r>d S | jj}| jj|| || dd� dS )Nr[   é   Frv   )r\   ry   re   rf   rA   rx   rz   )r(   ro   rg   ÚwÚhrx   r)   r)   r*   rE   ç   s    z FigureCanvasGTK3.configure_eventc                 C   s   || _ |  ¡  d S r;   )rP   r„   )r(   Úrectr)   r)   r*   Ú_draw_rubberbandó   s    z!FigureCanvasGTK3._draw_rubberbandc           	         sö   ˆ j d k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 r;   )re   )Ú.0Údimr0   r)   r*   Ú	<genexpr>ü   s   ÿz.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )rˆ   rˆ   r   rˆ   )	rP   Úmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveÚstroke)	r(   ro   ÚctxZx0Zy0r‰   rŠ   Úx1Úy1r)   r0   r*   rT   ø   s.    

ÿ

zFigureCanvasGTK3._post_drawc                 C   s   d S r;   r)   )r(   ro   r’   r)   r)   r*   rS     s    zFigureCanvasGTK3.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S r;   )Zis_drawabler„   r0   r)   r)   r*   rF     s    zFigureCanvasGTK3.drawc                    s*   ˆ j dkrd S ‡ fdd„}t |¡ˆ _ d S )Nr   c                     s   zˆ  ¡  W 5 dˆ _ X dS )Nr   F)rO   rF   )r†   r0   r)   r*   Ú	idle_draw#  s    z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rO   r   Zidle_add)r(   r•   r)   r0   r*   r{     s    
zFigureCanvasGTK3.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S )NT)r   r^   r   Úpendingr_   )r(   ra   r)   r)   r*   Úflush_events+  s    
zFigureCanvasGTK3.flush_events)N)N),r6   r7   r8   Zrequired_interactive_frameworkÚ	TimerGTK3Z
_timer_clsr   ZclasspropertyZmanager_classr   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_MASKrV   rN   rZ   r]   rj   rB   rC   rD   rG   rH   rI   rJ   rK   rL   rt   rR   rE   rŒ   rT   rS   rF   r{   r—   Ú__classcell__r)   r)   rX   r*   r=   I   sT   ÿþýüûúùø


r=   c                   @   s@   e Zd Ze dd¡d
dd„ƒZe d¡edd„ ƒƒZdd	„ Z	dS )ÚNavigationToolbar2GTK3r,   r[   Nc                 C   sl  || _ tj | ¡ |  tjj¡ i | _| jD ]²\}}}}|d krR|  	t 
¡ d¡ q,tj tj tt d|› d�¡ƒ¡tjj¡}|dkrŽt ¡ nt ¡  | j|< }| |¡ | |¡ | dt| |ƒ¡|_| |¡ |  	|d¡ q,t ¡ }	|  	|	d¡ t ¡ }
|
 d¡ |	  d¡ |	 !|
¡ t ¡ }	|  	|	d¡ t ¡ | _"| j" #tj$j%¡ |	 !| j"¡ |  &¡  t' | |¡ d S )Nrk   r2   ú-symbolic.svg)ZzoomÚpanÚclickedu   <small>Â 
Â </small>T)(Ú_winr   rN   Ú	set_styler   ÚToolbarStyleÚICONSZ_gtk_idsZ	toolitemsÚinsertZSeparatorToolItemÚImageÚnew_from_giconr   ÚIconÚnew_for_stringr4   r   r5   ÚIconSizeÚLARGE_TOOLBARÚToggleToolButtonÚ
ToolButtonÚ	set_labelÚset_icon_widgetrQ   ÚgetattrZ_signal_handlerÚset_tooltip_textZToolItemÚLabelZ
set_markupZ
set_expandÚaddÚmessageÚset_justifyÚJustificationÚRIGHTÚshow_allr   )r(   Úcanvasr[   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimagerq   ÚtoolitemÚlabelr)   r)   r*   rN   3  sT    ÿÿüþ

 ÿ
ÿ


zNavigationToolbar2GTK3.__init__c                 C   s   | j S r;   )rž   r0   r)   r)   r*   r1   e  r@   zNavigationToolbar2GTK3.<lambda>c           
   
      s¶  t jdˆj ¡ t jjt jt jjt j	t jj
fd�‰ ˆj ¡  ¡ D ]V\}}t  ¡ }| |¡ |D ]}| d|› �¡ q\ˆ  |¡ ˆj ¡ |kr>ˆ  |¡ q>t ˆ jd¡‡ ‡fdd„ƒ}ˆ  tjd ¡ ˆ  ˆj ¡ ¡ ˆ  d¡ ˆ  ¡ }ˆ  ¡ }ˆ  ¡ }ˆj ¡ | ¡  d	 }ˆ   ¡  |t jj
k�r$d S tjd �rBt!j" #|¡tjd< zˆjj$j%||d
� W nX t&k
�r° }	 z8t j'ˆj ¡ t(|	ƒt j)j*t j+j
d�‰ ˆ  ¡  ˆ   ¡  W 5 d }	~	X Y nX d S )NzSave the figure)ÚtitleÚ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_namer4   r   Zget_current_nameÚwith_suffix)r†   ÚnameÚfmt©Údialogr(   r)   r*   Úon_notify_filtery  s
    ÿz<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )Úformat)r¾   Úmessage_formatÚtyperÀ   ),r   ZFileChooserDialogr¶   Úget_toplevelZFileChooserActionZSAVEZSTOCK_CANCELZResponseTypeZCANCELZ
STOCK_SAVEÚOKrÄ   ÚitemsZ
FileFilterÚset_nameZadd_patternÚ
add_filterZget_default_filetypeZ
set_filterr!   r"   rQ   Zset_current_folderÚmplZrcParamsrÅ   Zget_default_filenameZset_do_overwrite_confirmationÚrunÚget_filenamerÂ   rÃ   rZ   ÚosÚpathÚdirnamerA   ZsavefigÚ	ExceptionÚMessageDialogr4   ÚMessageTypeÚERRORÚButtonsType)
r(   r†   rÇ   ZfmtsÚffrÈ   rË   ÚresponseÚfnameÚer)   rÉ   r*   Úsave_figureg  sV    
 ÿüÿ



  þz"NavigationToolbar2GTK3.save_figure)N)
r6   r7   r8   r   Zdelete_parameterrN   r9   r:   Úwinrã   r)   r)   r)   r*   rš   2  s   
1rš   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 )ÚToolbarGTK3r›   c                 C   sl   t  | |¡ tj | ¡ |  dtjj¡ t ¡ | _| j 	tj
j¡ |  | jddd¡ |  ¡  i | _i | _d S )NÚorientationFr   )r   rN   r   ÚBoxÚset_propertyÚOrientationZ
HORIZONTALr¯   Ú_messager²   r³   r´   Zpack_endrµ   Ú_groupsÚ
_toolitems)r(   Útoolmanagerr)   r)   r*   rN   ›  s    
zToolbarGTK3.__init__c           
      C   s®   |rt  ¡ }nt  ¡ }| |¡ |d k	rLt j tj |¡t j	j
¡}| |¡ |d krXd}|  |||¡ | d| j|¡}	| |¡ | ¡  | j |g ¡ | j|  ||	f¡ d S )Nrk   r�   )r   r©   rª   r«   r£   r¤   r   r¥   r¦   r§   r¨   r¬   Ú_add_buttonrQ   Ú
_call_toolr®   rµ   rì   Ú
setdefaultÚappend)
r(   rÇ   ÚgroupÚpositionr¸   ÚdescriptionÚtogglerq   rº   Úsignalr)   r)   r*   Úadd_toolitem¦  s$    


þ

zToolbarGTK3.add_toolitemc                 C   sf   || j krP| j r|  ¡  t ¡ }| tjj¡ |  |ddd¡ | ¡  || j |< | j |  	||¡ d S )NFr   )
rë   Ú_add_separatorr   ÚToolbarrŸ   r    r¡   Ú
pack_startrµ   r¢   )r(   rq   rò   ró   Ztoolbarr)   r)   r*   rî   ¾  s    

zToolbarGTK3._add_buttonc                 C   s   |   |¡ d S r;   )Ztrigger_tool)r(   ZbtnrÇ   r)   r)   r*   rï   É  s    zToolbarGTK3._call_toolc                 C   sD   || j krd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S r;   )rì   Zhandler_blockZ
set_activeZhandler_unblock)r(   rÇ   Ztoggledr»   rö   r)   r)   r*   Útoggle_toolitemÌ  s    


zToolbarGTK3.toggle_toolitemc                 C   sl   || j kr"| j |› d�| ¡ d S | jD ]6}| j | D ]&\}}|| j| kr6| j|  |¡ q6q(| j |= d S )Nz not in toolbar)rì   rí   Zmessage_eventrë   Úremove)r(   rÇ   rò   r»   Ú_signalr)   r)   r*   Úremove_toolitemÔ  s    

zToolbarGTK3.remove_toolitemc                 C   s4   t  ¡ }| dt jj¡ |  |ddd¡ | ¡  d S )Nræ   FTr   )r   Z	Separatorrè   ré   ZVERTICALrú   rµ   )r(   Úsepr)   r)   r*   rø   ß  s    zToolbarGTK3._add_separatorc                 C   s   | j  |¡ d S r;   )rê   r«   )r(   Úsr)   r)   r*   Úset_messageå  s    zToolbarGTK3.set_messageN)r6   r7   r8   Z_icon_extensionrN   r÷   rî   rï   rû   rþ   rø   r  r)   r)   r)   r*   rå   ˜  s   rå   c                   @   s   e Zd Zdd„ ZdS )ÚSaveFigureGTK3c                 O   s   t  |  ¡ ¡ d S r;   )rš   rã   Ú"_make_classic_style_pseudo_toolbarr…   r)   r)   r*   Útriggerë  s    ÿzSaveFigureGTK3.triggerN©r6   r7   r8   r  r)   r)   r)   r*   r  é  s   r  r   ZToolSetCursor)Úalternativec                   @   s   e Zd Zdd„ ZdS )ÚSetCursorGTK3c                 C   s   t  |  ¡ |¡ d S r;   )rš   r]   r  )r(   r`   r)   r)   r*   r]   ò  s     ÿzSetCursorGTK3.set_cursorN)r6   r7   r8   r]   r)   r)   r)   r*   r  ð  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
 }||krH|| }n(t|ƒdkr^| ¡ }n| ¡ rp|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 )ú<ú>r)   )r�   Úmodr)   r)   r*   Ú
<listcomp>  s     z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nrk   r   z<shift>r   )ÚsplitÚlenÚ
capitalizeÚisupperÚjoin)r(   r�   ÚspecialÚpartsZmodsr)   r)   r*   Ú_normalize_shortcutù  s    ü



zHelpGTK3._normalize_shortcutc                 C   s   d|k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)r(   r�   r)   r)   r*   Ú_is_valid_shortcut  s    zHelpGTK3._is_valid_shortcutc                    s¼   t  ¡ }tˆ jj ¡ ƒD ]l\}}|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)ro   Údatar)   r)   r*   r1   *  r@   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c                 3   s"   | ]}ˆ   |¡rˆ  |¡V  qd S r;   )r  r  )r�   r�   r0   r)   r*   r�   -  s   
þz2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorr½   ÚsubtitleÚHelpT)r½   ZmodalZtransient_for)r   ZShortcutsSectionÚsortedrí   ZtoolsrÑ   rô   ZShortcutsGroupr°   ÚforallZShortcutsShortcutr  Zget_tool_keymaprÇ   ZShortcutsWindowÚ_figurer¶   rÏ   Úshowrµ   )r(   ÚsectionrÇ   Ztoolrò   Zshortcutr[   r)   r0   r*   Ú_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   rÛ   r  r¶   rÏ   rÜ   ÚINFOrÞ   rÐ   Z_get_help_textrÕ   rZ   )r(   rÊ   r)   r)   r*   Ú_show_shortcuts_dialog>  s    
   ýzHelpGTK3._show_shortcuts_dialogc                 G   s(   t  ddd¡d kr|  ¡  n|  ¡  d S )Nrˆ   é   r   )r   Zcheck_versionr   r"  )r(   r†   r)   r)   r*   r  F  s    
zHelpGTK3.triggerN)r6   r7   r8   r  r  r   r"  r  r)   r)   r)   r*   r  ÷  s
   	"r  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardGTK3c           
      O   sH   t j tj¡}| j ¡ }| ¡ \}}}}t |||||¡}	| 	|	¡ d S r;   )
r   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr¶   rb   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r(   r†   r‡   Ú	clipboardr[   rc   rd   ry   rf   Zpbr)   r)   r*   r  O  s
    
zToolCopyToClipboardGTK3.triggerNr  r)   r)   r)   r*   r$  M  s   r$  r,   c                 C   sd   |d k	r|  ¡ }| ¡ sd }t| tƒs6d tt| ƒ¡} tj|tjj	tj
j| d�}| ¡  | ¡  d S )Nú,)r¾   rÎ   rÀ   rÍ   )rÏ   Zis_toplevelÚ
isinstancer4   r  Úmapr   rÛ   rÜ   rÝ   rÞ   rÐ   rÕ   rZ   )Úmsgr¾   rÊ   r)   r)   r*   Úerror_msg_gtkW  s    
  þr+  c                   @   s   e Zd ZeZeZdS )r>   N)r6   r7   r8   rš   Z_toolbar2_classrå   Z_toolmanager_toolbar_classr)   r)   r)   r*   r>   m  s   r>   c                   @   s   e Zd ZeZeZdS )Ú_BackendGTK3N)r6   r7   r8   r=   ZFigureCanvasr>   ZFigureManagerr)   r)   r)   r*   r,  r  s   r,  )N)Fr!   Úloggingr×   Úpathlibr   r.   Z
matplotlibrÔ   r   r   r   Zmatplotlib.backend_basesr   r   r   r	   r
   r   r   Zmatplotlib.backend_toolsr   ÚgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorrâ   Zgi.repositoryr   r   r   r   r   r   r   r   r   r   r   r˜   r   Ú	getLoggerr6   Ú_logZcaching_module_getattrr   Ú	lru_cacher<   ZDrawingArear=   rù   rš   rç   rå   Z_register_tool_classZSaveFigureBaser  r9   ZSetCursorBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser$  r+  ZConfigureSubplotsGTKZRubberbandGTKr>   Zexportr,  r)   r)   r)   r*   Ú<module>   sf   $

 jfQU	 ÿ ÿ