U
    FvfÜT  ã                
   @   sê  d dl Z d dl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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ƒ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 m!Z" G dd„ deej#ƒZ$G dd„ de ej%ƒZ&G dd„ de	ej%ƒZ'e (e$¡G dd„ dej)ƒƒZ*e (e$¡G dd„ dej+ƒƒZ,e (e$¡G dd„ dej-ƒƒZ.e (e$ej/¡ e (e$ej0¡ e'Z1G dd„ deƒZ2ej3G dd„ deƒƒZ4dS )é    N)Ú_apiÚbackend_toolsÚcbook)ÚToolContainerBaseÚKeyEventÚLocationEventÚ
MouseEventÚResizeEventÚ
CloseEventz#The GTK4 backends require PyGObjectÚGtkz4.0)ÚGioÚGLibr   ÚGdkÚ	GdkPixbufé   )Ú_backend_gtk)Ú_BackendGTKÚ_FigureCanvasGTKÚ_FigureManagerGTKÚ_NavigationToolbar2GTKÚTimerGTKc                       sì   e Zd ZdZdZe dd„ ¡Zd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d6d 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 )7ÚFigureCanvasGTK4Zgtk4Fc                 C   s   t S ©N)ÚFigureManagerGTK4)Úcls© r   úD/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/backends/backend_gtk4.pyÚ<lambda>$   ó    zFigureCanvasGTK4.<lambda>Nc           	         sŒ  t ƒ j|d |  d¡ |  d¡ d| _d | _|  | j¡ |  d| j	¡ |  d| j
¡ t ¡ }| d¡ | d| j¡ | d| j¡ |  |¡ t ¡ }| d| j¡ | d	| j¡ |  |¡ t ¡ }| d
| j¡ | d| j¡ | d| j¡ |  |¡ tj tjj¡}| d| j¡ |  |¡ |  d¡ t ¡ }d}t ddd¡d krX|  |d¡ n|  | !d¡¡ |  "¡ }| #|tj$¡ | %d¡ d S )N)ÚfigureTr   Úresizeznotify::scale-factorZpressedZreleasedzkey-pressedzkey-releasedÚmotionZenterZleaveÚscrollz/.matplotlib-canvas { background-color: white; }é   é	   é   éÿÿÿÿzutf-8zmatplotlib-canvas)&ÚsuperÚ__init__Úset_hexpandZset_vexpandÚ_idle_draw_idÚ_rubberband_rectZset_draw_funcÚ
_draw_funcÚconnectÚresize_eventÚ_update_device_pixel_ratior   ZGestureClickZ
set_buttonÚbutton_press_eventÚbutton_release_eventZadd_controllerZEventControllerKeyÚkey_press_eventÚkey_release_eventZEventControllerMotionÚmotion_notify_eventÚenter_notify_eventÚleave_notify_eventZEventControllerScrollÚnewZEventControllerScrollFlagsÚVERTICALÚscroll_eventZset_focusableZCssProviderZcheck_versionZload_from_dataÚencodeZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_class)	Úselfr   ZclickÚkeyr!   r"   ÚcssÚstyleZ	style_ctx©Ú	__class__r   r   r(   '   sH    





ÿ

zFigureCanvasGTK4.__init__c                 C   s   t d| ƒ ¡  d S )NZclose_event)r
   Ú_process©r;   r   r   r   ÚdestroyV   s    zFigureCanvasGTK4.destroyc                 C   s   |   t |¡¡ d S r   )Zset_cursor_from_namer   Zmpl_to_gtk_cursor_name)r;   Úcursorr   r   r   Ú
set_cursorY   s    zFigureCanvasGTK4.set_cursorc                 C   sb   |dkr4|   ¡  ¡ }| |  ¡  ¡  ¡ ¡\}}}}n|\}}|| j }| jjj	|| j  }||fS )a™  
        Convert the *xy* position of a GTK event, or of the current cursor
        position if *xy* 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_nativeÚget_surfaceÚget_device_positionÚget_displayÚget_default_seatÚget_pointerÚdevice_pixel_ratior   ZbboxÚheight)r;   ZxyÚsurfaceÚis_overÚxÚyÚmaskr   r   r   Ú_mpl_coords]   s    ÿ
