a
    ü
þdAY  ã                
   @   sD  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 zd dlZW n. ey¢ Z zedƒe‚W Y dZ[n
dZ[0 0 ze dd¡ W n. eyâ Z zeeƒe‚W Y dZ[n
dZ[0 0 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#m$Z% e &e'¡Z(ej)G dd„ dƒƒZ*e  +¡ dd„ ƒZ,G dd„ de!ej-ƒZ.G dd„ de#ej/ƒZ0G dd„ deej1ƒZ2e	 3e.¡G dd„ de	j4ƒƒZ5e	 3e.¡G dd„ de	j6ƒƒZ7e	 3e.¡G dd„ de	j8ƒƒZ9e :d¡d#dd„ƒZ;e2Z/e	 3e.ej<¡ e	 3e.ej=¡ G dd „ d e"ƒZ>e j?G d!d"„ d"e ƒƒZ@dS )$é    N)ÚPath)Ú_apiÚbackend_toolsÚcbook)ÚToolContainerBaseÚ
CloseEventÚKeyEventÚLocationEventÚ
MouseEventÚResizeEventz#The GTK3 backends require PyGObjectÚGtkz3.0)ÚGioÚGLibÚGObjectr   ÚGdké   )Ú_backend_gtk)Ú_BackendGTKÚ_FigureCanvasGTKÚ_FigureManagerGTKÚ_NavigationToolbar2GTKÚTimerGTKc                   @   s@   e Zd Zejdddedd„ ƒƒZejdddedd„ ƒƒZdS )Ú__getattr__ú3.6Ú )Zobj_typec                 C   s   t jdkrdS dS )NÚwin32zmatplotlib.pngzmatplotlib.svg)ÚsysÚplatform©Úself© r    úi/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3.pyÚ<lambda>)   s    z__getattr__.<lambda>c                 C   s   t t dtdƒ¡ƒS )NÚimagesÚicon_filename)Ústrr   Ú_get_data_pathr   r   r    r    r!   r"   ,   s    N)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyr$   Zwindow_iconr    r    r    r!   r   &   s   ÿÿr   c                 C   s   t j t j ¡ t | ¡¡S ©N)r   ÚCursorZnew_from_nameZDisplayÚget_defaultr   Zmpl_to_gtk_cursor_name)Z
mpl_cursorr    r    r!   Ú_mpl_to_gtk_cursor0   s    þr/   c                       s4  e Zd Zd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d4‡ fdd„	Zdd„ Zd	d
„ Zd5d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e d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(d0d1„ Z)d2d3„ Z*‡  Z+S )6ÚFigureCanvasGTK3Zgtk3c                 C   s   t S r,   )ÚFigureManagerGTK3)Úclsr    r    r!   r"   9   ó    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Úconnectr5   r6   r7   r8   Ú_update_device_pixel_ratioÚon_draw_eventÚ
_post_drawr:   r;   r<   r=   r>   r?   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   r4   ÚcssZ	style_ctx©rH   r    r!   rA   F   s0    

zFigureCanvasGTK3.__init__c                 C   s   t d| ƒ ¡  d S )NZclose_event)r   Ú_processr   r    r    r!   Údestroye   s    zFigureCanvasGTK3.destroyc                 C   s8   |   d¡}|d ur4| t|ƒ¡ tj ¡ }| d¡ d S )NÚwindowT)Úget_propertyÚ
set_cursorr/   r   ÚMainContextÚdefaultÚ	iteration)r   ÚcursorrN   Úcontextr    r    r!   rP   h   s
    

zFigureCanvasGTK3.set_cursorc                 C   sd   |du 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_positionÚget_displayZget_device_managerZget_client_pointerÚxÚyÚdevice_pixel_ratior4   ZbboxÚheight)r   ÚeventrN   ÚtrX   rY   Ústater    r    r!   Ú_mpl_coordsp   s    ÿ
zFigureCanvasGTK3._mpl_coordsc                 C   sH   |j tjjkrdnd}td| g|  |¡¢R ||  |j¡|dœŽ ¡  dS )Nr   éÿÿÿÿr5   )ÚstepÚ	modifiersÚguiEventF)	Ú	directionr   ZScrollDirectionÚUPr
   r_   Ú_mpl_modifiersr^   rL   )r   Úwidgetr\   ra   r    r    r!   r5   †   s    ÿ
