o
    j*\                  
   @   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mZ zd dlmZ W n eyE Z zededZ[ww zedd W n ey^ Z zeeedZ[ww d dlZ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j%dkZ&e'ddd du 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/Z0e.e*G dd dej1Z2e.e*G dd dej3Z4e.e*ej5 e.e*ej6 e-Z7G dd de!Z8ej9G dd deZ:dS )    N)_apibackend_toolscbook)ToolContainerBaseMouseButtonKeyEventLocationEvent
MouseEventResizeEvent
CloseEvent)require_versionz#The GTK4 backends require PyGObjectGtkz4.0)GioGLibr   Gdk	GdkPixbuf   )_backend_gtk)_BackendGTK_FigureCanvasGTK_FigureManagerGTK_NavigationToolbar2GTKTimerGTK)   /   r         c                       s   e Zd ZdZdZedd Zd8 fdd	Zdd	 Z	d
d Z
d8d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d8d"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z   Z!S )9FigureCanvasGTK4Zgtk4Fc                 C   s   t S N)FigureManagerGTK4)cls r!   a/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/matplotlib/backends/backend_gtk4.py<lambda>(   s    zFigureCanvasGTK4.<lambda>Nc           	         s  t  j|d | d | d d| _d | _| | j | d| j	 t
r.| d| j n| 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 u r|"|d n|"|#d | $ }|%|tj& |'d d S )N)figureTr   resizeZrealizeznotify::scale-factorZpressedZreleasedzkey-pressedzkey-releasedmotionZenterZleavescrollz/.matplotlib-canvas { background-color: white; }r   	   r   zutf-8zmatplotlib-canvas)(super__init__set_hexpandZset_vexpand_idle_draw_id_rubberband_rectZset_draw_func
_draw_funcconnectresize_event_GTK_GE_4_12_realize_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CssProvider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+   *   sL   







zFigureCanvasGTK4.__init__c                 C   s   t d|   d S )NZclose_event)r   _processrA   r!   r!   r"   destroy\   s   zFigureCanvasGTK4.destroyc                 C   s   |  t| d S r   )Zset_cursor_from_namer   Zmpl_to_gtk_cursor_name)rA   cursorr!   r!   r"   
set_cursor_   s   zFigureCanvasGTK4.set_cursorc                 C   sb   |du r|    }||    \}}}}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)rA   Zxysurfaceis_overxymaskr!   r!   r"   _mpl_coordsc   s   
zFigureCanvasGTK4._mpl_coordsc                 C   s:   t d| g|  R || |tr| nd d  dS )Nr>   )step	modifiersguiEventT)r	   rY   _mpl_modifiers_GOBJECT_GE_3_47get_current_eventrG   )rA   
controllerZdxZdyr!   r!   r"   r>   y   s   zFigureCanvasGTK4.scroll_eventc                 C   sN   t d| g| ||f| R | |tr| nd d  |   d S )Nr5   r[   r\   )r	   rY   get_current_buttonr]   r^   r_   rG   Z
grab_focusrA   r`   Zn_pressrV   rW   r!   r!   r"   r5      s   z#FigureCanvasGTK4.button_press_eventc                 C   sF   t d| g| ||f| R | |tr| nd d  d S )Nr6   ra   )r	   rY   rb   r]   r^   r_   rG   rc   r!   r!   r"   r6      s   
z%FigureCanvasGTK4.button_release_eventc                 C   <   t d| | |||g|  R dtr| nd i  dS )Nr7   r\   Tr   _get_keyrY   r^   r_   rG   rA   r`   keyvalkeycodestater!   r!   r"   r7         z FigureCanvasGTK4.key_press_eventc                 C   rd   )Nr8   r\   Tre   rg   r!   r!   r"   r8      rk   z"FigureCanvasGTK4.key_release_eventc                 C   sF   t d| g| ||fR | || |tr| nd d  d S )Nr9   )buttonsr[   r\   )r	   rY   _mpl_buttonsr]   r^   r_   rG   rA   r`   rV   rW   r!   r!   r"   r9      s   
z$FigureCanvasGTK4.motion_notify_eventc                 C   s<   t d| g| ||fR |  tr| nd d  d S )NZfigure_enter_eventra   r   rY   r]   r^   r_   rG   rn   r!   r!   r"   r:      s   
z#FigureCanvasGTK4.enter_notify_eventc                 C   s6   t d| g|  R |  tr| nd d  d S )NZfigure_leave_eventra   ro   )rA   r`   r!   r!   r"   r;      s   
z#FigureCanvasGTK4.leave_notify_eventc                 C   sX   |    | jj}|| j | }|| j | }| jj||dd td|   |   d S )NF)forwardr1   )r4   r$   dpirR   Zset_size_inchesr
   rG   	draw_idle)rA   ZareawidthrS   rq   ZwinchZhinchr!   r!   r"   r1      s   zFigureCanvasGTK4.resize_eventc                    s|   |    }||    \}}} tjtj	j