zFigureCanvasGTK4._mpl_coordsc                 C   s*   t d| f|  ¡ ž||  |¡dœŽ ¡  dS )Nr9   )ÚstepÚ	modifiersT©r   rS   Ú_mpl_modifiersrA   )r;   Ú
controllerZdxZdyr   r   r   r9   s   s     ÿÿþzFigureCanvasGTK4.scroll_eventc                 C   s>   t d| f|  ||f¡| ¡ fžd|  |¡iŽ ¡  |  ¡  d S )Nr0   rU   )r   rS   Úget_current_buttonrW   rA   Z
grab_focus©r;   rX   Zn_pressrP   rQ   r   r   r   r0   z   s     ÿþý
z#FigureCanvasGTK4.button_press_eventc                 C   s6   t d| f|  ||f¡| ¡ fžd|  |¡iŽ ¡  d S )Nr1   rU   )r   rS   rY   rW   rA   rZ   r   r   r   r1   ‚   s     ÿþýz%FigureCanvasGTK4.button_release_eventc                 C   s(   t d| |  |||¡f|  ¡ žŽ  ¡  dS )Nr2   T©r   Ú_get_keyrS   rA   ©r;   rX   ÚkeyvalÚkeycodeÚstater   r   r   r2   ‰   s      ÿþ
z FigureCanvasGTK4.key_press_eventc                 C   s(   t d| |  |||¡f|  ¡ žŽ  ¡  dS )Nr3   Tr[   r]   r   r   r   r3      s      ÿþ
z"FigureCanvasGTK4.key_release_eventc                 C   s.   t d| f|  ||f¡žd|  |¡iŽ ¡  d S )Nr4   rU   rV   ©r;   rX   rP   rQ   r   r   r   r4   —   s     ÿÿþz$FigureCanvasGTK4.motion_notify_eventc                 C   s,   t d| f|  ||f¡žd|  ¡ iŽ ¡  d S )NZfigure_enter_eventrU   ©r   rS   rW   rA   ra   r   r   r   r5      s     ÿÿþz#FigureCanvasGTK4.enter_notify_eventc                 C   s&   t d| f|  ¡ žd|  ¡ iŽ ¡  d S )NZfigure_leave_eventrU   rb   )r;   rX   r   r   r   r6   £   s     ÿÿþz#FigureCanvasGTK4.leave_notify_eventc                 C   sX   |   ¡  | jj}|| j | }|| j | }| jj||dd td| ƒ ¡  |  ¡  d S )NF)Zforwardr.   )r/   r   ÚdpirL   Zset_size_inchesr	   rA   Ú	draw_idle)r;   ÚareaÚwidthrM   rc   ZwinchZhinchr   r   r   r.   ©   s    zFigureCanvasGTK4.resize_eventc                    sz   |d kr4|   ¡  ¡ }| |  ¡  ¡  ¡ ¡\}}}‰ n| ¡ ‰ dtjj	fdtjj
fdtjjfdtjjfg}‡ fdd„|D ƒS )NÚctrlÚaltÚshiftr'   c                    s   g | ]\}}ˆ |@ r|‘qS r   r   )Ú.0ÚnamerR   ©Zevent_stater   r   Ú
<listcomp>¿   s      z3FigureCanvasGTK4._mpl_modifiers.<locals>.<listcomp>)rF   rG   rH   rI   rJ   rK   Zget_current_event_stater   ÚModifierTypeÚCONTROL_MASKÚALT_MASKÚ
SHIFT_MASKÚ
SUPER_MASK)r;   rX   rN   rO   rP   rQ   Z	mod_tabler   rl   r   rW   ²   s    ÿ



üzFigureCanvasGTK4._mpl_modifiersc                    sz   t t |¡ƒ‰t ˆt |¡¡‰ 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 ƒ}d |ˆ f•¡S )	Nrg   Úcontrolrh   ri   r'   c                    s6   g | ].\}}}|ˆ krˆ|@ r|d kr.ˆ  ¡ s|‘qS )ri   )Úisprintable)rj   ÚmodrR   Zmod_key©r<   r`   Zunikeyr   r   rm   Ì   s     þz-FigureCanvasGTK4._get_key.<locals>.<listcomp>ú+)Úchrr   Zkeyval_to_unicoder   Z_unikey_or_keysym_to_mplkeyZkeyval_namern   ro   rp   rq   rr   Újoin)r;   r^   r_   r`   rU   Úmodsr   rv   r   r\   Á   s    þüÿzFigureCanvasGTK4._get_keyc                 O   s   |   |  ¡ ¡r|  ¡  d S r   )Z_set_device_pixel_ratioZget_scale_factorÚdraw©r;   ÚargsÚkwargsr   r   r   r/   Ò   s    z+FigureCanvasGTK4._update_device_pixel_ratioc                 C   s   || _ |  ¡  d S r   )r+   Ú
queue_draw)r;   Zrectr   r   r   Ú_draw_rubberbandØ   s    z!FigureCanvasGTK4._draw_rubberbandc                 C   s   |   | |¡ |  | |¡ d S r   )Úon_draw_eventÚ
_post_draw)r;   Zdrawing_areaÚctxrf   rM   r   r   r   r,   Ý   s    zFigureCanvasGTK4._draw_funcc                    s0  ˆ j d krd S d}d}ˆ js:‡ fdd„ˆ j D ƒ\}}}}n"ˆ j \}}}}|ˆ j9 }|ˆ j9 }|| }	|| }
| ||¡ | ||
¡ | ||¡ | |	|¡ | ||
¡ | |	|
¡ | |	|¡ | |	|
¡ | d¡ | |¡ | ||fd¡ | ddd¡ | 	¡  | ||f|¡ | ddd¡ | 
¡  d S )Nr   r%   c                 3   s   | ]}|ˆ j  V  qd S r   )rL   )rj   ZdimrB   r   r   Ú	<genexpr>è   s   ÿz.FigureCanvasGTK4._post_draw.<locals>.<genexpr>r   )r+   Ú_context_is_scaledrL   Zmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)r;   Úwidgetrƒ   ZlwZdashZx0Zy0ÚwÚhÚx1Úy1r   rB   r   r‚   á   s:    

