a
    ëÝEb>_  ã                
   @   s   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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‚W Y dZ[n
dZ[0 0 d dl m!Z!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/Z0m1Z2 dd„ Z3G dd„ de$j4eƒZ5G dd„ deƒZ6G dd„ de,e$j7ƒZ8G dd„ dee$j7ƒZ9G dd„ de	j:ƒZ;G dd„ de	j<ƒZ=G dd„ de	j>ƒZ?e;e	_@e0e	_Ae2e	_Be=e	_Ce?e	_De9ZEejFG dd „ d e+ƒƒZGdS )!é    N)ÚPath)Ú_apiÚbackend_toolsÚcbook)ÚGcf)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚNavigationToolbar2Ú	TimerBaseÚToolContainerBase)ÚCursors)ÚFigure)ÚSubplotToolz#The GTK4 backends require PyGObjectÚGtkz4.0)ÚGioÚGLibÚGObjectr   ÚGdkÚ	GdkPixbufé   )Ú_create_applicationÚ_shutdown_applicationÚbackend_versionÚ_BackendGTKÚ_NavigationToolbar2GTKÚTimerGTKÚConfigureSubplotsGTKÚRubberbandGTKc                 C   s8   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�S )	NÚmoveÚpointerÚdefaultZ	crosshairÚwaitz	ew-resizez	ns-resize)Úcursor)
r   Zcheck_getitemr   ZMOVEZHANDÚPOINTERZSELECT_REGIONZWAITZRESIZE_HORIZONTALZRESIZE_VERTICAL)Z
mpl_cursor© r%   ú`/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/matplotlib/backends/backend_gtk4.pyÚ_mpl_to_gtk_cursor)   s    ùør'   c                   @   sÖ   e Zd ZdZdZeZ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(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ ZdS )3ÚFigureCanvasGTK4Zgtk4FNc                 C   sp  t  | |¡ 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j$¡ | %d¡ d S )NTr   Úresizeznotify::scale-factorZpressedZreleasedzkey-pressedzkey-releasedÚmotionZenterZleaveÚscrolls/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)&r   Ú__init__r   Úset_hexpandZset_vexpandÚ_idle_draw_idZ_lastCursorÚ_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load_from_dataZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_class)ÚselfÚfigureZclickÚkeyr*   r+   ÚcssZ	style_ctxr%   r%   r&   r,   ;   sF    





ÿ


zFigureCanvasGTK4.__init__c                 C   s   t  | |¡ d S ©N)r   Úpick)r>   Z
mouseeventr%   r%   r&   rC   g   s    zFigureCanvasGTK4.pickc                 C   s   |   ¡  d S rB   )Zclose_event©r>   r%   r%   r&   Údestroyl   s    zFigureCanvasGTK4.destroyc                 C   s   |   t|ƒ¡ d S rB   )Zset_cursor_from_namer'   )r>   r#   r%   r%   r&   Ú
set_cursoro   s    zFigureCanvasGTK4.set_cursorc                 C   s&   || 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.
        )Údevice_pixel_ratior?   ZbboxÚheight)r>   ÚxÚyr%   r%   r&   Ú_mouse_event_coordss   s    

z$FigureCanvasGTK4._mouse_event_coordsc                 C   s   t  | dd|¡ dS )Nr   T)r   r=   )r>   Ú
controllerZdxZdyr%   r%   r&   r=   ‚   s    zFigureCanvasGTK4.scroll_eventc                 C   s0   |   ||¡\}}t | ||| ¡ ¡ |  ¡  d S rB   )rK   r   r4   Úget_current_buttonÚ
grab_focus©r>   rL   Zn_pressrI   rJ   r%   r%   r&   r4   †   s
    
ÿz#FigureCanvasGTK4.button_press_eventc                 C   s(   |   ||¡\}}t | ||| ¡ ¡ d S rB   )rK   r   r5   rM   rO   r%   r%   r&   r5   Œ   s    
ÿz%FigureCanvasGTK4.button_release_eventc                 C   s   |   |||¡}t | |¡ dS ©NT)Ú_get_keyr   r6   ©r>   rL   ÚkeyvalÚkeycodeÚstater@   r%   r%   r&   r6   ‘   s    z FigureCanvasGTK4.key_press_eventc                 C   s   |   |||¡}t | |¡ dS rP   )rQ   r   r7   rR   r%   r%   r&   r7   –   s    z"FigureCanvasGTK4.key_release_eventc                 C   s"   |   ||¡\}}t | ||¡ d S rB   )rK   r   r8   ©r>   rL   rI   rJ   r%   r%   r&   r8   ›   s    z$FigureCanvasGTK4.motion_notify_eventc                 C   s   t  | ¡ d S rB   )r   r:   )r>   rL   r%   r%   r&   r:   Ÿ   s    z#FigureCanvasGTK4.leave_notify_eventc                 C   s&   |   ||¡\}}tj| ||fd� d S )N)Zxy)rK   r   r9   rV   r%   r%   r&   r9   ¢   s    z#FigureCanvasGTK4.enter_notify_eventc                 C   sT   |   ¡  | jj}|| j | }|| j | }| jj||dd� t | ¡ |  ¡  d S )NF)Úforward)r3   r?   ÚdpirG   Zset_size_inchesr   r2   Ú	draw_idle)r>   ÚareaÚwidthrH   rX   ZwinchZhinchr%   r%   r&   r2   ¦   s    
zFigureCanvasGTK4.resize_eventc           	      C   s„   t t |¡ƒ}t |t |¡¡}tjjdftjjdftjj	dftjj
dfg}|D ].\}}||@ rP|dkrp| ¡ sP|› d|› �}qP|S )NZctrlZaltÚshiftÚsuperú+)Úchrr   Zkeyval_to_unicoder   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZALT_MASKZ
SHIFT_MASKZ
SUPER_MASKÚisprintable)	r>   rS   rT   rU   Zunikeyr@   Ú	modifiersZkey_maskÚprefixr%   r%   r&   rQ   ¯   s    þ



üzFigureCanvasGTK4._get_keyc                 O   s   |   |  ¡ ¡r|  ¡  d S rB   )Z_set_device_pixel_ratioZget_scale_factorÚdraw)r>   ÚargsÚkwargsr%   r%   r&   r3   À   s    z+FigureCanvasGTK4._update_device_pixel_ratioc                 C   s   || _ |  ¡  d S rB   )r/   Ú
queue_draw)r>   Zrectr%   r%   r&   Ú_draw_rubberbandÆ   s    z!FigureCanvasGTK4._draw_rubberbandc                 C   s   |   | |¡ |  | |¡ d S rB   )Úon_draw_eventÚ
_post_draw)r>   Zdrawing_areaÚctxr[   rH   r%   r%   r&   r0   Ë   s    zFigureCanvasGTK4._draw_funcc                    s0  ˆ j d u 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   é   c                 3   s   | ]}|ˆ j  V  qd S rB   )rG   )Ú.0ÚdimrD   r%   r&   Ú	<genexpr>Ö   s   ÿz.FigureCanvasGTK4._post_draw.<locals>.<genexpr>r   )r/   Ú_context_is_scaledrG   Úmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)r>   Úwidgetrj   ZlwÚdashZx0Zy0ÚwÚhÚx1Úy1r%   rD   r&   ri   Ï   s:    

ÿ



zFigureCanvasGTK4._post_drawc                 C   s   d S rB   r%   )r>   rq   rj   r%   r%   r&   rh   ô   s    zFigureCanvasGTK4.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S rB   )Zis_drawablerf   rD   r%   r%   r&   rc   ø   s    zFigureCanvasGTK4.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)rc   r.   ©rd   rD   r%   r&   Ú	idle_draw  s    
z-FigureCanvasGTK4.draw_idle.<locals>.idle_draw)r.   r   Zidle_add)r>   rx   r%   rD   r&   rY   ý   s    
zFigureCanvasGTK4.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S rP   )r   ZMainContextr!   ÚpendingÚ	iteration)r>   Úcontextr%   r%   r&   Úflush_events	  s    
zFigureCanvasGTK4.flush_events)N)Ú__name__Ú
__module__Ú__qualname__Zrequired_interactive_frameworkZsupports_blitÚ	TimerGTK4Z
_timer_clsro   r,   rC   rE   rF   rK   r=   r4   r5   r6   r7   r8   r:   r9   r2   rQ   r3   rg   r0   ri   rh   rc   rY   r|   r%   r%   r%   r&   r(   5   s6   
,	%r(   c                       sX   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚFigureManagerGTK4a5  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Box
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window

    c           	         sT  t ƒ }t ¡ ˆ _| ˆ j¡ tƒ  ||¡ t ¡ ˆ _ˆ j 	dtj
j¡ ˆ j ˆ j¡ ˆ j ˆ j¡ ˆ j ¡ \}}ˆ  ¡ ˆ _ˆ jržt ˆ j¡ ˆ jržt ˆ j¡ ˆ jd urètjtjjd�}| ˆ j¡ ˆ j |¡ ˆ j ¡ \}}||j7 }ˆ j ||¡ dˆ _ˆ j d‡ fdd„¡ ˆ j d‡ fdd„¡ t  ¡ �rFˆ j !¡  ˆ j "¡  ˆ j #¡  d S )	NÚorientation)Zvscrollbar_policyFrE   c                     s
   t  ˆ ¡S rB   ©r   rE   rw   rD   r%   r&   Ú<lambda>?  ó    z,FigureManagerGTK4.__init__.<locals>.<lambda>zclose-requestc                     s
   t  ˆ ¡S rB   rƒ   rw   rD   r%   r&   r„   @  r…   )$r   r   ZWindowÚwindowZ
add_windowr]   r,   ÚBoxZvboxÚset_propertyÚOrientationr<   Ú	set_childÚprependÚcanvasÚget_width_heightÚ_get_toolbarÚtoolbarÚtoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerZScrolledWindowZ
PolicyTypeZNEVERÚappendÚget_preferred_sizerH   Úset_default_sizeÚ_destroyingr1   ÚmplÚis_interactiveÚshowrY   rN   )	r>   rŒ   ÚnumZapprs   rt   ÚswÚmin_sizeÚnat_size©Ú	__class__rD   r&   r,      s8    







zFigureManagerGTK4.__init__c                 G   s(   | j r
d S d| _ | j ¡  | j ¡  d S rP   )r”   r†   rE   rŒ   )r>   rd   r%   r%   r&   rE   G  s
    
zFigureManagerGTK4.destroyc                 C   sB   | j  ¡  | j ¡  tjd r>| j  ¡ r4| j  ¡  n
t 	d¡ d S )Nzfigure.raise_windowz#Cannot raise window yet to be setup)
r†   r—   rŒ   rc   r•   ÚrcParamsZget_surfaceZpresentr   Zwarn_externalrD   r%   r%   r&   r—   R  s    



zFigureManagerGTK4.showc                 C   s$   | j  ¡ s| j  ¡  n
| j  ¡  d S rB   )r†   Zis_fullscreenZ
fullscreenZunfullscreenrD   r%   r%   r&   Úfull_screen_toggle`  s    
z$FigureManagerGTK4.full_screen_togglec                 C   s@   t jd dkrt| j| jƒ}nt jd dkr8t| jƒ}nd }|S )Nr�   Ztoolbar2r�   )r•   rž   ÚNavigationToolbar2GTK4rŒ   r†   ÚToolbarGTK4r�   )r>   r�   r%   r%   r&   rŽ   f  s    zFigureManagerGTK4._get_toolbarc                 C   s
   | j  ¡ S rB   )r†   Z	get_titlerD   r%   r%   r&   Úget_window_titleq  s    z"FigureManagerGTK4.get_window_titlec                 C   s   | j  |¡ d S rB   )r†   Ú	set_title)r>   Útitler%   r%   r&   Úset_window_titlet  s    z"FigureManagerGTK4.set_window_titlec                 C   sZ   t || jj ƒ}t || jj ƒ}| jr>| j ¡ \}}||j7 }| j ¡ }| j ||¡ dS )zSet the canvas size in pixels.N)	ÚintrŒ   rG   r�   r’   rH   Zget_allocationr†   r“   )r>   r[   rH   rš   r›   Zcanvas_sizer%   r%   r&   r)   w  s    

