a
    s=icmP  ã                
   @   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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 dd	lmZ dd
lmZmZmZm Z! ddl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)ÚFigureCanvasBaseÚToolContainerBaseÚKeyEventÚLocationEventÚ
MouseEventÚResizeEventz#The GTK4 backends require PyGObjectÚGtkz4.0)ÚGioÚGLibr   ÚGdkÚ	GdkPixbufé   )Ú_backend_gtk)Ú_BackendGTKÚ_FigureManagerGTKÚ_NavigationToolbar2GTKÚTimerGTK)Úbackend_versionc                       sæ   e Zd ZdZdZeZe dd„ ¡Z	dZ
d2‡ fdd„	Zdd	„ Zd
d„ Zd3d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 ‡  Z!S )4ÚFigureCanvasGTK4Zgtk4Fc                 C   s   t S ©N)ÚFigureManagerGTK4)Úcls© r   úq/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/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j"¡ | #d¡ d S )N)ÚfigureTr   Úresizeznotify::scale-factorZpressedZreleasedzkey-pressedzkey-releasedÚmotionÚenterZleaveÚscrolls/   .matplotlib-canvas { background-color: white; }z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load_from_dataZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_class)Úselfr   ÚclickÚkeyr!   r#   ÚcssZ	style_ctx©Ú	__class__r   r   r%   )   sB    





ÿ


zFigureCanvasGTK4.__init__c                 C   s   |   ¡  d S r   )Zclose_event©r7   r   r   r   ÚdestroyT   s    zFigureCanvasGTK4.destroyc                 C   s   |   t |¡¡ d S r   )Zset_cursor_from_namer   Zmpl_to_gtk_cursor_name)r7   Úcursorr   r   r   Ú
set_cursorW   s    zFigureCanvasGTK4.set_cursorc                 C   sb   |du 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)
Z
get_nativeZget_surfaceZget_device_positionZget_displayZget_default_seatZget_pointerÚdevice_pixel_ratior   ZbboxÚheight)r7   ZxyZsurfaceZis_overÚxÚyÚmaskr   r   r   Ú_mpl_coords[   s    ÿ
zFigureCanvasGTK4._mpl_coordsc                 C   s$   t d| g|  ¡ ¢R d|iŽ ¡  dS )Nr6   ÚstepT©r	   rF   Ú_process)r7   Ú
controllerZdxZdyr   r   r   r6   q   s    ÿÿ
zFigureCanvasGTK4.scroll_eventc                 C   s4   t d| g|  ||f¡¢| ¡ ‘R Ž  ¡  |  ¡  d S )Nr-   )r	   rF   Úget_current_buttonrI   Z
grab_focus©r7   rJ   Zn_pressrC   rD   r   r   r   r-   v   s    ÿÿz#FigureCanvasGTK4.button_press_eventc                 C   s,   t d| g|  ||f¡¢| ¡ ‘R Ž  ¡  d S )Nr.   )r	   rF   rK   rI   rL   r   r   r   r.   |   s
    ÿÿz%FigureCanvasGTK4.button_release_eventc                 C   s*   t d| |  |||¡g|  ¡ ¢R Ž  ¡  dS )Nr/   T©r   Ú_get_keyrF   rI   ©r7   rJ   ÚkeyvalÚkeycodeÚstater   r   r   r/      s    ÿÿz FigureCanvasGTK4.key_press_eventc                 C   s*   t d| |  |||¡g|  ¡ ¢R Ž  ¡  dS )Nr0   TrM   rO   r   r   r   r0   ‡   s    ÿÿz"FigureCanvasGTK4.key_release_eventc                 C   s$   t d| g|  ||f¡¢R Ž  ¡  d S )Nr1   rH   ©r7   rJ   rC   rD   r   r   r   r1      s    ÿz$FigureCanvasGTK4.motion_notify_eventc                 C   s   t d| g|  ¡ ¢R Ž  ¡  d S )NZfigure_leave_event©r   rF   rI   )r7   rJ   r   r   r   r3   ‘   s    ÿz#FigureCanvasGTK4.leave_notify_eventc                 C   s$   t d| g|  ||f¡¢R Ž  ¡  d S )NZfigure_enter_eventrT   rS   r   r   r   r2   •   s    ÿz#FigureCanvasGTK4.enter_notify_eventc                 C   sX   |   ¡  | jj}|| j | }|| j | }| jj||dd td| ƒ ¡  |  ¡  d S )NF)Úforwardr+   )r,   r   ÚdpirA   Zset_size_inchesr
   rI   Ú	draw_idle)r7   ZareaÚwidthrB   rV   ZwinchZhinchr   r   r   r+   ™   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Úshiftr$   ú+)Úchrr   Zkeyval_to_unicoder   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZALT_MASKZ
SHIFT_MASKZ
SUPER_MASKÚisprintable)	r7   rP   rQ   rR   Zunikeyr9   Ú	modifiersZkey_maskÚprefixr   r   r   rN   ¢   s    þ



üzFigureCanvasGTK4._get_keyc                 O   s   |   |  ¡ ¡r|  ¡  d S r   )Z_set_device_pixel_ratioZget_scale_factorÚdraw©r7   ÚargsÚkwargsr   r   r   r,   ³   s    z+FigureCanvasGTK4._update_device_pixel_ratioc                 C   s   || _ |  ¡  d S r   )r(   Ú
queue_draw)r7   Úrectr   r   r   Ú_draw_rubberband¹   s    z!FigureCanvasGTK4._draw_rubberbandc                 C   s   |   | |¡ |  | |¡ d S r   )Úon_draw_eventÚ
_post_draw)r7   Zdrawing_areaÚctxrX   rB   r   r   r   r)   ¾   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 r   )rA   )Ú.0Údimr=   r   r   Ú	<genexpr>É   s   ÿz.FigureCanvasGTK4._post_draw.<locals>.<genexpr>r   )r(   Ú_context_is_scaledrA   Úmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveÚstroke)r7   Úwidgetrh   ZlwÚdashZx0Zy0ÚwÚhÚx1Úy1r   r=   r   rg   Â   s:    