ÿ



zFigureCanvasGTK4._post_drawc                 C   s   d S r   r   )r;   r†   rƒ   r   r   r   r     s    zFigureCanvasGTK4.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S r   )Zis_drawabler   rB   r   r   r   r{   
  s    zFigureCanvasGTK4.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)r*   r{   )r}   rB   r   r   Ú	idle_draw  s    z-FigureCanvasGTK4.draw_idle.<locals>.idle_draw)r*   r   Zidle_add)r;   r‹   r   rB   r   rd     s    
zFigureCanvasGTK4.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S )NT)r   ZMainContextÚdefaultÚpendingÚ	iteration)r;   Úcontextr   r   r   Úflush_events  s    
zFigureCanvasGTK4.flush_events)N)N)N)!Ú__name__Ú
__module__Ú__qualname__Zrequired_interactive_frameworkZsupports_blitr   ZclasspropertyZmanager_classr…   r(   rC   rE   rS   r9   r0   r1   r2   r3   r4   r5   r6   r.   rW   r\   r/   r€   r,   r‚   r   r{   rd   r   Ú__classcell__r   r   r?   r   r   !   s6   /
	
%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 )ÚNavigationToolbar2GTK4z3.6ÚwindowNc           
      C   s8  || _ tj | ¡ |  d¡ i | _| jD ]²\}}}}|d krL|  t ¡ ¡ q(tj	 
tj tt d|› d¡ƒ¡¡}|dkr‚t ¡ nt ¡  | j|< }| |¡ | d¡ | d¡ | dt| |ƒ¡|_| |¡ |  |¡ q(t ¡ }	|	 d¡ |	 d	¡ |  |	¡ t ¡ | _| j tjj¡ |  | j¡ t | |¡ d S )
NZtoolbarZimagesú-symbolic.svg)ZzoomZpanÚflatúimage-buttonÚclickedõ   <small>Â 
Â </small>T) Ú_winr   ÚBoxr(   Úadd_css_classZ_gtk_idsZ	toolitemsÚappendÚ	SeparatorÚImageÚnew_from_giconr   ÚIconÚnew_for_stringÚstrr   Z_get_data_pathÚToggleButtonÚButtonÚ	set_childr-   ÚgetattrZ_signal_handlerÚset_tooltip_textÚLabelÚ
set_markupr)   ÚmessageÚset_justifyÚJustificationÚRIGHTr   )
r;   Úcanvasr–   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimageÚbuttonÚlabelr   r   r   r(   #  sJ    
ÿÿÿþ


 ÿ
ÿ


zNavigationToolbar2GTK4.__init__c                 C   s   | j S r   )rœ   rB   r   r   r   r   O  r   zNavigationToolbar2GTK4.<lambda>c                    sf  t jdˆ j ¡ t jjdd}|ˆ _t  ¡ }| d¡ | 	d¡ | 
|¡ | |¡ g }d }tˆ j ¡  ¡ ƒD ]^\}\}}t  ¡ }| |¡ |D ]}	| 	d|	› ¡ qŽ| 
|¡ | |¡ ˆ j ¡ |krl|}ql|| f|d |… ||d d … •}| dd	||¡ | d|| ¡ | tj tj tjd
 ¡¡¡ | ˆ j ¡ ¡ t |j d¡‡ fdd„ƒ}