zFigureManagerGTK4.resize)r}   r~   r   Ú__doc__r,   rE   r—   rŸ   rŽ   r¢   r¥   r)   Ú__classcell__r%   r%   rœ   r&   r�     s   'r�   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r    c           
      C   s(  || _ tj | ¡ |  d¡ i | _| jD ]²\}}}}|d u rL|  t ¡ ¡ q(tj	 
tj tt d|› d�¡ƒ¡¡}|dv r‚t ¡ nt ¡  | j|< }| |¡ | d¡ | d¡ | dt| |ƒ¡|_| |¡ |  |¡ q(t ¡ }	|	 d¡ |	 d	¡ |  |	¡ t ¡ | _|  | j¡ t | |¡ d S )
Nr�   Zimagesú-symbolic.svg)ZzoomÚpanÚflatúimage-buttonÚclickedõ   <small>Â 
Â </small>T)Úwinr   r‡   r,   Úadd_css_classZ_gtk_idsZ	toolitemsr‘   Ú	SeparatorÚImageÚnew_from_giconr   ÚIconÚnew_for_stringÚstrr   Z_get_data_pathÚToggleButtonÚButtonrŠ   r1   ÚgetattrZ_signal_handlerÚset_tooltip_textÚLabelÚ
set_markupr-   Úmessager
   )