ýzFigureCanvasGTK3.scroll_eventc                 C   s6   t d| g|  |¡¢|j‘R |  |j¡|dœŽ ¡  dS )Nr6   ©rb   rc   F©r
   r_   Úbuttonrf   r^   rL   ©r   rg   r\   r    r    r!   r6   Ž   s    ÿÿ
ýz#FigureCanvasGTK3.button_press_eventc                 C   s6   t d| g|  |¡¢|j‘R |  |j¡|dœŽ ¡  dS )Nr7   rh   Fri   rk   r    r    r!   r7   •   s    ÿÿ
ýz%FigureCanvasGTK3.button_release_eventc                 C   s,   t d| |  |¡g|  ¡ ¢R d|iŽ ¡  dS )Nr:   rc   T©r   Ú_get_keyr_   rL   rk   r    r    r!   r:   œ   s    ÿÿþ
z FigureCanvasGTK3.key_press_eventc                 C   s,   t d| |  |¡g|  ¡ ¢R d|iŽ ¡  dS )Nr;   rc   Trl   rk   r    r    r!   r;   ¢   s    ÿÿþ
z"FigureCanvasGTK3.key_release_eventc                 C   s0   t d| g|  |¡¢R |  |j¡|dœŽ ¡  dS )Nr<   rh   F)r
   r_   rf   r^   rL   rk   r    r    r!   r<   ¨   s
    
þz$FigureCanvasGTK3.motion_notify_eventc                 C   sB   t j |  ¡ ¡ ¡ }td| g|  |¡¢R |  |¡|dœŽ ¡  d S )NZfigure_enter_eventrh   ©	r   ZKeymapZget_for_displayrW   Zget_modifier_stater	   r_   rf   rL   ©r   rg   r\   Zgtk_modsr    r    r!   r=   ®   s    ÿþz#FigureCanvasGTK3.enter_notify_eventc                 C   sB   t j |  ¡ ¡ ¡ }td| g|  |¡¢R |  |¡|dœŽ ¡  d S )NZfigure_leave_eventrh   rn   ro   r    r    r!   r>   µ   s    ÿþz#FigureCanvasGTK3.leave_notify_eventc                 C   sT   | j j}|j| j | }|j| j | }| j j||dd td| ƒ ¡  |  ¡  d S )NF©ZforwardZresize_event)	r4   ÚdpiÚwidthrZ   r[   Úset_size_inchesr   rL   Ú	draw_idle)r   rg   Z
allocationZdpivalZwinchZhinchr    r    r!   r?   ¼   s    zFigureCanvasGTK3.size_allocate©Úexcludec                   sH   dt jjdfdt jjdfdt jjdfdt jjdfg}‡ ‡fdd„|D ƒS )NZctrlÚcontrolZaltÚshiftr@   c                    s&   g | ]\}}}ˆ|krˆ |@ r|‘qS r    r    )Ú.0ÚnameÚmaskÚkey©Úevent_staterv   r    r!   Ú
<listcomp>Ì   s   ÿz3FigureCanvasGTK3._mpl_modifiers.<locals>.<listcomp>)r   ZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASK)r~   rv   rb   r    r}   r!   rf   Ä   s    üzFigureCanvasGTK3._mpl_modifiersc                 C   s`   t t |j¡ƒ}t |t |j¡¡}| j|j|d}d|v rN| 	¡ rN| 
d¡ d g |¢|‘¡S )Nru   rx   ú+)Úchrr   Zkeyval_to_unicodeÚkeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_namerf   r^   ÚisprintableÚremoveÚjoin)r   r\   Zunikeyr|   Úmodsr    r    r!   rm   Ï   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!   rE   Ø   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 )NrN   é   Frp   )rO   rr   rZ   r[   r4   rq   rs   )r   rg   r\   ÚwÚhrq   r    r    r!   r8   â   s    z FigureCanvasGTK3.configure_eventc                 C   s   || _ |  ¡  d S r,   )rC   r‡   )r   Zrectr    r    r!   Ú_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 r,   )rZ   )ry   Zdimr   r    r!   Ú	<genexpr>÷   s   ÿz.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r‹   r‹   r   r‹   )	rC   Zmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)	r   rg   ÚctxZx0Zy0rŒ   r   Úx1Úy1r    r   r!   rG   ó   s.    

ÿ

zFigureCanvasGTK3._post_drawc                 C   s   d S r,   r    )r   rg   r   r    r    r!   rF     s    zFigureCanvasGTK3.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S r,   )Zis_drawabler‡   r   r    r    r!   r9     s    zFigureCanvasGTK3.drawc                    s*   ˆ j dkrd S ‡ fdd„}t |¡ˆ _ d S )Nr   c                     s    zˆ   ¡  W dˆ _ndˆ _0 dS )Nr   F)r9   rB   )r‰   r   r    r!   Ú	idle_draw  s    
z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rB   r   Zidle_add)r   r“   r    r   r!   rt     s    
zFigureCanvasGTK3.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S )NT)r   rQ   rR   ÚpendingrS   )r   rU   r    r    r!   Úflush_events&  s    
zFigureCanvasGTK3.flush_events)N)N),r'   r(   r)   Zrequired_interactive_frameworkr   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_MASKrI   rA   rM   rP   r_   r5   r6   r7   r:   r;   r<   r=   r>   r?   Ústaticmethodrf   rm   rE   r8   rŽ   rG   rF   r9   rt   r•   Ú__classcell__r    r    rK   r!   r0   7   sV   ÿþýüûúùø


	
r0   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   rN   Nc                 C   sl  || _ tj | ¡ |  tjj¡ i | _| jD ]²\}}}}|d u rR|  	t 
¡ d¡ q,tj tj tt d|› d¡ƒ¡tjj¡}|dv 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 )Nr`   r#   ú-symbolic.svg)ZzoomZpanÚclickedu   <small>Â 
Â </small>T)(Ú_winr   rA   Ú	set_styler   ÚToolbarStyleÚICONSZ_gtk_idsZ	toolitemsÚinsertZSeparatorToolItemÚImageÚnew_from_giconr   ÚIconÚnew_for_stringr%   r   r&   ÚIconSizeÚLARGE_TOOLBARÚToggleToolButtonÚ
ToolButtonÚ	set_labelÚset_icon_widgetrD   ÚgetattrZ_signal_handlerÚset_tooltip_textZToolItemÚLabelZ
set_markupZ
set_expandÚaddÚmessageÚset_justifyÚJustificationÚRIGHTÚshow_allr   )r   ÚcanvasrN   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimagerj   ÚtoolitemÚlabelr    r    r!   rA   .  sR    ÿÿüþ


