
    Ưei0W                        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mZ 	 d dlmZ 	  edd       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jN                  e(      Z)e jT                  d        Z+ G d de"ejX                        Z- G d de$ej\                        Z/ G d deej`                        Z1 ejd                  e-       G d dejf                               Z4 ejd                  e-       G d dejj                               Z6 ejd                  e-       G d dejn                               Z8e1Z. ejd                  e-e jr                          ejd                  e-e jt                          G d de#      Z;e!jx                   G d de!             Z=y# e$ rZ ed      edZ[ww xY w# e$ rZ ee      edZ[ww xY w)    N)Path)_apibackend_toolscbook)ToolContainerBaseMouseButton
CloseEventKeyEventLocationEvent
MouseEventResizeEvent)require_versionz#The GTK3 backends require PyGObjectGtkz3.0)GioGLibGObjectr   Gdk   )_backend_gtk)_BackendGTK_FigureCanvasGTK_FigureManagerGTK_NavigationToolbar2GTKTimerGTKc                     t         j                  j                  t         j                  j	                         t        j                  |             S N)r   Cursornew_from_nameDisplayget_defaultr   mpl_to_gtk_cursor_name)
mpl_cursors    b/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3.py_mpl_to_gtk_cursorr$   %   s7    ::##!++J79 9    c                       e Zd ZdZ ej
                  d       Zej                  j                  ej                  j                  z  ej                  j                  z  ej                  j                  z  ej                  j                  z  ej                  j                  z  ej                  j                  z  ej                  j                   z  ej                  j"                  z  Zd fd	Zd Zd ZddZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Ze d        Z!e ddd       Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+ xZ,S )FigureCanvasGTK3gtk3c                     t         S r   )FigureManagerGTK3)clss    r#   <lambda>zFigureCanvasGTK3.<lambda>.   s    3D r%   Nc                    t         |   |       d| _        d | _        | j	                  d| j
                         | j	                  d| j                         | j	                  d| j                         | j	                  d| j                         | j	                  d| j                         | j	                  d| j                         | j	                  d	| j                         | j	                  d	| j                         | j	                  d
| j                         | j	                  d| j                         | j	                  d| j                         | j	                  d| j                         | j	                  d| j                          | j	                  d| j"                         | j%                  | j&                  j(                         | j+                  d       t-        j.                         }|j1                  d       | j3                         }|j5                  |t,        j6                         |j9                  d       y )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/   r0   r1   r2   _update_device_pixel_ratioon_draw_event
_post_drawr4   r5   r6   r7   r8   r9   
set_events	__class__
event_maskset_can_focusr   CssProviderload_from_dataget_style_contextadd_provider#STYLE_PROVIDER_PRIORITY_APPLICATION	add_class)selfr.   css	style_ctxrC   s       r#   r;   zFigureCanvasGTK3.__init__;   s   ' $^T->->?)T-D-DE+T-F-FG&T-A-AB%T-L-LM+T-L-LMVT-?-?@VT__=&T-A-AB(T-C-CD*T-E-EF)T-D-DE)T-D-DE_T-?-?@1124 ooMN**,	sC$K$KL/0r%   c                 8    t        d|       j                          y )Nclose_event)r	   _processrL   s    r#   destroyzFigureCanvasGTK3.destroyZ   s    =$'002r%   c                     | j                  d      }|J|j                  t        |             t        j                  j                         }|j                  d       y y )NwindowT)get_property
set_cursorr$   r   MainContextdefault	iteration)rL   cursorrU   contexts       r#   rW   zFigureCanvasGTK3.set_cursor]   sS    ""8,089&&..0Gd# r%   c                 ^   |Q| j                         }|j                  |j                         j                         j	                               \  }}}}n|j
                  |j                  }}|| j                  z  }| j                  j                  j                  || j                  z  z
  }||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.
        )
