
    Ưei*\                        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 	 d dlmZ 	  edd       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jJ                  dk\  Z& ejN                  ddd       du Z( G d de ejR                        Z* G d de"ejV                        Z, G d de	ejV                        Z- ej\                  e*       G d dej^                               Z0 ej\                  e*       G d dejb                               Z2 ej\                  e*       G d dejf                               Z4 ej\                  e*ejj                          ej\                  e*ejl                         e-Z7 G d de!      Z8ejr                   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)_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                        e Zd ZdZdZ ej                  d       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d ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z  xZ!S )FigureCanvasGTK4gtk4Fc                     t         S N)FigureManagerGTK4)clss    b/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4.py<lambda>zFigureCanvasGTK4.<lambda>(   s    3D     c                 &   t         	|   |       | j                  d       | j                  d       d| _        d | _        | j                  | j                         | j                  d| j                         t        r| j                  d| j                         n| j                  d| j                         t        j                         }|j                  d       |j                  d| j                          |j                  d| j"                         | j%                  |       t        j&                         }|j                  d	| j(                         |j                  d
| j*                         | j%                  |       t        j,                         }|j                  d| j.                         |j                  d| j0                         |j                  d| j2                         | j%                  |       t        j4                  j7                  t        j8                  j:                        }|j                  d| j<                         | j%                  |       | j?                  d       t        j@                         }d}t        jB                  ddd      |jE                  |d       n |jE                  |jG                  d             | jI                         }|jK                  |t        jL                         |jO                  d       y )N)figureTr   resizerealizeznotify::scale-factorpressedreleasedzkey-pressedzkey-releasedmotionenterleavescrollz/.matplotlib-canvas { background-color: white; }r   	   r   zutf-8zmatplotlib-canvas)(super__init__set_hexpandset_vexpand_idle_draw_id_rubberband_rectset_draw_func
_draw_funcconnectresize_event_GTK_GE_4_12_realize_event_update_device_pixel_ratior   GestureClick
set_buttonbutton_press_eventbutton_release_eventadd_controllerEventControllerKeykey_press_eventkey_release_eventEventControllerMotionmotion_notify_evententer_notify_eventleave_notify_eventEventControllerScrollnewEventControllerScrollFlagsVERTICALscroll_eventset_focusableCssProvidercheck_versionload_from_dataencodeget_style_contextadd_provider#STYLE_PROVIDER_PRIORITY_APPLICATION	add_class)
selfr)   clickkeyr.   r1   cssstyle	style_ctx	__class__s
            r%   r5   zFigureCanvasGTK4.__init__*   sT   ' $4??+Xt001LLD$7$78LL/1P1PQ  "i!8!89j$";";<E"$$&M4#7#78ND$:$:;C **,x!9!9:w 7 78w 7 78F#**..**335x!2!23F#4 ooAQ1%-ub)u||G45**,	sC$K$KL/0r'   c                 8    t        d|       j                          y )Nclose_event)r   _processr[   s    r%   destroyzFigureCanvasGTK4.destroy\   s    =$'002r'   c                 L    | j                  t        j                  |             y r"   )set_cursor_from_namer   mpl_to_gtk_cursor_name)r[   cursors     r%   
set_cursorzFigureCanvasGTK4.set_cursor_   s    !!,"E"Ef"MNr'   c                 T   |_| j                         j                         }|j                  | j                         j	                         j                               \  }}}}n|\  }}|| j                  z  }| j                  j                  j                  || j                  z  z
  }||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.
        )