ftjtj	jftjtj	jftjtj	jftjtj	jfg} fdd|D S )Nc                    s   h | ]
\}} |@ r|qS r!   r!   .0namerX   Zevent_stater!   r"   	<setcomp>       z0FigureCanvasGTK4._mpl_buttons.<locals>.<setcomp>)rL   rM   rN   rO   rP   rQ   r   ZLEFTr   ModifierTypeZBUTTON1_MASKZMIDDLEZBUTTON2_MASKRIGHTZBUTTON3_MASKZBACKZBUTTON4_MASKZFORWARDZBUTTON5_MASKrA   r`   rT   rU   rV   rW   Z	mod_tabler!   rw   r"   rm      s   zFigureCanvasGTK4._mpl_buttonsc                    sz   |d u r|    }||    \}}} 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!   rt   rw   r!   r"   
<listcomp>   ry   z3FigureCanvasGTK4._mpl_modifiers.<locals>.<listcomp>)rL   rM   rN   rO   rP   rQ   Zget_current_event_stater   rz   CONTROL_MASKALT_MASK
SHIFT_MASK
SUPER_MASKr|   r!   rw   r"   r]      s   



zFigureCanvasGTK4._mpl_modifiersc                    s|   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g | S )	Nr}   controlr~   r   r*   c                    s6   g | ]\}}}| kr|@ r|d kr  s|qS )r   )isprintable)ru   modrX   Zmod_keyrB   rj   Zunikeyr!   r"   r      s    z-FigureCanvasGTK4._get_key.<locals>.<listcomp>+)chrr   Zkeyval_to_unicoder   Z_unikey_or_keysym_to_mplkeyZkeyval_namerz   r   r   r   r   join)rA   rh   ri   rj   r[   modsr!   r   r"   rf      s   zFigureCanvasGTK4._get_keyc                 C   s&   |    }|d| j |   d S )Nznotify::scale)rL   rM   r0   r4   )rA   objrT   r!   r!   r"   r3      s   zFigureCanvasGTK4._realize_eventc                 O   sD   t r|    }n|  }|d usJ | |r |   d S d S r   )r2   rL   rM   Z	get_scaleZget_scale_factorZ_set_device_pixel_ratiodraw)rA   argskwargsscaler!   r!   r"   r4      s   
z+FigureCanvasGTK4._update_device_pixel_ratioc                 C   s   || _ |   d S r   )r.   
queue_draw)rA   rectr!   r!   r"   _draw_rubberband  s   z!FigureCanvasGTK4._draw_rubberbandc                 C   s   |  | | | | | d S r   )on_draw_event
_post_draw)rA   Zdrawing_areactxrs   rS   r!   r!   r"   r/   
  s   zFigureCanvasGTK4._draw_funcc                    s   j d u rd S d}d} fdd j D \}}}}|| }	|| }