get_windowget_device_positionget_displayget_device_managerget_client_pointerxydevice_pixel_ratior.   bboxheight)rL   eventrU   trc   rd   states          r#   _mpl_coordszFigureCanvasGTK3._mpl_coordse   s     =__&F#77""$779LLNPNAq!U 77EGGqA'''KK##a$*A*A&AA!tr%   c                     |j                   t        j                  j                  k(  rdnd}t	        d| g| j                  |      || j                  |j                        |dj                          y)Nr   r/   )step	modifiersguiEventF)		directionr   ScrollDirectionUPr   rk   _mpl_modifiersrj   rQ   )rL   widgetrh   rn   s       r#   r/   zFigureCanvasGTK3.scroll_event{   sh    OOs':':'='==q2>4 	#$$U+	#26!00=!	# $,8:r%   c                     t        d| g| j                  |      |j                  | j                  |j                        |dj                          y)Nr0   ro   rp   Fr   rk   buttonrt   rj   rQ   rL   ru   rh   s      r#   r0   z#FigureCanvasGTK3.button_press_event   sT    ' 	#$$U+	#-2\\	#!00=!	# $,8:r%   c                     t        d| g| j                  |      |j                  | j                  |j                        |dj                          y)Nr1   rw   Frx   rz   s      r#   r1   z%FigureCanvasGTK3.button_release_event   sT    )4 	#$$U+	#-2\\	#!00=!	# $,8:r%   c                 |    t        d| | j                  |      g| j                         d|ij                          y)Nr4   rp   Tr
   _get_keyrk   rQ   rz   s      r#   r4   z FigureCanvasGTK3.key_press_event   s>    "Du%	!(,(8(8(:	!	!!)r%   c                 |    t        d| | j                  |      g| j                         d|ij                          y)Nr5   rp   Tr}   rz   s      r#   r5   z"FigureCanvasGTK3.key_release_event   s>    $du%	!(,(8(8(:	!	!!)r%   c                     t        d| g| j                  |      | j                  |j                        | j	                  |j                        |dj                          y)Nr6   )buttonsro   rp   F)r   rk   _mpl_buttonsrj   rt   rQ   rz   s      r#   r6   z$FigureCanvasGTK3.motion_notify_event   sY    ($ 	#1A1A%1H 	#,,U[[9!00=!	# $,8:r%   c                     t         j                  j                  | j                               j	                         }t        d| g| j                  |      | j                  |      |dj                          y )Nfigure_enter_eventrw   	r   Keymapget_for_displayr`   get_modifier_stater   rk   rt   rQ   rL   ru   rh   gtk_modss       r#   r7   z#FigureCanvasGTK3.enter_notify_event   j    ::--  2 2 4 	*D 	&43C3CE3J 	& $ 3 3H =$	&&.hjr%   c                     t         j                  j                  | j                               j	                         }t        d| g| j                  |      | j                  |      |dj                          y )Nfigure_leave_eventrw   r   r   s       r#   r8   z#FigureCanvasGTK3.leave_notify_event   r   r%   c                 0   | j                   j                  }|j                  | j                  z  |z  }|j                  | j                  z  |z  }| j                   j                  ||d       t        d|       j                          | j                          y )NFforwardresize_event)	r.   dpiwidthre   rg   set_size_inchesr   rQ   	draw_idle)rL   ru   
allocationdpivalwinchhinchs         r#   r9   zFigureCanvasGTK3.size_allocate   s{      4#:#::VC!!D$;$;;fD##E5%#@ND)224r%   c                    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}|D cg c]  \  }}| |z  s| c}}S c c}}w r   )r   LEFTr   ModifierTypeBUTTON1_MASKMIDDLEBUTTON2_MASKRIGHTBUTTON3_MASKBACKBUTTON4_MASKFORWARDBUTTON5_MASK)event_statero   namemasks       r#   r   zFigureCanvasGTK3._mpl_buttons   s     s//<<=!1!1!>!>? 0 0 = =>s//<<=  #"2"2"?"?@
	 (1GtK$4FGGGs   C+#C+excludec                8   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}|D cg c]  \  }}}||k7  r| |z  r| c}}}S c c}}}w )Nctrlcontrolaltshiftr:   )r   r   CONTROL_MASK	MOD1_MASK
SHIFT_MASK	MOD4_MASK)r   r   ro   r   r   keys         r#   rt   zFigureCanvasGTK3._mpl_modifiers   s     S%%22I>C$$..6c&&117;c&&00':	
	 -6 : :tSc>kD&8  : 	: :s   9Bc                 f   t        t        j                  |j                              }t	        j
                  |t        j                  |j                              }| j                  |j                  |      }d|v r!|j                         r|j                  d       dj                  g ||      S )Nr   r   +)chrr   keyval_to_unicodekeyvalr   _unikey_or_keysym_to_mplkeykeyval_namert   rj   isprintableremovejoin)rL   rh   unikeyr   modss        r#   r~   zFigureCanvasGTK3._get_key   s    S**5<<89//COOELL13""5;;"<d?v113KK xx$%%r%   c                     | j                  | j                               r!| j                          | j                          y y r   )_set_device_pixel_ratioget_scale_factorqueue_resize