get_nativeget_surfaceget_device_positionget_displayget_default_seatget_pointerdevice_pixel_ratior)   bboxheight)r[   xysurfaceis_overxymasks          r%   _mpl_coordszFigureCanvasGTK4._mpl_coordsc   s     :oo'335G")"="=  "335AAC#EGQ4 DAq'''KK##a$*A*A&AA!tr'   c                     t        d| g| j                         || j                  |      t        r|j	                         nd dj                          y)NrQ   )step	modifiersguiEventT)r
   r|   _mpl_modifiers_GOBJECT_GE_3_47get_current_eventrd   )r[   
controllerdxdys       r%   rQ   zFigureCanvasGTK4.scroll_eventy   sR    D	
#'#3#3#5	
<>))*57GZ113T	
 (*r'   c                     t        d| g| j                  ||f      |j                         | j                  |      t        r|j                         nd dj                          | j                          y )NrC   r   r   )r
   r|   get_current_buttonr   r   r   rd   
grab_focusr[   r   n_pressry   rz   s        r%   rC   z#FigureCanvasGTK4.button_press_event   so     $	
)-)9)91a&)A	
))+	
 ))*57GZ113T		

 (*r'   c                     t        d| g| j                  ||f      |j                         | j                  |      t        r|j                         nd dj                          y )NrD   r   )r
   r|   r   r   r   r   rd   r   s        r%   rD   z%FigureCanvasGTK4.button_release_event   se    "D	
+/+;+;QF+C	
))+	
 ))*57GZ113T		

 (*r'   c           	          t        d| | j                  |||      g| j                         dt        r|j	                         nd ij                          y)NrG   r   Tr   _get_keyr|   r   r   rd   r[   r   keyvalkeycodestates        r%   rG   z FigureCanvasGTK4.key_press_event   sS    tT]]67E%J	
	
 8HZ113T	
 (*r'   c           	          t        d| | j                  |||      g| j                         dt        r|j	                         nd ij                          y)NrH   r   Tr   r   s        r%   rH   z"FigureCanvasGTK4.key_release_event   sS    t}}VWe'L	
	
 8HZ113T	
 (*r'   c                     t        d| g| j                  ||f      | j                  |      | j                  |      t        r|j                         nd dj                          y )NrJ   )buttonsr   r   )r
   r|   _mpl_buttonsr   r   r   rd   r[   r   ry   rz   s       r%   rJ   z$FigureCanvasGTK4.motion_notify_event   s`    !4	
*.*:*:Aq6*B	
%%j1))*57GZ113T		

 (*r'   c                     t        d| g| j                  ||f      | j                         t        r|j	                         nd dj                          y )Nfigure_enter_eventr   r	   r|   r   r   r   rd   r   s       r%   rK   z#FigureCanvasGTK4.enter_notify_event   sP     $	
)-)9)91a&)A	
))+7GZ113T	
 (*r'   c                     t        d| g| j                         | j                         t        r|j	                         nd dj                          y )Nfigure_leave_eventr   r   )r[   r   s     r%   rL   z#FigureCanvasGTK4.leave_notify_event   sJ     $	
)-)9)9);	
))+7GZ113T	
 (*r'   c                 (   | j                          | j                  j                  }|| j                  z  |z  }|| j                  z  |z  }| j                  j	                  ||d       t        d|       j                          | j                          y )NF)forwardr=   )r@   r)   dpirs   set_size_inchesr   rd   	draw_idle)r[   areawidthru   r   winchhinchs          r%   r=   zFigureCanvasGTK4.resize_event   s{    '')kkoo///#500036##E5%#@ND)224r'   c                    | j                         j                         }|j                  | j                         j	                         j                               \  }}}}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h c]  \  }}	||	z  s| c}	}S c c}	}w r"   )rm   rn   ro   rp   rq   rr   r   LEFTr   ModifierTypeBUTTON1_MASKMIDDLEBUTTON2_MASKRIGHTBUTTON3_MASKBACKBUTTON4_MASKFORWARDBUTTON5_MASK
r[   r   rw   rx   ry   rz   event_state	mod_tablenamer{   s
             r%   r   zFigureCanvasGTK4._mpl_buttons   s     //#//1%,%@%@//1==?&A"A{ s//<<=!1!1!>!>? 0 0 = =>s//<<=  #"2"2"?"?@
	 (1GtK$4FGGGs   3E	E	c                    |_| j                         j                         }|j                  | j                         j	                         j                               \  }}}}n|j                         }dt        j                  j                  fdt        j                  j                  fdt        j                  j                  fdt        j                  j                  fg}|D 	cg c]  \  }}	||	z  s| c}	}S c c}	}w )Nctrlaltshiftr4   )rm   rn   ro   rp   rq   rr   get_current_event_stater   r   CONTROL_MASKALT_MASK
SHIFT_MASK
SUPER_MASKr   s
             r%   r   zFigureCanvasGTK4._mpl_modifiers   s    oo'335G)0)D)D  "335AAC*E&GQ; %<<>KS%%223C$$--.c&&112c&&112	
	 (1GtK$4FGGGs   %C;3C;c                    t        t        j                  |            }t        j                  |t        j
                  |            }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|dk(  r|j                         s|) }
}}}	dj                  g |
|      S c c}	}}w )Nr   controlr   r   r4   +)chrr   keyval_to_unicoder   _unikey_or_keysym_to_mplkeykeyval_namer   r   r   r   r   isprintablejoin)r[   r   r   r   unikeyr]   r   modr{   mod_keymodss              r%   r   zFigureCanvasGTK4._get_key   s   S**623//OOF#% S%%22I>C$$--u5c&&117;c&&117;	
	 +4D D&Cw354<F,>,>,@ D D xx$%%	Ds    ,Dc                     | j                         j                         }|j                  d| j                         | j                          y )Nznotify::scale)rm   rn   r<   r@   )r[   objrw   s      r%   r?   zFigureCanvasGTK4._realize_event   s7    //#//1)H)HI'')r'   c                     t         r-| j                         j                         j                         }n| j	                         }|J | j                  |      r| j                          y y r"   )r>   rm   rn   	get_scaleget_scale_factor_set_device_pixel_ratiodraw)r[   argskwargsscales       r%   r@   z+FigureCanvasGTK4._update_device_pixel_ratio   s[     OO%113==?E))+E   ''.IIK /r'   c                 2    || _         | j                          y r"   )r9   
queue_draw)r[   rects     r%   _draw_rubberbandz!FigureCanvasGTK4._draw_rubberband  s     $r'   c                 L    | j                  | |       | j                  | |       y r"   )on_draw_event
_post_draw)r[   drawing_areactxr   ru   s        r%   r;   zFigureCanvasGTK4._draw_func
  s     4%c"r'   c                      j                   y d}d} fd j                   D        \  }}}}||z   }	||z   }
|j                  ||       |j                  ||
       |j                  ||       |j                  |	|       |j                  ||
       |j                  |	|
       |j                  |	|       |j                  |	|
       |j                  d       |j	                  |       |j                  ||fd       |j                  ddd       |j                          |j                  ||f|       |j                  ddd       |j                          y )Nr   r   c              3   <   K   | ]  }|j                   z    y wr"   )rs   ).0dimr[   s     r%   	<genexpr>z.FigureCanvasGTK4._post_draw.<locals>.<genexpr>  s$      : d555 :s   r   )	r9   move_toline_toset_antialiasset_line_widthset_dashset_source_rgbstroke_preservestroke)r[   widgetr   lwdashx0y0whx1y1s   `          r%   r   zFigureCanvasGTK4._post_draw  s6     (:#'#8#8:B1!V!V 	BBBBBBBB!2dD\1%1a#dD\4(1a#

r'   c                      y r"    )r[   r   r   s      r%   r   zFigureCanvasGTK4.on_draw_event.  s    r'   c                 F    | j                         r| j                          y y r"   )is_drawabler   re   s    r%   r   zFigureCanvasGTK4.draw2  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)r   r8   )r   r[   s    r%   	idle_drawz-FigureCanvasGTK4.draw_idle.<locals>.idle_draw;  s(    '		%&" &'"s    	$)r8   r   idle_add)r[   r   s   ` r%   r   zFigureCanvasGTK4.draw_idle7  s,    "	 "]]95r'   c                     t         j                  j                         }|j                         r#|j	                  d       |j                         r"y y )NT)r   MainContextdefaultpending	iteration)r[   contexts     r%   flush_eventszFigureCanvasGTK4.flush_eventsC  s:    ""**,ood# oor'   r"   )"__name__
__module____qualname__required_interactive_frameworksupports_blitr   classpropertymanager_classr5   rf   rk   r|   rQ   rC   rD   rG   rH   rJ   rK   rL   r=   r   r   r   r?   r@   r   r;   r   r   r   r   r  __classcell__)ra   s   @r%   r   r   %   s    %+"M&D&&'DEM01d3O,H(H&"*
	
#@

6$r'   r   c                       e Zd Zd Zd Zy)NavigationToolbar2GTK4c                    t         j                  j                  |        | j                  d       i | _        | j
                  D ];  \  }}}}|$| j                  t        j                                /t         j                  j                  t        j                  j                  t        t        j                  d| d                        }|dv rt        j                          nt        j"                         x| j                  |<   }|j%                  |       |j                  d       |j                  d       |j'                  dt)        | |            |_        |j-                  |       | j                  |       > t        j.                         }|j1                  d       |j3                  d	       | j                  |       t        j.                         | _        | j4                  j7                  t         j8                  j:                         | j                  | j4                         t=        j                  | |       y )
