
    g
,                        d 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	 ddl
mZmZmZmZmZ ddlmZ ddlZddlmZmZmZmZ 	  ej0                  d        ej6                  e      Zdad
 Zd Z d Z! G d de      Z" G d de      Z# G d de      Z$ G d de      Z% G d dejL                        Z' G d dejP                        Z) G d de      Z*y# e$ rZ ed	      edZ[ww xY w)z)
Common code for GTK3 and GTK4 backends.
    N)_apibackend_toolscbook)Gcf)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2	TimerBase)Cursors)GdkGioGLibGtkcairoz Gtk-based backends require cairoc                 `    | j                         D ]  }|j                           d| _        d ay NT)get_windowsclose_created_by_matplotlib_application)appwins     ]/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/backends/_backend_gtk.py_shutdown_applicationr      s2       		 "&CL    c                     t         t        j                  j                         } | t	        | dd      rt
        j                  j                         st        d      t        j                  j                  dt        j                  j                        a t         j                  dd        t         j                  dt               t         j                          t!        j"                          t         S | a t         S )Nr   FzInvalid DISPLAY variablezorg.matplotlib.Matplotlib3activatec                       y N )argskwargss     r   <lambda>z%_create_application.<locals>.<lambda>;   s    r   shutdown)r   r   Applicationget_defaultgetattrmpl_c_internal_utilsdisplay_is_validRuntimeErrorr   newApplicationFlags
NON_UNIQUEconnectr   registerr   _setup_new_guiapp)r   s    r   _create_applicationr3   -   s     oo))+;'#'?G ((99;"#=>>??../K/2/C/C/N/NPL   -IJ  -BC!!###%  Lr   c                    t        j                  t        j                  dt        j                  dt        j
                  dt        j                  dt        j                  dt        j                  dt        j                  di|       S )	Nmovepointerdefault	crosshairwaitz	ew-resizez	ns-resize)cursor)
r   check_getitemr   MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICAL)
mpl_cursors    r   mpl_to_gtk_cursor_namerD   E   sd    fi{f!!;  r   c                   >     e Zd ZdZ fdZd Zd Zd Z fdZ xZ	S )TimerGTKz0Subclass of `.TimerBase` using GTK timer events.c                 2    d | _         t        |   |i | y r    )_timersuper__init__)selfr"   r#   	__class__s      r   rJ   zTimerGTK.__init__T   s    $)&)r   c                     | j                          t        j                  | j                  | j                        | _        y r    )_timer_stopr   timeout_add	_interval	_on_timerrH   rK   s    r   _timer_startzTimerGTK._timer_startX   s,     	&&t~~t~~Fr   c                 j    | j                   't        j                  | j                          d | _         y y r    )rH   r   source_removerR   s    r   rN   zTimerGTK._timer_stop^   s*    ;;"t{{+DK #r   c                 ^    | j                   !| j                          | j                          y y r    )rH   rN   rS   rR   s    r   _timer_set_intervalzTimerGTK._timer_set_intervalc   s)    ;;" #r   c                 b    t         |           | j                  r| j                  syd | _        y)NTF)rI   rQ   	callbacks_singlerH   )rK   rL   s    r   rQ   zTimerGTK._on_timeri   s*     >>$,,DKr   )
__name__
__module____qualname____doc__rJ   rS   rN   rW   rQ   __classcell__rL   s   @r   rF   rF   Q   s%    :*G
 	 	r   rF   c                       e Zd ZeZy)_FigureCanvasGTKN)r[   r\   r]   rF   
_timer_clsr!   r   r   rb   rb   u   s    Jr   rb   c                   V     e Zd ZdZ fdZd Zed        Zd Zd Z	d Z
d Zd	 Z xZS )
_FigureManagerGTKaC  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar or Gtk.Box
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window
    c                 j    t        j                         x _        }t               }t        j                          _        |j                   j
                         t         !  ||       |dk(  rQt        j                  dk(  rdnd} j
                  j                  t        t        j                  d|                    t        j                          _         j                   j#                  dt         j$                  j&                         |dk(  r j
                  j)                   j                           j                   j+                           j,                  j+                           j                   j/                   j,                  ddd       nO|d	k(  rJ j
                  j1                   j                           j                   j3                   j,                          j,                  j5                         \  }} j6                  |dk(  rC j6                  j+                           j                   j9                   j6                  d
d
d       ni|d	k(  rdt        j:                  t         j<                  j>                        }|j1                   j6                          j                   jA                  |        j6                  jC                         \  }	}
||
jD                  z  } j
                  jG                  ||       d
 _$         j
                  jK                  d fd        j
                  jK                  ddd|    fd       tM        jN                         r4 j
                  j+                           j,                  jQ                           j,                  jS                          y )N   win32pngsvgzimages/matplotlib.orientationTr      F)vscrollbar_policydestroyc                  .    t        j                        S r    r   rn   r"   rK   s    r   r$   z,_FigureManagerGTK.__init__.<locals>.<lambda>   s    S[[5F r   delete_eventzclose-requestrg   rl   c                  .    t        j                        S r    rp   rq   s    r   r$   z,_FigureManagerGTK.__init__.<locals>.<lambda>   s    #++d*; r   )*r   get_major_version_gtk_verr3   Windowwindow
add_windowrI   rJ   sysplatformset_icon_from_filestrr   _get_data_pathBoxvboxset_propertyOrientationVERTICALaddshowcanvas
pack_start	set_childprependget_width_heighttoolbarpack_endScrolledWindow
PolicyTypeNEVERappendget_preferred_sizeheightset_default_size_destroyingr0   r)   is_interactive	draw_idle
grab_focus)rK   r   numgtk_verr   icon_extwhswmin_sizenat_sizerL   s   `          r   rJ   z_FigureManagerGTK.__init__   s   "%"7"7"99!#jjlt{{#%a< # 7uUHKK**E((+=hZ)HIJL GGI			}coo.F.FGa<KKOODII&IINNKKII  dD!<\KK!!$)),IIdkk* {{++-1<<#!|!!#		""4<<qAA''#..:N:NOT\\*		  $!%!@!@!BHh A$$Q* I'FG?CGL;	=KKKK!!# r   c                     | j                   ry d| _         | j                  j                          | j                  j                          y r   )r   rx   rn   r   rK   r"   s     r   rn   z_FigureManagerGTK.destroy   s8    
 r   c                 
   t         y 	 t         j                          d a y # t        $ rR t        j                  j                         }|j                         r"|j                  d       |j                         r" w xY w# d a w xY wr   )r   runKeyboardInterruptr   MainContextr7   pending	iteration)clscontexts     r   start_main_loopz!_FigureManagerGTK.start_main_loop   s{     	   L ! 	 &&..0G//#!!$' //#	  Ls     AA;9A;;A> >Bc                 N   | j                   j                          | j                  j                          t        j
                  d   r^ddd| j                     } t        | j                   |             r| j                   j                          y t        j                  d       y y )Nzfigure.raise_window