queue_drawrL   argskwargss      r#   r?   z+FigureCanvasGTK3._update_device_pixel_ratio   s9     ''(=(=(?@ OO Ar%   c                    |j                  d      y |j                  | j                  z  }|j                  | j                  z  }|dk  s|dk  ry | j                  j
                  }| j                  j                  ||z  ||z  d       y)NrU      Fr   )rV   r   re   rg   r.   r   r   )rL   ru   rh   whr   s         r#   r2   z FigureCanvasGTK3.configure_event   s    x(0KK$111LL4222q5AEkkoo##AGQWe#Dr%   c                 2    || _         | j                          y r   )r=   r   )rL   rects     r#   _draw_rubberbandz!FigureCanvasGTK3._draw_rubberband   s     $r%   c                      j                   y  fd j                   D        \  }}}}||z   }||z   }|j                  ||       |j                  ||       |j                  ||       |j                  ||       |j                  ||       |j                  ||       |j                  ||       |j                  ||       |j                  d       |j	                  d       |j                  dd       |j                  ddd       |j                          |j                  dd       |j                  ddd       |j                          y )Nc              3   <   K   | ]  }|j                   z    y wr   )re   ).0dimrL   s     r#   	<genexpr>z.FigureCanvasGTK3._post_draw.<locals>.<genexpr>   s$      : d555 :s   r   )r   r   r   r   )	r=   move_toline_toset_antialiasset_line_widthset_dashset_source_rgbstroke_preservestroke)	rL   ru   ctxx0y0r   r   x1y1s	   `        r#   rA   zFigureCanvasGTK3._post_draw   s$     (:#'#8#8:B1!V!V 	BBBBBBBB!1VQ1a#VQ1a#

r%   c                      y r    )rL   ru   r   s      r#   r@   zFigureCanvasGTK3.on_draw_event  s    r%   c                 F    | j                         r| j                          y y r   )is_drawabler   rR   s    r#   r3   zFigureCanvasGTK3.draw  s    OO r%   c                 d      j                   dk7  ry  fd}t        j                  |       _         y )Nr   c                  N    	 j                          d_        y# d_        w xY w)Nr   F)r3   r<   )r   rL   s    r#   	idle_drawz-FigureCanvasGTK3.draw_idle.<locals>.idle_draw   s(    '		%&" &'"s    	$)r<   r   idle_add)rL   r   s   ` r#   r   zFigureCanvasGTK3.draw_idle  s,    "	 "]]95r%   c                     t         j                  j                         }|j                         r#|j	                  d       |j                         r"y y )NT)r   rX   rY   pendingrZ   )rL   r\   s     r#   flush_eventszFigureCanvasGTK3.flush_events(  s:    ""**,ood# oor%   r   )-__name__
__module____qualname__required_interactive_frameworkr   classpropertymanager_classr   	EventMaskBUTTON_PRESS_MASKBUTTON_RELEASE_MASKEXPOSURE_MASKKEY_PRESS_MASKKEY_RELEASE_MASKENTER_NOTIFY_MASKLEAVE_NOTIFY_MASKPOINTER_MOTION_MASKSCROLL_MASKrD   r;   rS   rW   rk   r/   r0   r1   r4   r5   r6   r7   r8   r9   staticmethodr   rt   r~   r?   r2   r   rA   r@   r3   r   r   __classcell__)rC   s   @r#   r'   r'   ,   sd   %+"&D&&'DEM --11MM556MM//0 MM001 MM22	3
 MM334 MM334 MM556 MM--.J1>3$,11 	H 	H /3 : :&

<