Ntoolbarimages-symbolic.svg)zoompanflatimage-buttonclicked   <small> 
 </small>T)r   Boxr5   add_css_class_gtk_ids	toolitemsappend	SeparatorImagenew_from_giconr   Iconnew_for_stringstrr   _get_data_pathToggleButtonButton	set_childr<   getattr_signal_handlerset_tooltip_textLabel
set_markupr6   messageset_justifyJustificationr   r   )	r[   canvastexttooltip_text
image_filecallbackimagebuttonlabels	            r%   r5   zNavigationToolbar2GTK4.__init__K  s   9%8< 	 4D,
H|CMMO,II,,'',,X0:|=-IK LMNE
 '//&A  "

DMM$& U#  (  0%+^^742&4F"##L1KK%	 0 		C	E$Eyy{  !2!2!8!89DLL!''f5r'   c                     t        j                  d j                  j                         t         j                  j
                  d      }| _        t        j                         }|j                  d       |j                  d       |j                  |       |j                  |       g }d }t         j                  j                         j                               D ]  \  }\  }}t        j                         }|j                  |       |D ]  }	|j                  d|	         |j                  |       |j                  |        j                  j!                         |v s|} ||   g|d | ||dz   d  }|j#                  dd	||       |j%                  d|d
          |j'                  t(        j*                  j-                  t.        j0                  j3                  t4        j6                  d                      |j9                   j                  j;                                t=        j>                  |j@                  d       fd       }
