o
    i-U                  
   @   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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yG Z zededZ[ww zedd W n eya Z zeeedZ[ww 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(dd 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0e+G dd dej1Z2e0e+G dd dej3Z4e0e+G dd dej5Z6e/Z,e0e+ej7 e0e+ej8 G dd de!Z9e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                 C   s   t jt j t| S N)r   ZCursorZnew_from_nameZDisplayget_defaultr   Zmpl_to_gtk_cursor_name)Z
mpl_cursor r   o/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/matplotlib/backends/backend_gtk3.py_mpl_to_gtk_cursor%   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d4d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 )5FigureCanvasGTK3Zgtk3c                 C   s   t S r   )FigureManagerGTK3)clsr   r   r   <lambda>.   s    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connectr"   r#   r$   r%   _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)selfr!   cssZ	style_ctxr5   r   r   r.   ;   s0   

zFigureCanvasGTK3.__init__c                 C   s   t d|   d S )NZclose_event)r   _processr7   r   r   r   destroyZ   s   zFigureCanvasGTK3.destroyc                 C   s<   |  d}|d ur|t| tj }|d d S d S )NwindowT)get_property
set_cursorr   r   MainContextdefault	iteration)r7   cursorr=   contextr   r   r   r?   ]   s   

zFigureCanvasGTK3.set_cursorc                 C   sd   |du r|   }||   \}}}}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_ratior!   Zbboxheight)r7   eventr=   trG   rH   stater   r   r   _mpl_coordse   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   r"   )step	modifiersguiEventF)		directionr   ZScrollDirectionZUPr
   rN   _mpl_modifiersrM   r:   )r7   widgetrK   rP   r   r   r   r"   {   s   
zFigureCanvasGTK3.scroll_eventc                 C   6   t d| g| ||jR | |j|d  dS )Nr#   rQ   rR   Fr
   rN   buttonrT   rM   r:   r7   rU   rK   r   r   r   r#         
z#FigureCanvasGTK3.button_press_eventc                 C   rV   )Nr$   rW   FrX   rZ   r   r   r   r$      r[   z%FigureCanvasGTK3.button_release_eventc                 C   ,   t d| | |g|  R d|i  dS )Nr'   rR   Tr   _get_keyrN   r:   rZ   r   r   r   r'         z FigureCanvasGTK3.key_press_eventc                 C   r\   )Nr(   rR   Tr]   rZ   r   r   r   r(      r_   z"FigureCanvasGTK3.key_release_eventc                 C   s0   t d| g| |R | |j|d  dS )Nr)   rW   F)r
   rN   rT   rM   r:   rZ   r   r   r   r)      s   