6$r%   r'   c                       e Zd Zd Zd Zy)NavigationToolbar2GTK3c                    t         j                   j                  |        | j                  t        j                  j
                         i | _        | j                  D ]E  \  }}}}|%| j                  t        j                         d       0t        j                  j                  t        j                  j                  t        t!        j"                  d| d                  t        j$                  j&                        }|dv rt        j(                         nt        j*                         x| j                  |<   }|j-                  |       |j/                  |       |j1                  dt3        | |            |_        |j7                  |       | j                  |d       H t        j8                         }| j                  |d       t        j:                         }	|	j=                  d       |j?                  d       |jA                  |	       t        j8                         }| j                  |d       t        j:                         | _!        | jB                  jE                  t        jF                  jH                         |jA                  | jB                         | jK                          tM        j                  | |       y )Nrm   images-symbolic.svg)zoompanclickedu   <small> 
 </small>T)'r   r;   	set_styler   ToolbarStyleICONS_gtk_ids	toolitemsinsertSeparatorToolItemImagenew_from_giconr   Iconnew_for_stringstrr   _get_data_pathIconSizeLARGE_TOOLBARToggleToolButton
ToolButton	set_labelset_icon_widgetr>   getattr_signal_handlerset_tooltip_textToolItemLabel
set_markup
set_expandaddmessageset_justifyJustificationr   show_allr   )
rL   canvastexttooltip_text
image_filecallbackimagery   toolitemlabels
             r#   r;   zNavigationToolbar2GTK3.__init__0  s     &s''--.8< 	$4D,
H|C113R8II,,'',,X0:|=-IK LM **	,E +3o*E$$& "DMM$& T"""5)%+^^742&4F"##L1KK#%	$0 <<>Hb!		C	ED!U<<>Hb!yy{  !2!2!8!89T\\"''f5r%   c           	         
 t        j                  d j                  j                         t         j                  j
                  t         j                  t         j                  j                  t         j                  t         j                  j                  f      
 j                  j                         j                         D ]  \  }}t        j                         }|j                  |       |D ]  }|j                  d|         
j!                  |        j                  j#                         |v st
j%                  |        t'        j(                  
j*                  d      
 fd       }
j-                  t.        j0                  d          
j3                   j                  j5                                
j7                  d       
j9                         }
j;                         }
j=                         } j                  j                         |j?                            d   }
jA                          |t         j                  j                  k7  ry t.        j0                  d   r0tB        jD                  jG                  |      t.        j0                  d<   	  j                  jH                  jK                  ||	       |S # tL        $ r}	t        jN                   j                  j                         tQ        |	      t         jR                  jT                  t         jV                  j                  
      

j9                          
jA                          Y d }	~	y d }	~	ww xY w)NzSave the figure)titletransient_foractionr   z*.znotify::filterc                     j                         j                         }j                  j                         |   d   }j	                  t        t        j                               j                  d|                    y )Nr   .)	
get_filterget_namer&  get_supported_filetypes_groupedset_current_namer  r   get_current_namewith_suffix)r   r   fmtdialogrL   s      r#   on_notify_filterz<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterr  sl    $$&//1D++==?EaHC##D0023??!C5	JKMr%   zsavefig.directoryTr   )format)r0  r'  message_typer   ),r   FileChooserDialogr&  get_toplevelFileChooserActionSAVESTOCK_CANCELResponseTypeCANCEL
STOCK_SAVEOKr6  items
FileFilterset_nameadd_pattern
add_filterget_default_filetype
set_filter	functoolspartialr>   set_current_foldermplrcParamsr7  get_default_filenameset_do_overwrite_confirmationrunget_filenamer4  r5  rS   ospathdirnamer.   savefig	ExceptionMessageDialogr  MessageTypeERRORButtonsType)rL   r   r   fmtsffr:  r<  responsefnameer;  s   `         @r#   save_figurez"NavigationToolbar2GTK3.save_figure`  s   &&#++224((--%%s'7'7'>'>^^s'7'7':':<	
 ;;>>@FFH	&JD$!BKK +C5z*+b!{{//1T9!!"%	& 
		6>>+;	<	M 
=	M 	!!#,,/B"CD @ @ BC,,T2::<##% kk99;BKKMJ1Ms''***<<+,020FCLL,-	KK&&uS&9L 	&&"kk668s1v __22COO<N<NPF JJLNN	s    (K	 		M&B
M!!M&N)r   r   r   r;   rf  r   r%   r#   r   r   /  s    .6`/r%   r   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)ToolbarGTK3r  c                    t        j                  | |       t        j                  j                  |        | j	                  dt        j
                  j                         t        j                         | _        | j                  j                  t        j                  j                         | j                  | j                  ddd       | j                          i | _        i | _        y )NorientationFr   )r   r;   r   Boxset_propertyOrientation