|jC                           jD                  S )NzSave the figureT)titletransient_foractionmodalz	All files*z*.r   formatzFile formatr   savefig.directoryresponsec           
         | j                         }| j                  d      }j                  j                         |   d   }| j	                          d _        |t        j                  j                  k7  ry t        j                  d   r1|j                         }|j                         t        j                  d<   	 j                  j                  j                  |j                         |       y # t        $ r}t        j                   j                  j#                         t        j$                  j&                  t        j(                  j*                  dt-        |            }|j/                          Y d }~y d }~ww xY w)Nr?  r   r@  )r?  T)r;  message_typer   r=  r2  )get_file
get_choicer1  get_supported_filetypes_groupedrf   _save_dialogr   ResponseTypeACCEPTmplrcParams
get_parentget_pathr)   savefig	ExceptionMessageDialogget_rootMessageTypeERRORButtonsTypeOKr$  show)dialogrA  filefmtparentemsgr[   s          r%   on_responsez7NavigationToolbar2GTK4.save_figure.<locals>.on_response  s   ??$D##H-C++==?DQGCNN $D3++222||/0*4:OO4E01""**4==?3*G ''"&++"6"6"8!$!6!6OO..dQ	!
 

s   =5C3 3	F<A;E<<F)#r   FileChooserNativer1  rQ  FileChooserActionSAVErG  
FileFilterset_nameadd_pattern
add_filter
set_filter	enumeraterF  itemsr  get_default_filetype
add_choice
set_choiceset_current_folderr   Filenew_for_pathospath
expanduserrJ  rK  set_current_nameget_default_filename	functoolspartialr<   rV  UNKNOWN_SAVED_STATUS)r[   r   rW  ffformatsdefault_formatir   fmtsrY  r]  s   `          r%   save_figurez"NavigationToolbar2GTK4.save_figureu  s   &&#++..0((--	
 #^^
K 
s""(;;=CCE G 		#OA|d!BKK +C5z*+b!NN4 {{//1T9!"		# >* 0W_n-E 0N1,-.0(M7GD(GAJ/!!#(("7"7GGs||,?@A#C 	D @ @ BC			6>>:	6	 
7	, 	(((r'   N)r  r  r  r5   r{  r   r'   r%   r  r  J  s    (6T=)r'   r  c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)ToolbarGTK4r  c                    t        j                  | |       t        j                  j                  |        | j	                  dt        j
                  j                         t        j                         | _        | j                  | j                         i | _	        i | _
        t        j                         }|j                  d       |j                  d       | j                  |       t        j                         | _        | j                  j                  t        j                   j"                         | j                  | j                         y )Norientationr  T)r   r5   r   r  set_propertyOrientation
HORIZONTAL	_tool_boxr  _groups
_toolitemsr,  r-  r6   _messager/  r0  r   )r[   toolmanagerr8  s      r%   r5   zToolbarGTK4.__init__  s    ""45-)C)CD DNN# 		C	E$E		!!#"3"3"9"9:DMM"r'   c                 `   |rt        j                         }nt        j                         }|j                  |       |j	                  d       |^t         j
                  j                  t        j                  j                  |            }|j                  |       |j	                  d       |d}| j                  |||       |j                  d| j                  |      }	|j                  |       | j                  j!                  |g        | j                  |   j#                  ||	f       y )Nr  r  r3   r  )r   r&  r'  	set_labelr  r   r!  r   r"  r#  r(  _add_buttonr<   