ÿ
ÿ


zNavigationToolbar2GTK3.__init__c                 C   s   | j S r,   )r›   r   r    r    r!   r"   `  r3   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 ¡ |v 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 nZ t&y² }	 z@t j'ˆj ¡ t(|	ƒt j)j*t j+j
d‰ ˆ  ¡  ˆ   ¡  W Y d }	~	n
d }	~	0 0 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_namer%   r   Zget_current_nameÚwith_suffix)r‰   rz   Úfmt©Údialogr   r    r!   Úon_notify_filtert  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_patternZ
add_filterZget_default_filetypeZ
set_filterÚ	functoolsÚpartialrD   Zset_current_folderÚmplZrcParamsrÂ   Zget_default_filenameZset_do_overwrite_confirmationÚrunÚget_filenamer¿   rÀ   rM   ÚosÚpathÚdirnamer4   ZsavefigÚ	ExceptionÚMessageDialogr%   ÚMessageTypeÚERRORÚButtonsType)
r   r‰   rz   ZfmtsÚffrÄ   rÇ   ÚresponseÚfnameÚer    rÅ   r!   Úsave_figureb  sP    

ÿüÿ



þz"NavigationToolbar2GTK3.save_figure)N)
r'   r(   r)   r   Zdelete_parameterrA   r*   r+   Úwinrà   r    r    r    r!   r˜   -  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   rA   r   ÚBoxÚset_propertyÚOrientationZ
HORIZONTALr¬   Ú_messager¯   r°   r±   Zpack_endr²   Ú_groupsÚ
_toolitems)r   Útoolmanagerr    r    r!   rA   –  s    
zToolbarGTK3.__init__c           
      C   s®   |rt  ¡ }nt  ¡ }| |¡ |d urLt j tj |¡t j	j