r>   rŒ   r†   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimageÚbuttonÚlabelr%   r%   r&   r,   ƒ  sF    
ÿÿÿþ



ÿ
ÿ


zNavigationToolbar2GTK4.__init__c                    sh  t jdˆ j ¡ t jjdd�}|ˆ _t  ¡ }| d¡ | 	d¡ | 
|¡ | |¡ g }d }tˆ j ¡  ¡ ƒD ]^\}\}}t  ¡ }| |¡ |D ]}	| 	d|	› �¡ qŽ| 
|¡ | |¡ ˆ j ¡ |v rl|}ql|| g|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)r¤   Ú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 nR tyÎ } z:tjˆ j ¡ tjjtjjdt|ƒd�}| ¡  W Y d }~n
d }~0 0 d S )NrÈ   r   rÉ   )rÈ   T)rÄ   Zmessage_typeZbuttonsrÆ   r¾   )Zget_fileZ
get_choicerŒ   Úget_supported_filetypes_groupedrE   Ú_save_dialogr   ZResponseTypeZACCEPTr•   rž   Z
get_parentÚget_pathr?   ZsavefigÚ	ExceptionZMessageDialogÚget_rootZMessageTypeÚERRORZButtonsTypeÚOKr¶   r—   )ÚdialogrÊ   ÚfileÚfmtÚparentÚeÚmsgrD   r%   r&   Úon_responseÒ  s(    

üz7NavigationToolbar2GTK4.save_figure.<locals>.on_response)"r   ZFileChooserNativerŒ   rÏ   ZFileChooserActionZSAVErÌ   Z
FileFilterÚset_nameZadd_patternÚ
add_filterZ
set_filterÚ	enumeraterË   Úitemsr‘   Zget_default_filetypeZ
add_choiceZ
set_choiceZset_current_folderr   ÚFileZnew_for_pathÚosÚpathÚ
expanduserr•   rž   Zset_current_nameZget_default_filenameÚ	functoolsÚpartialr1   r—   )r>   rd   rÒ   ÚffÚformatsÚdefault_formatÚiÚnameZfmtsrÔ   rØ   r%   rD   r&   Úsave_figure­  sJ    ü