_call_toolr+  r  
setdefaultr  )
r[   r   grouppositionr4  descriptiontoggler7  r6  signals
             r%   add_toolitemzToolbarGTK4.add_toolitem  s    %%'FZZ\FV$!II,,''
35EU#  0H1	4??DA,""4,$$ff%56r'   c                     d g}| j                   |   j                         }|$|j                  |       |j                         }|$||   S r"   )r  get_first_childr  get_next_sibling)r[   r  r  childrenchilds        r%   _find_child_at_positionz#ToolbarGTK4._find_child_at_position  sU    6U#335OOE"**,E  !!r'   c                 2   || j                   vrZ| j                   r| j                          t        j                         }| j                  j                  |       || j                   |<   | j                   |   j                  || j                  ||             y r"   )r  _add_separatorr   r  r  r  insert_child_afterr  )r[   r7  r  r  	group_boxs        r%   r  zToolbarGTK4._add_button  sv    $||##%	INN!!),"+DLLU..D00A	Cr'   c                 &    | j                  |       y r"   )trigger_tool)r[   btnr   s      r%   r  zToolbarGTK4._call_tool  s    $r'   c                     || j                   vry | j                   |   D ]8  \  }}|j                  |       |j                  |       |j                  |       : y r"   )r  handler_block
set_activehandler_unblock)r[   r   toggledtoolitemr  s        r%   toggle_toolitemzToolbarGTK4.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"   )r  popr  remove)r[   r   r  _signalr  s        r%   remove_toolitemzToolbarGTK4.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
                  j                  |       y )Nr  )r   r  r  r  rP   r  r  )r[   seps     r%   r  zToolbarGTK4._add_separator  s9    mmo(@(@Ac"r'   c                 :    | j                   j                  |       y r"   )r  r  )r[   ss     r%   set_messagezToolbarGTK4.set_message  s    "r'   N)r  r  r  _icon_extensionr5   r  r  r  r  r  r  r  r  r   r'   r%   r}  r}    s5    %O#270"C -9#
#r'   r}  c                       e Zd Zd Zy)SaveFigureGTK4c                 J    t         j                  | j                                y r"   )r  r{  "_make_classic_style_pseudo_toolbar)r[   r   r   s      r%   triggerzSaveFigureGTK4.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y)HelpGTK4c                    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 `FigureCanvasGTK4._get_key`.
        	BackSpace	Page_DownPage_UpScroll_Lock)	backspacepagedownpageupscroll_lockr   Nr3   <>r   z<shift> )splitlen