¡}| |¡ |d u rXd}|  |||¡ | d| j|¡}	| |¡ | ¡  | j |g ¡ | j|  ||	f¡ d S )Nr`   rš   )r   r¦   r§   r¨   r    r¡   r   r¢   r£   r¤   r¥   r©   Ú_add_buttonrD   Ú
_call_toolr«   r²   ré   Ú
setdefaultÚappend)
r   rz   ÚgroupÚpositionrµ   ÚdescriptionZtogglerj   r·   Úsignalr    r    r!   Úadd_toolitem¡  s$    


þ

zToolbarGTK3.add_toolitemc                 C   sf   || j v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   rj   rï   rð   Ztoolbarr    r    r!   rë   ¹  s    

zToolbarGTK3._add_buttonc                 C   s   |   |¡ d S r,   )Ztrigger_tool)r   Zbtnrz   r    r    r!   rì   Ä  s    zToolbarGTK3._call_toolc                 C   sD   || j vrd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S r,   )ré   Zhandler_blockZ
set_activeZhandler_unblock)r   rz   Ztoggledr¸   rò   r    r    r!   Útoggle_toolitemÇ  s    


zToolbarGTK3.toggle_toolitemc                 C   sl   || j vr"| j |› d| ¡ d S | jD ]6}| j | D ]&\}}|| j| v r6| j|  |¡ q6q(| j |= d S )Nz not in toolbar)ré   rê   Zmessage_eventrè   r„   )r   rz   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)r'   r(   r)   Z_icon_extensionrA   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à   Z"_make_classic_style_pseudo_toolbarrˆ   r    r    r!   Útriggeræ  s    ÿzSaveFigureGTK3.triggerN©r'   r(   r)   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
 }||v 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    )ry   Úmodr    r    r!   r   û  r3   z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nr`   r   z<shift>r   )ÚsplitÚlenÚ
capitalizeÚisupperr…   )r   r|   ZspecialÚpartsr†   r    r    r!   Ú_normalize_shortcutí  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)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)rg   Údatar    r    r!   r"     r3   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>ú c                 3   s"   | ]}ˆ   |¡rˆ  |¡V  qd S r,   )r  r	  )ry   r|   r   r    r!   r   !  s   
þz2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorrº   ZsubtitleÚHelpT)rº   ÚmodalZtransient_for)r   ZShortcutsSectionÚsortedrê   ZtoolsrÍ   rñ   ZShortcutsGroupr­   ÚforallZShortcutsShortcutr…   Zget_tool_keymaprz   ZShortcutsWindowÚ_figurer³   rË   Úshowr²   )r   Úsectionrz   Ztoolrï   ZshortcutrN   r    r   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Ò   rM   )r   rÆ   r    r    r!   Ú_show_shortcuts_dialog2  s    
ýzHelpGTK3._show_shortcuts_dialogc                 G   s(   t  ddd¡d u r|  ¡  n|  ¡  d S )Nr‹   é   r   )r   Zcheck_versionr  r  )r   r‰   r    r    r!   rþ   :  s    
zHelpGTK3.triggerN)r'   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 )ÚToolCopyToClipboardGTK3c           
      O   sH   t j tj¡}| j ¡ }| ¡ \}}}}t |||||¡}	| 	|	¡ d S r,   )
r   Z	ClipboardÚgetr   ZSELECTION_CLIPBOARDr³   rV   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r   r‰   rŠ   Z	clipboardrN   rX   rY   rr   r[   Zpbr    r    r!   rþ   C  s
    
zToolCopyToClipboardGTK3.triggerNrÿ   r    r    r    r!   r  A  s   r  r   c                 C   sd   |d u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Ú
isinstancer%   r…   Úmapr   rØ   rÙ   rÚ   rÛ   rÌ   rÒ   rM   )Úmsgr»   rÆ   r    r    r!   Úerror_msg_gtkK  s    
þr  c                   @   s   e Zd ZeZeZdS )r1   N)r'   r(   r)   r˜   Z_toolbar2_classrâ   Z_toolmanager_toolbar_classr    r    r    r!   r1   a  s   r1   c                   @   s   e Zd ZeZeZdS )Ú_BackendGTK3N)r'   r(   r)   r0   ZFigureCanvasr1   ZFigureManagerr    r    r    r!   r   f  s   r   )N)ArÏ   ÚloggingrÔ   Úpathlibr   r   Z
matplotlibrÑ   r   r   r   Zmatplotlib.backend_basesr   r   r   r	   r
   r   ZgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorrß   Zgi.repositoryr   r   r   r   r   r   r   r   r   r   r   r   Z	TimerGTK3Ú	getLoggerr'   Ú_logZcaching_module_getattrr   Ú	lru_cacher/   ZDrawingArear0   rõ   r˜   rä   râ   Z_register_tool_classZSaveFigureBaserý   ZToolHelpBaser   ZToolCopyToClipboardBaser  r*   r  ZConfigureSubplotsGTKZRubberbandGTKr1   Úexportr   r    r    r    r!   Ú<module>   sZ      
	
 wfQU	ÿÿ