HORIZONTALr  _messager#  r$  r   pack_endr%  _groups
_toolitems)rL   toolmanagers     r#   r;   zToolbarGTK3.__init__  s    ""45-)C)CD		!!#"3"3"9"9:dmmUE15r%   c                 n   |rt        j                         }nt        j                         }|j                  |       |ft         j                  j                  t        j                  j                  |      t         j                  j                        }|j                  |       |d}| j                  |||       |j                  d| j                  |      }	|j                  |       |j!                          | j"                  j%                  |g        | j"                  |   j'                  ||	f       y )Nrm   r  )r   r  r  r  r  r  r   r  r  r  r  r  _add_buttonr>   
_call_toolr  r%  rr  
setdefaultappend)
rL   r   grouppositionr)  descriptiontogglery   r+  signals
             r#   add_toolitemzToolbarGTK3.add_toolitem  s    ))+F^^%F!II,,''
3**,E ""5)H1	4??DA,""4,$$ff%56r%   c                 v   || j                   vr| j                   r| j                          t        j                         }|j	                  t        j
                  j                         | j                  |ddd       |j                          || j                   |<   | j                   |   j                  ||       y )NFr   )
rq  _add_separatorr   Toolbarr  r  r	  
pack_startr%  r  )rL   ry   ry  rz  toolbars        r#   ru  zToolbarGTK3._add_button  s    $||##%kkmGc..445OOGUE15")DLLU""684r%   c                 &    | j                  |       y r   )trigger_tool)rL   btnr   s      r#   rv  zToolbarGTK3._call_tool  s    $r%   c                     || j                   vry | j                   |   D ]8  \  }}|j                  |       |j                  |       |j                  |       : y r   )rr  handler_block
set_activehandler_unblock)rL   r   toggledr,  r}  s        r#   toggle_toolitemzToolbarGTK3.toggle_toolitem  sX    t& $ 5 	-Hf""6*($$V,	-r%   c                     | j                   j                  |g       D ]F  \  }}| j                  D ]2  }|| j                  |   v s| j                  |   j                  |       4 H y r   )rr  poprq  r   )rL   r   r,  _signalry  s        r#   remove_toolitemzToolbarGTK3.remove_toolitem  sb    !%!4!4T2!> 	9Hg 9t||E22LL'..x89	9r%   c                     t        j                         }|j                  dt         j                  j                         | j                  |ddd       |j                          y )Nrj  FTr   )r   	Separatorrl  rm  VERTICALr  r%  )rL   seps     r#   r  zToolbarGTK3._add_separator  sB    mmo(@(@AUD!,r%   c                 :    | j                   j                  |       y r   )ro  r  )rL   ss     r#   set_messagezToolbarGTK3.set_message  s    "r%   N)r   r   r   _icon_extensionr;   r~  ru  rv  r  r  r  r  r   r%   r#   rh  rh    s/    %O	70	5 -9#r%   rh  c                       e Zd Zd Zy)SaveFigureGTK3c                 J    t         j                  | j                                y r   )r   rf  "_make_classic_style_pseudo_toolbarr   s      r#   triggerzSaveFigureGTK3.trigger  s    **335	7r%   Nr   r   r   r  r   r%   r#   r  r    s    7r%   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)HelpGTK3c                    ddddd}|j                  d      }|dd D cg c]
  }d	|z   d
z    }}|d   }||v r||   }n5t        |      dkD  r|j                         }n|j                         r|dgz  }dj	                  |      |z   S c c}w )z
        Convert Matplotlib key presses to GTK+ accelerator identifiers.

        Related to `FigureCanvasGTK3._get_key`.
        	BackSpace	Page_DownPage_UpScroll_Lock)	backspacepagedownpageupscroll_lockr   Nrm   <>r   z<shift> )splitlen