||| |||
 ||| ||	| |||
 ||	|
 ||	| ||	|
 |d || |||fd |ddd |  |||f| |ddd |  d S )Nr   r   c                 3   s    | ]}| j  V  qd S r   )rR   )ru   dimrH   r!   r"   	<genexpr>  s    z.FigureCanvasGTK4._post_draw.<locals>.<genexpr>r   )	r.   move_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preservestroke)rA   widgetr   ZlwdashZx0Zy0whx1y1r!   rH   r"   r     s2   



zFigureCanvasGTK4._post_drawc                 C   s   d S r   r!   )rA   r   r   r!   r!   r"   r   .  s   zFigureCanvasGTK4.on_draw_eventc                 C   s   |   r
|   d S d S r   )Zis_drawabler   rH   r!   r!   r"   r   2  s   zFigureCanvasGTK4.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   rH   r!   r"   	idle_draw;  s
   
z-FigureCanvasGTK4.draw_idle.<locals>.idle_draw)r-   r   Zidle_add)rA   r   r!   rH   r"   rr   7  s   
zFigureCanvasGTK4.draw_idlec                 C   s,   t j }| r|d | s	d S d S )NT)r   ZMainContextdefaultpending	iteration)rA   contextr!   r!   r"   flush_eventsC  s   

zFigureCanvasGTK4.flush_eventsr   )"__name__
__module____qualname__Zrequired_interactive_frameworkZsupports_blitr   ZclasspropertyZmanager_classr+   rI   rK   rY   r>   r5   r6   r7   r8   r9   r:   r;   r1   rm   r]   rf   r3   r4   r   r/   r   r   r   rr   r   __classcell__r!   r!   rE   r"   r   %   s:    2
		
 r   c                   @   s   e Zd Zdd Zdd ZdS )NavigationToolbar2GTK4c           	      C   s2  t j|  | d i | _| jD ]Y\}}}}|d u r#| 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)r   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_childr0   getattrZ_signal_handlerset_tooltip_textLabel
set_markupr,   messageset_justifyJustificationr{   r   )	rA   canvastextZtooltip_text
image_filecallbackimagebuttonlabelr!   r!   r"   r+   K  sF   








zNavigationToolbar2GTK4.__init__c                    sj  t jd j t jjdd}| _t  }|d |	d |
| || g }d }t j  D ]/\}\}}t  }|| |D ]
}	|	d|	  qG|
| ||  j |v re|}q6|| g|d | ||d d  }|dd	|| |d|d
  |tjtjtjd  | j  t|j d fdd}
|!   j"S )NzSave the figureT)titletransient_foractionmodalz	All files*z*.r   formatzFile formatr   savefig.directoryresponsec              
      s   |   }| d} j | d }|   d  _|tjjkr!d S t	j
d r1| }| t	j
d< z jjj| |d W d S  tyi } ztj j tjjtjjdt|d}|  W Y d }~d S d }~ww )Nr   r   r   )r   T)r   Zmessage_typerl   r   r   )Zget_fileZ
get_choicer   get_supported_filetypes_groupedrI   _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msgrH   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partialr0   r   ZUNKNOWN_SAVED_STATUS)rA   r   r   ffformatsdefault_formatirv   Zfmtsr   r   r!   rH   r"   save_figureu  sN   







z"NavigationToolbar2GTK4.save_figureN)r   r   r   r+   r   r!   r!   r!   r"   r   J  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{   )rA   toolmanagerr   r!   r!   r"   r+     s    



zToolbarGTK4.__init__c           
      C   s   |rt  }nt  }|| |d |d ur-t jtj	|}|
| |d |d u r3d}| ||| |d| j|}	|| | j|g  | j| ||	f d S )Nr   r   r)   r   )r   r   r   	set_labelr   r   r   r   r   r   r   _add_buttonr0   
_call_toolr   r   
setdefaultr   )
rA   rv   grouppositionr   descriptiontoggler   r   signalr!   r!   r"   add_toolitem  s$   






