
    gW                        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Z	  ej*                  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jL                  e'      Z(e jR                  d        Z* G d de!ejV                        Z, G d de#ejZ                        Z. G d deej^                        Z0 ejb                  e,       G d dejd                               Z3 ejb                  e,       G d dejh                               Z5 ejb                  e,       G d dejl                               Z7e0Z- ejb                  e,ejp                          ejb                  e,ejr                          G d de"      Z:e jv                   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ResizeEventz#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    ]/var/www/dash_apps/app1/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.   r/   r0   r1   _update_device_pixel_ratioon_draw_event
_post_drawr3   r4   r5   r6   r7   r8   
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_ctxrB   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rK   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)rK   cursorrT   contexts       r"   rV   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)rK   eventrT   trb   rc   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   rj   _mpl_modifiersri   rP   )rK   widgetrg   rm   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)Nr/   rn   ro   Fr   rj   buttonrs   ri   rP   rK   rt   rg   s      r"   r/   z#FigureCanvasGTK3.button_press_event   sT    ' 	#$$U+	#-2\\	#!00=!	# $,8:r$   c                     t        d| g| j                  |      |j                  | j                  |j                        |dj                          y)Nr0   rv   Frw   ry   s      r"   r0   z%FigureCanvasGTK3.button_release_event   sT    )4 	#$$U+	#-2\\	#!00=!	# $,8:r$   c                 |    t        d| | j                  |      g| j                         d|ij                          y)Nr3   ro   Tr
   _get_keyrj   rP   ry   s      r"   r3   z FigureCanvasGTK3.key_press_event   s>    "Du%	!(,(8(8(:	!	!!)r$   c                 |    t        d| | j                  |      g| j                         d|ij                          y)Nr4   ro   Tr|   ry   s      r"   r4   z"FigureCanvasGTK3.key_release_event   s>    $du%	!(,(8(8(:	!	!!)r$   c                     t        d| g| j                  |      | j                  |j                        | j	                  |j                        |dj                          y)Nr5   )buttonsrn   ro   F)r   rj   _mpl_buttonsri   rs   rP   ry   s      r"   r5   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_eventrv   	r   Keymapget_for_displayr_   get_modifier_stater   rj   rs   rP   rK   rt   rg   gtk_modss       r"   r6   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_eventrv   r   r   s       r"   r7   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widthrd   rf   set_size_inchesr   rP   	draw_idle)rK   rt   
allocationdpivalwinchhinchs         r"   r8   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_statern   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shiftr9   )r   r   CONTROL_MASK	MOD1_MASK
SHIFT_MASK	MOD4_MASK)r   r   rn   r   r   keys         r"   rs   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_namers   ri   isprintableremovejoin)rK   rg   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rK   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)NrT      Fr   )rU   r   rd   rf   r-   r   r   )rK   rt   rg   whr   s         r"   r1   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   )rK   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   )rd   ).0dimrK   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)	rK   rt   ctxx0y0r   r   x1y1s	   `        r"   r@   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    )rK   rt   r   s      r"   r?   zFigureCanvasGTK3.on_draw_event  s    r$   c                 F    | j                         r| j                          y y r   )is_drawabler   rQ   s    r"   r2   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)r2   r;   )r   rK   s    r"   	idle_drawz-FigureCanvasGTK3.draw_idle.<locals>.idle_draw   s(    '		%&" &'"s    	$)r;   r   idle_add)rK   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   rW   rX   pendingrY   )rK   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_MASKrC   r:   rR   rV   rj   r.   r/   r0   r3   r4   r5   r6   r7   r8   staticmethodr   rs   r}   r>   r1   r   r@   r?   r2   r   r   __classcell__)rB   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 )Nrl   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   )
rK   canvastexttooltip_text
image_filecallbackimagerx   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dialogrK   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)r/  r&  message_typer   ),r   FileChooserDialogr%  get_toplevelFileChooserActionSAVESTOCK_CANCELResponseTypeCANCEL
STOCK_SAVEOKr5  items
FileFilterset_nameadd_pattern
add_filterget_default_filetype
set_filter	functoolspartialr=   set_current_foldermplrcParamsr6  get_default_filenameset_do_overwrite_confirmationrunget_filenamer3  r4  rR   ospathdirnamer-   savefig	ExceptionMessageDialogr  MessageTypeERRORButtonsType)rK   r   r   fmtsffr9  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:   re  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)rK   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 )Nrl   r  )r   r  r  r  r  r  r   r  r  r  r  r  _add_buttonr=   
_call_toolr  r$  rq  
setdefaultappend)
rK   r   grouppositionr(  descriptiontogglerx   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   )
rp  _add_separatorr   Toolbarr  r  r  
pack_startr$  r  )rK   rx   rx  ry  toolbars        r"   rt  zToolbarGTK3._add_button  s    $||##%kkmGc..445OOGUE15")DLLU""684r$   c                 &    | j                  |       y r   )trigger_tool)rK   btnr   s      r"   ru  zToolbarGTK3._call_tool  s    $r$   c                     || j                   vry | j                   |   D ]8  \  }}|j                  |       |j                  |       |j                  |       : y r   )rq  handler_block
set_activehandler_unblock)rK   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   )rq  poprp  r   )rK   r   r+  _signalrx  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 )Nri  FTr   )r   	Separatorrk  rl  VERTICALr  r$  )rK   seps     r"   r  zToolbarGTK3._add_separator  sB    mmo(@(@AUD!,r$   c                 :    | j                   j                  |       y r   )rn  r  )rK   ss     r"   set_messagezToolbarGTK3.set_message  s    "r$   N)r   r   r   _icon_extensionr:   r}  rt  ru  r  r  r  r  r   r$   r"   rg  rg    s/    %O	70	5 -9#r$   rg  c                       e Zd Zd Zy)SaveFigureGTK3c                 J    t         j                  | j                                y r   )r   re  "_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   Nrl   <>r   z<shift> )splitlen
capitalizeisupperr   )rK   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)rK   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)rt   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   rK   s     r"   r   z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>  s2      %5..s3 ,,S1%5s   ,/)acceleratorr.  subtitleHelpT)r.  modalr/  )r   ShortcutsSectionsortedrr  toolsrG  rz  ShortcutsGroupr   forallShortcutsShortcutr   get_tool_keymapr   ShortcutsWindow_figurer%  r?  showr$  )rK   sectionr   toolrx  shortcutrT   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_  rF  _get_help_textrU  rR   )rK   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  )rK   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)
rK   r   r   	clipboardrT   rb   rc   r   rf   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_classrg  _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  )=rN  loggingrW  pathlibr   
matplotlibrQ  r   r   r   matplotlib.backend_basesr   r   r	   r
   r   r   r   giImportErrorerrrequire_version
ValueErrorrd  gi.repositoryr   r   r   r   r   r  r   r   r   r   r   r   	TimerGTK3	getLoggerr   _logcacher#   DrawingArear&   r  r   rj  rg  _register_tool_classSaveFigureBaser  ToolHelpBaser  ToolCopyToClipboardBaser  ConfigureSubplotsGTKRubberbandGTKr)   exportr  r   r$   r"   <module>r     s     	   1 1B B BF  B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.   F4 G
 4G9	GG
G	GG