ÿ



zFigureCanvasGTK4._post_drawc                 C   s   d S r   r   )r7   rp   rh   r   r   r   rf   ç   s    zFigureCanvasGTK4.on_draw_eventc                 C   s   |   ¡ r|  ¡  d S r   )Zis_drawablerc   r=   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 dˆ _ndˆ _0 dS )Nr   F)r_   r'   )ra   r=   r   r   Ú	idle_drawô   s    
z-FigureCanvasGTK4.draw_idle.<locals>.idle_draw)r'   r   Zidle_add)r7   rv   r   r=   r   rW   ð   s    
zFigureCanvasGTK4.draw_idlec                 C   s"   t j ¡ }| ¡ r| d¡ q
d S )NT)r   ZMainContextÚdefaultÚpendingÚ	iteration)r7   Úcontextr   r   r   Úflush_eventsü   s    
zFigureCanvasGTK4.flush_events)N)N)"Ú__name__Ú
__module__Ú__qualname__Zrequired_interactive_frameworkZsupports_blitÚ	TimerGTK4Z
_timer_clsr   ZclasspropertyZmanager_classrm   r%   r>   r@   rF   r6   r-   r.   r/   r0   r1   r3   r2   r+   rN   r,   re   r)   rg   rf   r_   rW   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 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jj¡ |  | j¡ t | |¡ d S )
NZtoolbarZimagesú-symbolic.svg)ZzoomÚ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   )
r7   Úcanvasr‚   ÚtextZtooltip_textÚ
image_fileÚcallbackÚimageÚbuttonÚlabelr   r   r   r%     sH    
ÿÿÿþ



ÿ
ÿ


zNavigationToolbar2GTK4.__init__c                 C   s   | j S r   )r‰   r=   r   r   r   r   0  r   zNavigationToolbar2GTK4.<lambda>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)Ú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 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_groupedr>   Ú_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Úmsgr=   r   r   Úon_responseW  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Úpartialr*   r¶   )r7   ra   r·   ÚffÚformatsÚdefault_formatÚiÚnameZfmtsr¹   r½   r   r=   r   Úsave_figure2  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   )r7   Útoolmanagerr¤   r   r   r   r%   t  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_buttonr*   Ú
_call_toolr—   r×   Ú
setdefaultrŒ   )
r7   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 r   )rÖ   Úget_first_childrŒ   Úget_next_sibling)r7   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 r   )rÖ   Ú_add_separatorr   rŠ   rÕ   rŒ   Zinsert_child_afterré   )r7   r£   rß   rà   Z	group_boxr   r   r   rÜ   ­  s    


ÿzToolbarGTK4._add_buttonc                 C   s   |   |¡ d S r   )Ztrigger_tool)r7   ZbtnrÌ   r   r   r   rÝ   ·  s    zToolbarGTK4._call_toolc                 C   sD   || j vrd S | j | D ]&\}}| |¡ | |¡ | |¡ qd S r   )r×   Zhandler_blockZ
set_activeZhandler_unblock)r7   rÌ   ZtoggledÚtoolitemrã   r   r   r   Útoggle_toolitemº  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)r7   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Ô   r5   rÕ   rŒ   )r7   Úsepr   r   r   rê   Í  s    zToolbarGTK4._add_separatorc                 C   s   | j  |¡ d S r   )rØ   rÛ   )r7   Ú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Ñ   q  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
 }||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_lockrZ   c                 S   s   g | ]}d | d ‘qS )ú<ú>r   )rj   Úmodr   r   r   Ú
<listcomp>í  r   z0HelpGTK4._normalize_shortcut.<locals>.<listcomp>NrÚ   r   z<shift>Ú )ÚsplitÚlenÚ
capitalizeÚisupperÚjoin)r7   r9   ZspecialÚpartsÚmodsr   r   r   Ú_normalize_shortcutß  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)r7   r9   r   r   r   Ú_is_valid_shortcutù  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 r   )r  r  )rj   r9   r=   r   r   rl     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¶   )	r7   ra   ÚsectionrÌ   Ztoolrß   rè   Zshortcutr‚   r   r=   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   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_rgbaZget_width_heightr   ZPixbufZnew_from_dataÚ	getbufferZ
ColorspaceÚRGBZget_clipboardÚset)r7   ra   rb   Úfrr   rs   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 )r   N)r|   r}   r~   r   Z_toolbar2_classrÑ   Z_toolmanager_toolbar_classr   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  )5rÆ   r  rÃ   Z
matplotlibr¯   r   r   r   Zmatplotlib.backend_basesr   r   r   r   r	   r
   ÚgiÚImportErrorÚerrZrequire_versionÚ
ValueErrorr»   Zgi.repositoryr   r   r   r   r   rû   r   r   r   r   r   r   r   ZDrawingArear   rŠ   r   rÑ   Z_register_tool_classZSaveFigureBaseró   ZToolHelpBaserö   ZToolCopyToClipboardBaser
  ZConfigureSubplotsGTKZRubberbandGTKZToolbarr   Úexportr  r   r   r   r   Ú<module>   sJ      bneIÿÿ