ÿ


ÿ
ÿz"NavigationToolbar2GTK4.save_figureN)r}   r~   r   r,   rè   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 )r¡   r©   c                 C   sŠ   t  | |¡ tj | ¡ |  dtjj¡ t ¡ | _|  | j¡ i | _	i | _
t ¡ }| d¡ | d¡ |  |¡ t ¡ | _|  | j¡ d S )Nr‚   r®   T)r   r,   r   r‡   rˆ   r‰   Z
HORIZONTALÚ	_tool_boxr‘   Ú_groupsÚ
_toolitemsr»   r¼   r-   Ú_message)r>   r�   rÃ   r%   r%   r&   r,   ï  s    
ÿ


zToolbarGTK4.__init__c           
      C   s´   |rt  ¡ }nt  ¡ }| |¡ | d¡ |d urZt j tj 	|¡¡}| 
|¡ | d¡ |d u rfd}|  |||¡ | d| j|¡}	| |¡ | j |g ¡ | j|  ||	f¡ d S )Nr«   r¬   éÿÿÿÿr­   )r   r·   r¸   Ú	set_labelr°   r²   r³   r   r´   rµ   rŠ   Ú_add_buttonr1   Ú
_call_toolrº   rë   Ú
setdefaultr‘   )
r>   rç   ÚgroupÚpositionr¿   ÚdescriptionÚtogglerÂ   rÁ   Úsignalr%   r%   r&   Úadd_toolitem  s$    



ÿ