z$FigureCanvasGTK3.motion_notify_eventc                 C   B   t j|   }td| g| |R | ||d  d S )NZfigure_enter_eventrW   	r   ZKeymapZget_for_displayrF   Zget_modifier_stater	   rN   rT   r:   r7   rU   rK   Zgtk_modsr   r   r   r*         
z#FigureCanvasGTK3.enter_notify_eventc                 C   r`   )NZfigure_leave_eventrW   ra   rb   r   r   r   r+      rc   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)	r!   dpiwidthrI   rJ   set_size_inchesr   r:   	draw_idle)r7   rU   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_staterk   r   r   
<listcomp>   s    z3FigureCanvasGTK3._mpl_modifiers.<locals>.<listcomp>)r   ZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASK)rs   rk   rQ   r   rr   r   rT      s   zFigureCanvasGTK3._mpl_modifiersc                 C   s`   t t|j}t|t|j}| j|j|d}d|v r'|	 r'|
d dg ||S )Nrj   rm   +)chrr   Zkeyval_to_unicodekeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_namerT   rM   isprintableremovejoin)r7   rK   Zunikeyrq   modsr   r   r   r^      s   
zFigureCanvasGTK3._get_keyc                 O   s&   |  |  r|   |   d S d S r   )Z_set_device_pixel_ratioZget_scale_factorZqueue_resize
queue_drawr7   argskwargsr   r   r   r2      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 )Nr=      Frd   )r>   rg   rI   rJ   r!   rf   rh   )r7   rU   rK   whrf   r   r   r   r%      s   z FigureCanvasGTK3.configure_eventc                 C   s   || _ |   d S r   )r0   r|   )r7   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   )rI   )rn   dimr;   r   r   	<genexpr>   s    z.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r   r   r   r   )	r0   move_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preservestroke)	r7   rU   ctxZx0Zy0r   r   x1y1r   r;   r   r4      s.   



zFigureCanvasGTK3._post_drawc                 C   s   d S r   r   )r7   rU   r   r   r   r   r3     s   zFigureCanvasGTK3.on_draw_eventc                 C   s   |   r
|   d S d S r   )Zis_drawabler|   r;   r   r   r   r&   
  s   zFigureCanvasGTK3.drawc                    s*    j dkrd S  fdd}t| _ d S )Nr   c                     s   z
    W d _dS d _w )Nr   F)r&   r/   )r~   r;   r   r   	idle_draw  s
   
z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)r/   r   Zidle_add)r7   r   r   r;   r   ri     s   
zFigureCanvasGTK3.draw_idlec                 C   s,   t j }| r|d | s	d S d S )NT)r   r@   rA   pendingrB   )r7   rD   r   r   r   flush_events  s   

zFigureCanvasGTK3.flush_eventsr   ),__name__
__module____qualname__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_MASKr6   r.   r<   r?   rN   r"   r#   r$   r'   r(   r)   r*   r+   r,   staticmethodrT   r^   r2   r%   r   r4   r3   r&   ri   r   __classcell__r   r   r9   r   r   ,   sX    


	
r   c                   @   s   e Zd Zdd Zdd ZdS )NavigationToolbar2GTK3c           
      C   sf  t j |  | tjj i | _| jD ]Y\}}}}|d u r&| t	 d qtj
tjttd| dtjj}|dv rDt nt  | j|< }|| || |dt| ||_|| | |d qt }| |d t }	|	d |d | |	 t }| |d t | _!| j!"tj#j$ | | j! | %  t&| | d S )NrO   Zimages-symbolic.svg)Zzoompanclickedu   <small> 
 </small>T)'r   r.   	set_styler   ToolbarStyleICONSZ_gtk_idsZ	toolitemsinsertZSeparatorToolItemImagenew_from_giconr   Iconnew_for_stringstrr   Z_get_data_pathIconSizeLARGE_TOOLBARToggleToolButton
ToolButton	set_labelset_icon_widgetr1   getattrZ_signal_handlerset_tooltip_textZToolItemLabelZ
set_markupZ
set_expandaddmessageset_justifyJustificationRIGHTshow_allr   )
r7   canvastextZtooltip_text
image_filecallbackimagerY   toolitemlabelr   r   r   r.   #  sP   






zNavigationToolbar2GTK3.__init__c           
   
      s  t jdj t jjt jt jjt j	t jj
fd j  D ]+\}}t  }|| |D ]
}|d|  q. | j |v rJ | qt jd fdd} tjd   j   d   }  }  }j |  d	 }    |t jj
krd S tjd rt!j"#|tjd< zjj$j%||d
 W d S  t&y }	 z!t j'j t(|	t j)j*t j+j
d        W Y d }	~	d S d }	~	ww )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~   ro   fmtdialogr7   r   r   on_notify_filtere  s
   z<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )format)r   Z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_filter	functoolspartialr1   Zset_current_foldermplZrcParamsr   Zget_default_filenameZset_do_overwrite_confirmationrunget_filenamer   r   r<   ospathdirnamer!   Zsavefig	ExceptionMessageDialogr   MessageTypeERRORButtonsType)
r7   r~   ro   Zfmtsffr   r   responsefnameer   r   r   save_figureS  sV   







z"NavigationToolbar2GTK3.save_figureN)r   r   r   r.   r   r   r   r   r   r   "  s    0r   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   r.   r   Boxset_propertyOrientationZ
HORIZONTALr   _messager   r   r   Zpack_endr   _groups
_toolitems)r7   toolmanagerr   r   r   r.     s   

zToolbarGTK3.__init__c           
      C   s   |rt  }nt  }|| |d ur&t jtj|t j	j
}|| |d u r,d}| ||| |d| j|}	|| |  | j|g  | j| ||	f d S )NrO   r   )r   r   r   r   r   r   r   r   r   r   r   r   _add_buttonr1   
_call_toolr   r   r   
setdefaultappend)
r7   ro   grouppositionr   descriptiontogglerY   r   signalr   r   r   add_toolitem  s$   




zToolbarGTK3.add_toolitemc                 C   sf   || j vr(| j r|   t }|tjj | |ddd |  || j |< | j | 	|| d S )NFr   )
r   _add_separatorr   Toolbarr   r   r   
pack_startr   r   )r7   rY   r   r   Ztoolbarr   r   r   r     s   

zToolbarGTK3._add_buttonc                 C   s   |  | d S r   )Ztrigger_tool)r7   Zbtnro   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)r7   ro   Ztoggledr   r   r   r   r   toggle_toolitem  s   


zToolbarGTK3.toggle_toolitemc                 C   sl   || j vr| j| d|  d S | jD ]}| j | D ]\}}|| j| v r.| j| | qq| j |= d S )Nz not in toolbar)r   r   Zmessage_eventr   ry   )r7   ro   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   )r7   sepr   r   r   r     s   zToolbarGTK3._add_separatorc                 C   s   | j | d S r   )r   r   )r7   sr   r   r   set_message  s   zToolbarGTK3.set_messageN)r   r   r   Z_icon_extensionr.   r   r   r   r   r   r   r   r   r   r   r   r     s    r   c                   @      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         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 r$|| }nt|dkr/| }n	| r8|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_lockru   c                 S   s   g | ]}d | d qS )<>r   )rn   modr   r   r   rt     s    z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>NrO   r   z<shift> )splitlen
capitalizeisupperrz   )r7   rq   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)r7   rq   r   r   r   _is_valid_shortcut  s   zHelpGTK3._is_valid_shortcutc                    s   t  }t jj D ]6\}}|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)rU   datar   r   r   r      s   
 z1HelpGTK3._show_shortcuts_window.<locals>.<lambda> c                 3   s$    | ]}  |r |V  qd S r   )r  r	  )rn   rq   r;   r   r   r     s    
z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorr   subtitleHelpT)r   modalZtransient_for)r   ZShortcutsSectionsortedr   Ztoolsr   r   ZShortcutsGroupr   forallZShortcutsShortcutrz   Zget_tool_keymapro   ZShortcutsWindow_figurer   r   showr   )r7   sectionro   Ztoolr   Zshortcutr=   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   r<   )r7   r   r   r   r   _show_shortcuts_dialog#  s   
zHelpGTK3._show_shortcuts_dialogc                 G   s*   t dddd u r|   d S |   d S )Nr      r   )r   Zcheck_versionr  r  )r7   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                   @   r   )ToolCopyToClipboardGTK3c           
      O   sH   t jtj}| j }| \}}}}t|||||}	|	|	 d S r   )
r   Z	Clipboardgetr   ZSELECTION_CLIPBOARDr   rE   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r7   r~   r   	clipboardr=   rG   rH   rg   rJ   Zpbr   r   r   r   4  s
   
zToolCopyToClipboardGTK3.triggerNr   r   r   r   r   r  2  r   r  c                   @      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   C  s    r   c                   @   r  )_BackendGTK3N)r   r   r   r   ZFigureCanvasr   ZFigureManagerr   r   r   r   r  H  s    r  )<r   loggingr   pathlibr   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   Z	TimerGTK3	getLoggerr   _logcacher   ZDrawingArear   r   r   r   r   Z_register_tool_classZSaveFigureBaser   ZToolHelpBaser   ZToolCopyToClipboardBaser  ZConfigureSubplotsGTKZRubberbandGTKr   Zexportr  r   r   r   r   <module>   sZ     



 wbQU	