get_windowget_surfacers   z#Cannot raise window yet to be setup)rx   r   r   drawr)   rcParamsrv   r(   presentr   warn_external)rK   	meth_names     r   r   z_FigureManagerGTK.show   s{    <<-.(];DMMJI.wt{{I.0##% ""#HI /r   c                     d d d| j                      } || j                        r| j                  j                          y | j                  j                          y )Nc                 t    | j                         j                         t        j                  j                  z  S r    )r   	get_stater   WindowState
FULLSCREENr   s    r   r$   z6_FigureManagerGTK.full_screen_toggle.<locals>.<lambda>   s'    !,,.224OO667 r   c                 "    | j                         S r    )is_fullscreenr   s    r   r$   z6_FigureManagerGTK.full_screen_toggle.<locals>.<lambda>   s    * r   rs   )rv   rx   unfullscreen
fullscreen)rK   r   s     r   full_screen_togglez$_FigureManagerGTK.full_screen_toggle   sM    8*
 --	
 %KK$$&KK""$r   c                 6    | j                   j                         S r    )rx   	get_titlerR   s    r   get_window_titlez"_FigureManagerGTK.get_window_title   s    {{$$&&r   c                 :    | j                   j                  |       y r    )rx   	set_title)rK   titles     r   set_window_titlez"_FigureManagerGTK.set_window_title   s    e$r   c                    t        || j                  j                  z        }t        || j                  j                  z        }| j                  r,| j                  j	                         \  }}||j
                  z  }| j                  j                         }| j                  dk\  s"|j                  |j
                  cxk(  rdk(  r n n| j                  j                  ||       y | j                  j                  ||       y )Nrl      )intr   device_pixel_ratior   r   r   get_allocationrv   widthrx   r   resize)rK   r   r   r   r   canvas_sizes         r   r   z_FigureManagerGTK.resize   s    EDKK:::;Vdkk<<<=<<!%!@!@!BHhhoo%Fkk002==A!2!2k6H6H!MA!M
 KK((7KKuf-r   )r[   r\   r]   r^   rJ   rn   classmethodr   r   r   r   r   r   r_   r`   s   @r   re   re   y   sA    1!f	    $J	%'%.r   re   c                   F     e Zd Zd Zd Zd Zd Z fdZ fdZd Z	 xZ
S )_NavigationToolbar2GTKc                 l    t        j                  |      }| j                  j                  d| d       y )Nz<small>z</small>)r   markup_escape_textmessage
set_markup)rK   sescapeds      r   set_messagez"_NavigationToolbar2GTK.set_message  s-    ))!,''( ;<r   c                     | j                   j                  j                  j                  }||z
  }||z
  }||||z
  ||z
  fD cg c]  }t	        |       }}| j                   j                  |       y c c}w r    )r   figurebboxr   r   _draw_rubberband)	rK   eventx0y0x1y1r   valrects	            r   draw_rubberbandz&_NavigationToolbar2GTK.draw_rubberband  so    ##((//b[b[%'R"Wb2g$>?SC??$$T* @s   A3c                 :    | j                   j                  d        y r    )r   r   rR   s    r   remove_rubberbandz(_NavigationToolbar2GTK.remove_rubberband  s    $$T*r   c                    dD ]o  \  }}| j                   j                  |      }|s$|j                  |j                        5  |j	                  | j
                  j                  |k(         d d d        q y # 1 sw Y   |xY w)N))PanPAN)ZoomZOOM)_gtk_idsgethandler_block_signal_handler
set_activemodename)rK   r   activebuttons       r   _update_buttons_checkedz._NavigationToolbar2GTK._update_buttons_checked  s|    > 	@LD&]]&&t,F))&*@*@A @%%diinn&>?@ @	@@ @s   )A66A?	c                 >    t        |   |  | j                          y r    )rI   panr   rK   r"   rL   s     r   r   z_NavigationToolbar2GTK.pan%  s    T$$&r   c                 >    t        |   |  | j                          y r    )rI   zoomr   r   s     r   r   z_NavigationToolbar2GTK.zoom)  s    d$$&r   c                 F   | j                   j                  dkD  }| j                   j                  t        | j                         dz
  k  }d| j                  v r| j                  d   j	                  |       d| j                  v r| j                  d   j	                  |       y y )Nr   r   BackForward)
_nav_stack_poslenr   set_sensitive)rK   can_backwardcan_forwards      r   set_history_buttonsz*_NavigationToolbar2GTK.set_history_buttons-  s    ++a/oo**S-AA-EET]]"MM&!//=%MM)$22;? &r   )r[   r\   r]   r   r   r   r   r   r   r  r_   r`   s   @r   r   r     s(    
=++@''@r   r   c                       e Zd Zd Zd Zy)RubberbandGTKc                 T    t         j                  | j                         d ||||       y r    )r   r   "_make_classic_style_pseudo_toolbar)rK   r   r   r   r   s        r   r   zRubberbandGTK.draw_rubberband7  s'    ..335tRR	Mr   c                 J    t         j                  | j                                y r    )r   r   r  rR   s    r   r   zRubberbandGTK.remove_rubberband;  s    00335	7r   N)r[   r\   r]   r   r   r!   r   r   r  r  6  s    M7r   r  c                       e Zd Zd Zy)ConfigureSubplotsGTKc                 0    t         j                  | d        y r    )r   configure_subplotsr   s     r   triggerzConfigureSubplotsGTK.triggerA  s    11$=r   N)r[   r\   r]   r  r!   r   r   r	  r	  @  s    >r   r	  c                       e Zd Zdj                   ej
                          ej                          ej                               Ze	j                  Zy)_BackendGTKz{}.{}.{}N)r[   r\   r]   formatr   ru   get_minor_versionget_micro_versionbackend_versionre   r   mainloopr!   r   r   r  r  E  sI     ''O
 !00Hr   r  )+r^   loggingrz   
matplotlibr)   r   r   r   matplotlib._pylab_helpersr   matplotlib.backend_basesr   r   r	   r
   r   matplotlib.backend_toolsr   gigi.repositoryr   r   r   r   require_foreignImportErrore	getLoggerr[   _logr   r   r3   rD   rF   rb   re   r   RubberbandBaser  ConfigureSubplotsBaser	  r  r!   r   r   <module>r"     s    
  1 1 )  - 	 . -ABw w"0	!y !H' O.) O.d(@/ (@V7M00 7>=>> >
1( 1[	  A
8
9q@As   C C(	C##C(