capitalizeisupperr   )rL   r   specialpartsmodr   s         r#   _normalize_shortcutzHelpGTK3._normalize_shortcut  s     %#(	
 		#+0":6Cc	C66Bi'>#,CX\.."C[[]YKDwwt}s"" 7s   B	c                 2    d|vxr |j                  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)rL   r   s     r#   _is_valid_shortcutzHelpGTK3._is_valid_shortcut  s      S G)G%GGr%   c           	          t        j                         }t         j                  j                  j                               D ]  \  }}|j                  st        j                         }|j                  |       |j                  d d        t        j                  dj                   fd j                  j                  |      D              |j                  |j                        }|j                  |        t        j                  dd j                  j                   j#                               }|j%                          |j                  |       |j'                          y )Nc                 $    | j                  d      S )NF)set_visible)ru   datas     r#   r,   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda>  s    f.@.@.G r%    c              3   b   K   | ]&  }j                  |      rj                  |       ( y wr   )r  r  )r   r   rL   s     r#   r   z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>  s2      %5..s3 ,,S1%5s   ,/)acceleratorr/  subtitleHelpT)r/  modalr0  )r   ShortcutsSectionsortedrs  toolsrH  r{  ShortcutsGroupr!  forallShortcutsShortcutr   get_tool_keymapr   ShortcutsWindow_figurer&  r@  showr%  )rL   sectionr   toolry  shortcutrU   s   `      r#   _show_shortcuts_windowzHelpGTK3._show_shortcuts_window
  s   &&( !1!1!7!7!=!=!?@ 	 JD$## &&(EKKLLGN,,HH %5#//??E%5 5 ii))+H IIh)	 , $$,,--::<> 	

7r%   c                 :   t        j                  | j                  j                  j	                         dt         j
                  j                  t         j                  j                  | j                         d      }|j                          |j                          y )Nr   r  )r/  )r   r]  r  r&  r@  r^  INFOr`  rG  _get_help_textrV  rS   )rL   r;  s     r#   _show_shortcuts_dialogzHelpGTK3._show_shortcuts_dialog,  sf    ""LL,,.s##S__%7%79L9L9N 	

r%   c                 t    t        j                  ddd      | j                          y | j                          y )Nr      r   )r   check_versionr  r  )rL   r   s     r#   r  zHelpGTK3.trigger4  s/    QA&.'')'')r%   N)r   r   r   r  r  r  r  r  r   r%   r#   r  r    s    #4H D*r%   r  c                       e Zd Zd Zy)ToolCopyToClipboardGTK3c                    t         j                  j                  t        j                        }| j
                  j                         }|j                         \  }}}}t        j                  |||||      }	|j                  |	       y r   )
r   	Clipboardgetr   SELECTION_CLIPBOARDr&  r^   get_geometrypixbuf_get_from_window	set_image)
rL   r   r   	clipboardrU   rc   rd   r   rg   pbs
             r#   r  zToolCopyToClipboardGTK3.trigger=  sk    MM%%c&=&=>	'')$1131eV''1eVDBr%   Nr  r   r%   r#   r  r  ;  s     r%   r  c                       e Zd ZeZeZy)r*   N)r   r   r   r   _toolbar2_classrh  _toolmanager_toolbar_classr   r%   r#   r*   r*   L  s    ,O!,r%   r*   c                       e Zd ZeZeZy)_BackendGTK3N)r   r   r   r'   FigureCanvasr*   FigureManagerr   r%   r#   r  r  Q  s    #L%Mr%   r  )>rO  loggingrX  pathlibr   
matplotlibrR  r   r   r   matplotlib.backend_basesr   r   r	   r
   r   r   r   gir   gi_require_versionImportErrorerr
ValueErrorre  gi.repositoryr   r   r   r   r   r  r   r   r   r   r   r   	TimerGTK3	getLoggerr   _logcacher$   DrawingArear'   r  r   rk  rh  _register_tool_classSaveFigureBaser  ToolHelpBaser  ToolCopyToClipboardBaser  ConfigureSubplotsGTKRubberbandGTKr*   exportr  r   r%   r#   <module>r     s     	   1 1B B BF8  ue$ 7 6   w" 9 9@$' @$F`3S[[ `FI##SWW I#X $##$457]11 7 67 $##$45R*})) R* 6R*j $##$45 mCC   6   " " "l779 " " "l002-) -
 &; & &I  F
;
<#EF    a.a s.   F, 	G ,F?1	F::F?G	GG