zToolbarGTK4.add_toolitemc                 C   s>   d g}| j |  }|d ur|| | }|d us|| S r   )r   get_first_childr   get_next_sibling)rA   r  r  childrenchildr!   r!   r"   _find_child_at_position  s   
z#ToolbarGTK4._find_child_at_positionc                 C   sT   || j vr| j r|   t }| j| || j |< | j | || || d S r   )r   _add_separatorr   r   r   r   Zinsert_child_afterr  )rA   r   r  r  Z	group_boxr!   r!   r"   r     s   


zToolbarGTK4._add_buttonc                 C   s   |  | d S r   )Ztrigger_tool)rA   Zbtnrv   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)rA   rv   Ztoggledtoolitemr  r!   r!   r"   toggle_toolitem  s   


zToolbarGTK4.toggle_toolitemc                 C   sF   | j |g D ]\}}| jD ]}|| j| v r| j| | qqd S r   )r   popr   remove)rA   rv   r  _signalr  r!   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   )rA   sepr!   r!   r"   r    s   zToolbarGTK4._add_separatorc                 C   s   | j | d S r   )r   r   )rA   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                   @      e Zd Zdd ZdS )SaveFigureGTK4c                 O   s   t |   d S r   )r   r   Z"_make_classic_style_pseudo_toolbar)rA   r   r   r!   r!   r"   trigger  s   zSaveFigureGTK4.triggerNr   r   r   r  r!   r!   r!   r"   r        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 r$|| }nt|dkr/| }n	| r8|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!   )ru   r   r!   r!   r"   r   ,  s    z0HelpGTK4._normalize_shortcut.<locals>.<listcomp>Nr)   r   z<shift> )splitlen
capitalizeisupperr   )rA   rB   Zspecialpartsr   r!   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)rA   rB   r!   r!   r"   _is_valid_shortcut8  s   zHelpGTK4._is_valid_shortcutc           	         s   t  }t jj D ]C\}}|jsqt  }|| |	 }|d ur2|
d | }|d us%t 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%  )ru   rB   rH   r!   r"   r   U  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_keymaprv   ZShortcutsWindowZ_figurer   r   r   r   )	rA   r   sectionrv   toolr  r  ZshortcutZwindowr!   rH   r"   r  A  s4   




zHelpGTK4.triggerN)r   r   r   r%  r'  r  r!   r!   r!   r"   r    s    	r  c                   @   r  )ToolCopyToClipboardGTK4c                 O   s~   t  '}| j| | j \}}tj| tj	j
dd|||d }W d    n1 s.w   Y  | j }|| d S )NT   r   )ioBytesIOr   Z
print_rgbaZget_width_heightr   ZPixbufZnew_from_data	getbufferZ
ColorspaceRGBZget_clipboardset)rA   r   r   fr   r   Zpb	clipboardr!   r!   r"   r  h  s   

zToolCopyToClipboardGTK4.triggerNr  r!   r!   r!   r"   r-  f  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   z  s    r   c                   @   r6  )_BackendGTK4N)r   r   r   r   ZFigureCanvasr   ZFigureManagerr!   r!   r!   r"   r7    s    r7  );r   r/  r   Z
matplotlibr   r   r   r   Zmatplotlib.backend_basesr   r   r   r   r	   r
   r   gir   Zgi_require_versionImportErrorerr
ValueErrorr   Zgi.repositoryr   r   r   r   r   r  r   r   r   r   r   r   Z	TimerGTK4version_infor^   r?   r2   ZDrawingArear   r   r   r   Z_register_tool_classZSaveFigureBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser-  ZConfigureSubplotsGTKZRubberbandGTKZToolbarr   Zexportr7  r!   r!   r!   r"   <module>   sZ    $


  'k`I