| !¡  d S )NzSave the figureT)ÚtitleÚtransient_forÚactionÚmodalz	All filesÚ*z*.r   ÚformatzFile formatúsavefig.directoryÚresponsec              
      sÒ   |   ¡ }|  d¡}ˆ j ¡ | d }|  ¡  d ˆ _|tjjkrBd S t	j
d rb| ¡ }| ¡ t	j
d< zˆ jjj| ¡ |d W nP tk
rÌ } z2tjˆ j ¡ tjjtjjdt|ƒd}| ¡  W 5 d }~X Y nX d S )Nr½   r   r¾   )r½   T)r¹   Zmessage_typeZbuttonsr»   r²   )Zget_fileZ
get_choicer±   Úget_supported_filetypes_groupedrC   Ú_save_dialogr   ZResponseTypeZACCEPTÚmplÚrcParamsZ
get_parentÚget_pathr   ZsavefigÚ	ExceptionZMessageDialogÚget_rootZMessageTypeÚERRORZButtonsTypeÚOKr¥   Úshow)Údialogr¿   ÚfileÚfmtÚparentÚeÚmsgrB   r   r   Úon_responsev  s*    

 üz7NavigationToolbar2GTK4.save_figure.<locals>.on_response)"r   ZFileChooserNativer±   rÆ   ZFileChooserActionZSAVErÁ   Z
FileFilterÚset_nameZadd_patternZ
add_filterZ
set_filterÚ	enumeraterÀ   ÚitemsrŸ   Zget_default_filetypeZ
add_choiceZ
set_choiceZset_current_folderr   ZFileZnew_for_pathÚosÚpathÚ
expanduserrÂ   rÃ   Zset_current_nameZget_default_filenameÚ	functoolsÚpartialr-   rÉ   )r;   r}   rÊ   ÚffÚformatsÚdefault_formatÚirk   ZfmtsrÌ   rÐ   r   rB   r   Úsave_figureQ  sJ    ü



ÿ


ÿ
ÿz"NavigationToolbar2GTK4.save_figure)N)
r‘   r’   r“   r   Zdelete_parameterr(   Ú
deprecatedÚpropertyÚwinrÝ   r   r   r   r   r•   "  s   
+r•   c                   @   sX   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d„ ZdS )ÚToolbarGTK4r—   c                 C   sš   t  | |¡ tj | ¡ |  dtjj¡ t ¡ | _|  | j¡ i | _	i | _
t ¡ }| d¡ | d¡ |  |¡ t ¡ | _| j tjj¡ |  | j¡ d S )NÚorientationr›   T)r   r(   r   r   Úset_propertyÚOrientationZ
HORIZONTALÚ	_tool_boxrŸ   Ú_groupsÚ
_toolitemsr«   r¬   r)   Ú_messager®   r¯   r°   )r;   Útoolmanagerr·   r   r   r   r(   “  s     
ÿ


zToolbarGTK4.__init__c           
      C   s´   |rt  ¡ }nt  ¡ }| |¡ | d¡ |d k	rZt j tj 	|¡¡}| 
|¡ | d¡ |d krfd}|  |||¡ | d| j|¡}	| |¡ | j |g ¡ | j|  ||	f¡ d S )Nr˜   r™   r&   rš   )r   r¦   r§   Ú	set_labelrž   r¡   r¢   r   r£   r¤   r¨   Ú_add_buttonr-   Ú
_call_toolrª   rç   Ú
setdefaultrŸ   )
r;   rk   ÚgroupÚpositionr³   ÚdescriptionZtoggler¶   rµ   Úsignalr   r   r   Úadd_toolitem¬  s$    



ÿ


zToolbarGTK4.add_toolitemc                 C   s8   d g}| j |  ¡ }|d k	r0| |¡ | ¡ }q|| S r   )ræ   Úget_first_childrŸ   Úget_next_sibling)r;   rî   rï   ÚchildrenÚchildr   r   r   Ú_find_child_at_positionÄ  s    

z#ToolbarGTK4._find_child_at_positionc                 C   sT   || j kr6| j r|  ¡  t ¡ }| j |¡ || j |< | j |  ||  ||¡¡ d S r   )ræ   Ú_add_separatorr   r   rå   rŸ   Zinsert_child_afterr÷   )r;   r¶   rî   rï   Z	group_boxr   r   r   rë   Ì  s    


 
ÿzToolbarGTK4._add_buttonc                 C   s   |   |¡ d S r   )Ztrigger_tool)r;   Zbtnrk   r   r   r   rì   Ö  s    zToolbarGTK4._call_toolc                 C   sD   || j krd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S r   )rç   Zhandler_blockZ
set_activeZhandler_unblock)r;   rk   ZtoggledÚtoolitemrñ   r   r   r   Útoggle_toolitemÙ  s    