zToolbarGTK4.add_toolitemc                 C   s8   d g}| j |  ¡ }|d ur0| |¡ | ¡ }q|| S rB   )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 vr6| j r|  ¡  t ¡ }| j |¡ || j |< | j |  ||  ||¡¡ d S rB   )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 rB   )Ztrigger_tool)r>   Zbtnrç   r%   r%   r&   rð   1  s    zToolbarGTK4._call_toolc                 C   sD   || j vrd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S rB   )rë   Zhandler_blockZ
set_activeZhandler_unblock)r>   rç   ZtoggledÚtoolitemrö   r%   r%   r&   Útoggle_toolitem4  s    


zToolbarGTK4.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ê   Úremove)r>   rç   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‰   r<   ré   r‘   )r>   Úsepr%   r%   r&   rý   G  s    zToolbarGTK4._add_separatorc                 C   s   | j  |¡ d S rB   )rì   rî   )r>   Úsr%   r%   r&   Úset_messageL  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                    s   G ‡ fdd„dƒ}t  |ƒ ¡S )Nc                       s   e Zd Z” jjZdS )z-SaveFigureGTK4.trigger.<locals>.PseudoToolbarN)r}   r~   r   r?   rŒ   r%   rD   r%   r&   ÚPseudoToolbarS  s   r  )r    rè   )r>   rd   re   r  r%   rD   r&   ÚtriggerQ  s    zSaveFigureGTK4.triggerN©r}   r~   r   r  r%   r%   r%   r&   r  P  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
 }||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 `FigureCanvasGTK4._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%   )rl   Úmodr%   r%   r&   Ú
<listcomp>h  r…   z0HelpGTK4._normalize_shortcut.<locals>.<listcomp>Nrí   r   z<shift>Ú )ÚsplitÚlenÚ
capitalizeÚisupperÚjoin)r>   r@   ZspecialÚpartsÚmodsr%   r%   r&   Ú_normalize_shortcutZ  s    ü



zHelpGTK4._normalize_shortcutc                 C   s   d|v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_shortcutt  s    zHelpGTK4._is_valid_shortcutc           	         sÈ   t  ¡ }tˆ jj ¡ ƒD ]€\}}|js(qt  ¡ }| |¡ | 	¡ }|d u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 rB   )r  r  )rl   r@   rD   r%   r&   rn   ‘  s   
þz#HelpGTK4.trigger.<locals>.<genexpr>)Zacceleratorr¤   ÚsubtitleZHelpT)r¤   rÆ   rÄ   )r   ZShortcutsSectionÚsortedr�   ZtoolsrÜ   rô   ZShortcutsGroupr‘   rø   Zset_visiblerù   ZShortcutsShortcutr  Zget_tool_keymaprç   ZShortcutsWindowZ_figurerŒ   rÏ   rŠ   r—   )	r>   rd   Úsectionrç   Ztoolrò   rû   Zshortcutr†   r%   rD   r&   r  }  s2    



þú
ý
zHelpGTK4.triggerN)r}   r~   r   r  r  r  r%   r%   r%   r&   r
  Y  s   	r
  c                   @   s   e Zd Zdd„ ZdS )ÚToolCopyToClipboardGTK4c                 O   s~   t  ¡ �N}| j |¡ | j ¡ \}}tj | ¡ tj	j
dd|||d ¡}W d   ƒ n1 s\0    Y  | j ¡ }| |¡ d S )NTé   é   )ÚioÚBytesIOrŒ   Z
print_rgbar�   r   ZPixbufZnew_from_dataÚ	getbufferZ
ColorspaceÚRGBZget_clipboardÚset)r>   rd   re   Úfrs   rt   ZpbÚ	clipboardr%   r%   r&   r  £  s    
þ"
zToolCopyToClipboardGTK4.triggerNr	  r%   r%   r%   r&   r  ¢  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(  )Hrá   r!  rÞ   Úpathlibr   ÚsysZ
matplotlibr•   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   ÚgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorrÖ   Zgi.repositoryr   r   r   r   r   r   Z_backend_gtkr   r   r   r   r   r   r€   r   ZConfigureSubplotsGTK4r   ZRubberbandGTK4r'   ZDrawingArear(   r�   r‡   r    r¡   ZSaveFigureBaser  ZToolHelpBaser
  ZToolCopyToClipboardBaser  ZToolSaveFigureZToolConfigureSubplotsZToolRubberbandZToolHelpZToolCopyToClipboardZToolbarZexportr(  r%   r%   r%   r&   Ú<module>   sL      (	 \rjd	I