capitalizeisupperr   )r[   r]   specialpartsr   r   s         r%   _normalize_shortcutzHelpGTK4._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 `FigureCanvasGTK4._get_key`).
        - The shortcut window only shows keyboard shortcuts, not mouse buttons.
        zcmd+zMouseButton.)
startswith)r[   r]   s     r%   _is_valid_shortcutzHelpGTK4._is_valid_shortcut8  s      S G)G%GGr'   c           	          t        j                         }t         j                  j                  j                               D ]  \  }}|j                  st        j                         }|j                  |       |j                         }|$|j                  d       |j                         }|$t        j                  dj                   fd j                  j                  |      D              |j                  |j                        }|j                  |        t        j                   dd j"                  j$                  j'                               }|j)                  |       |j+                          y )NF c              3   b   K   | ]&  }j                  |      rj                  |       ( y wr"   )r  r  )r   r]   r[   s     r%   r   z#HelpGTK4.trigger.<locals>.<genexpr>U  s2      %5..s3 ,,S1%5s   ,/)acceleratorr:  subtitleHelpT)r:  r=  r;  )r   ShortcutsSectionsortedr  toolsrg  r  ShortcutsGroupr  r  set_visibler  ShortcutsShortcutr   get_tool_keymapr   ShortcutsWindow_figurer1  rQ  r(  rV  )	r[   r   sectionr   toolr  r  shortcutwindows	   `        r%   r  zHelpGTK4.triggerA  sA   &&( !1!1!7!7!=!=!?@ 	#JD$## &&(ENN5!))+E#!!%(..0 # ,,HH %5#//??E%5 5 ii))+H LL"/	#2 $$,,--668: 	!r'   N)r  r  r  r  r  r  r   r'   r%   r  r    s    #4H"r'   r  c                       e Zd Zd Zy)ToolCopyToClipboardGTK4c                    t        j                         5 }| j                  j                  |       | j                  j	                         \  }}t
        j                  j                  |j                         t
        j                  j                  dd|||dz        }d d d        | j                  j                         }|j                         y # 1 sw Y   5xY w)NT   r   )ioBytesIOr1  
print_rgbaget_width_heightr   Pixbufnew_from_data	getbuffer
ColorspaceRGBget_clipboardset)r[   r   r   fr   r   pb	clipboards           r%   r  zToolCopyToClipboardGTK4.triggerh  s    ZZ\ 	>QKK""1%;;//1DAq!!//090D0D0H0H$011a1>B	> KK--/	b	> 	>s   BCCNr  r   r'   r%   r  r  f  s    r'   r  c                       e Zd ZeZeZy)r#   N)r  r  r  r  _toolbar2_classr}  _toolmanager_toolbar_classr   r'   r%   r#   r#   z  s    ,O!,r'   r#   c                       e Zd ZeZeZy)_BackendGTK4N)r  r  r  r   FigureCanvasr#   FigureManagerr   r'   r%   r  r    s    #L%Mr'   r  );rs  r  rn  
matplotlibrJ  r   r   r   matplotlib.backend_basesr   r   r   r	   r
   r   r   gir   gi_require_versionImportErrorerr
ValueErrorr[  gi.repositoryr   r   r   r   r   r  r   r   r   r   r   r   	TimerGTK4version_infor   rT   r>   DrawingArear   r  r  r}  _register_tool_classSaveFigureBaser  ToolHelpBaser  ToolCopyToClipboardBaser  ConfigureSubplotsGTKRubberbandGTKToolbarr#   exportr  r   r'   r%   <module>r     s    	 	  1 1B B BF8  ue$ 
 8 8  
 ??j0  s  B*d2b$' b$J	h)3SWW h)V]##SWW ]#@ $##$457]11 7 67 $##$45F})) F 6FR $##$45	mCC 	 6	 # " "l779 " " "l002
-) -
 &; & &g  F
;
<#EF    a.a s.   F+ 	G +F>0	F99F>G	GG