zToolbarGTK4.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;   rk   rî   rù   Ú_signalr   r   r   Úremove_toolitemá  s    

zToolbarGTK4.remove_toolitemc                 C   s(   t  ¡ }| dt jj¡ | j |¡ d S )Nrâ   )r   r    rã   rä   r8   rå   rŸ   )r;   Úsepr   r   r   rø   ì  s    zToolbarGTK4._add_separatorc                 C   s   | j  |¡ d S r   )rè   rê   )r;   Úsr   r   r   Úset_messageñ  s    zToolbarGTK4.set_messageN)r‘   r’   r“   Z_icon_extensionr(   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 )ÚSaveFigureGTK4c                 O   s   t  |  ¡ ¡ d S r   )r•   rÝ   Z"_make_classic_style_pseudo_toolbarr|   r   r   r   Útrigger÷  s    ÿzSaveFigureGTK4.triggerN©r‘   r’   r“   r  r   r   r   r   r  õ  s   r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚHelpGTK4c                 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 `FigureCanvasGTK4._get_key`.
        Z	BackSpaceZ	Page_DownZPage_UpZScroll_Lock)Z	backspaceZpagedownZpageupZscroll_lockrw   c                 S   s   g | ]}d | d ‘qS )ú<ú>r   )rj   ru   r   r   r   rm     s     z0HelpGTK4._normalize_shortcut.<locals>.<listcomp>Nr&   r   z<shift>Ú )ÚsplitÚlenÚ
capitalizeÚisupperry   )r;   r<   ÚspecialÚpartsrz   r   r   r   Ú_normalize_shortcutþ  s    ü



zHelpGTK4._normalize_shortcutc                 C   s   d|ko|  d¡ S )zÖ
        Check for a valid shortcut to be displayed.

        - GTK will never send 'cmd+' (see `FigureCanvasGTK4._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HelpGTK4._is_valid_shortcutc           	         sÈ   t  ¡ }tˆ jj ¡ ƒD ]€\}}|js(qt  ¡ }| |¡ | 	¡ }|d k	r^| 
d¡ | ¡ }qBt jd ‡ fdd„ˆ j |¡D ƒ¡|j|jd}| |¡ qt jddˆ jj ¡ d}| |¡ | ¡  d S )	NFú c                 3   s"   | ]}ˆ   |¡rˆ  |¡V  qd S r   )r  r  )rj   r<   rB   r   r   r„   5  s   
þz#HelpGTK4.trigger.<locals>.<genexpr>)Zacceleratorr¸   ZsubtitleZHelpT)r¸   r»   r¹   )r   ZShortcutsSectionÚsortedré   ZtoolsrÓ   rð   ZShortcutsGrouprŸ   ró   Zset_visiblerô   ZShortcutsShortcutry   Zget_tool_keymaprk   ZShortcutsWindowZ_figurer±   rÆ   r¨   rÉ   )	r;   r}   Úsectionrk   Ztoolrî   rö   Zshortcutr–   r   rB   r   r  !  s2    



þú
ý
zHelpGTK4.triggerN)r‘   r’   r“   r  r  r  r   r   r   r   r  ü  s   	r  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardGTK4c                 O   sj   t  ¡ D}| j |¡ | j ¡ \}}tj | ¡ tj	j
dd|||d ¡}W 5 Q R X | j ¡ }| |¡ d S )NTé   r#   )ÚioÚBytesIOr±   Z
print_rgbaZget_width_heightr   ZPixbufZnew_from_dataÚ	getbufferZ
ColorspaceZRGBZget_clipboardÚset)r;   r}   r~   Úfr‡   rˆ   ZpbZ	clipboardr   r   r   r  H  s    
    þ
zToolCopyToClipboardGTK4.triggerNr  r   r   r   r   r  F  s   r  c                   @   s   e Zd ZeZeZdS )r   N)r‘   r’   r“   r•   Z_toolbar2_classrá   Z_toolmanager_toolbar_classr   r   r   r   r   Z  s   r   c                   @   s   e Zd ZeZeZdS )Ú_BackendGTK4N)r‘   r’   r“   r   ZFigureCanvasr   ZFigureManagerr   r   r   r   r  _  s   r  )5r×   r  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	TimerGTK4ZDrawingArear   r   r•   rá   Z_register_tool_classZSaveFigureBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser  ZConfigureSubplotsGTKZRubberbandGTKZToolbarr   Úexportr  r   r   r   r   Ú<module>   sN      neI ÿ ÿ