
    G8c+                        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 ddlmZ ddlZddlmZmZmZmZ 	  ej.                  d        ej4                  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jH                        Z% G d dejL                        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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     B/usr/lib/python3/dist-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_applicationr2   ,   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_namerC   D   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   rI   zTimerGTK.__init__S   s    $)&)r   c                     | j                          t        j                  | j                  | j                        | _        y r   )_timer_stopr   timeout_add	_interval	_on_timerrG   rJ   s    r   _timer_startzTimerGTK._timer_startW   s,     	&&t~~t~~Fr   c                 j    | j                   't        j                  | j                          d | _         y y r   )rG   r   source_removerQ   s    r   rM   zTimerGTK._timer_stop]   s*    ;;"t{{+DK #r   c                 ^    | j                   !| j                          | j                          y y r   )rG   rM   rR   rQ   s    r   _timer_set_intervalzTimerGTK._timer_set_intervalb   s)    ;;" #r   c                 b    t         |           | j                  r| j                  syd | _        y)NTF)rH   rP   	callbacks_singlerG   )rJ   rK   s    r   rP   zTimerGTK._on_timerh   s*     >>$,,DKr   )
__name__
__module____qualname____doc__rI   rR   rM   rV   rP   __classcell__rK   s   @r   rE   rE   P   s%    :*G
 	 	r   rE   c                   F     e Zd ZdZ fdZ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                     t        j                         x _        }t               }t        j                          _        |j                   j
                         t         !  ||       |dk(  rm j
                  j                  dd       t        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"                  j1                   j.                  d	d	d
       nO|dk(  rJ j
                  j3                   j"                          j"                  j5                   j.                          j.                  j7                         \  }} j8                  |dk(  rC j8                  j-                           j"                  j;                   j8                  ddd
       ni|dk(  rdt        j<                  t         j>                  j@                        }|j3                   j8                          j"                  jC                  |        j8                  jE                         \  }	}
||
jF                  z  } j
                  jI                  ||       d _%         j
                  jM                  d fd        j
                  jM                  ddd|    fd       tO        jP                         r4 j
                  j-                           j.                  jS                           j.                  jU                          y )N   
matplotlib
Matplotlibwin32pngsvgzimages/matplotlib.orientationTr      F)vscrollbar_policydestroyc                  .    t        j                        S r   r   rl   r!   rJ   s    r   r#   z,_FigureManagerGTK.__init__.<locals>.<lambda>   s    S[[5F r   delete_eventzclose-requestrc   rj   c                  .    t        j                        S r   rn   ro   s    r   r#   z,_FigureManagerGTK.__init__.<locals>.<lambda>   s    #++d*; r   )+r   get_major_version_gtk_verr2   Windowwindow
add_windowrH   rI   set_wmclass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_destroyingr/   r(   is_interactive	draw_idle
grab_focus)rJ   r   numgtk_verr   icon_extwhswmin_sizenat_sizerK   s   `          r   rI   z_FigureManagerGTK.__init__   s   "%"7"7"99!#jjlt{{#%a<KK##L,? # 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   rv   rl   r   rJ   r!   s     r   rl   z_FigureManagerGTK.destroy   s8    
 r   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_surfacerq   z#Cannot raise window yet to be setup)rv   r   r   drawr(   rcParamsrt   r'   presentr   warn_external)rJ   	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   rq   )rt   rv   unfullscreen
fullscreen)rJ   r   s     r   full_screen_togglez$_FigureManagerGTK.full_screen_toggle   sM    8*
 --	
 %KK$$&KK""$r   c                 6    | j                   j                         S r   )rv   	get_titlerQ   s    r   get_window_titlez"_FigureManagerGTK.get_window_title   s    {{$$&&r   c                 :    | j                   j                  |       y r   )rv   	set_title)rJ   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 )Nrj      )intr   device_pixel_ratior   r   r   get_allocationrt   widthrv   r   resize)rJ   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   )rZ   r[   r\   r]   rI   rl   r   r   r   r   r   r^   r_   s   @r   ra   ra   t   s-    2!h	J	%'%.r   ra   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)rJ   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)	rJ   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   rQ   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)rJ   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   )rH   panr   rJ   r!   rK   s     r   r   z_NavigationToolbar2GTK.pan  s    T$$&r   c                 >    t        |   |  | j                          y r   )rH   zoomr   r   s     r   r   z_NavigationToolbar2GTK.zoom  s    d$$&r   c                 Z   | j                   j                  dkD  }| j                   j                  t        | j                   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len	_elementsr   set_sensitive)rJ   can_backwardcan_forwards      r   set_history_buttonsz*_NavigationToolbar2GTK.set_history_buttons  s    ++a/oo**S1J1J-Ka-OOT]]"MM&!//=%MM)$22;? &r   )rZ   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)rJ   r   r   r   r   s        r   r   zRubberbandGTK.draw_rubberband   s'    ..335tRR	Mr   c                 J    t         j                  | j                                y r   )r   r   r   rQ   s    r   r   zRubberbandGTK.remove_rubberband$  s    00335	7r   N)rZ   r[   r\   r   r   r    r   r   r   r     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.trigger*  s    11$=r   N)rZ   r[   r\   r  r    r   r   r   r   )  s    >r   r   c                       e Zd Z ej                         d ej
                         d ej                         Zed        Z	y)_BackendGTK.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   MainContextr6   pending	iteration)contexts    r   mainloopz_BackendGTK.mainloop5  s{     	   L ! 	 &&..0G//#!!$' //#	  Ls     AA;9A;;A> >BN)
rZ   r[   r\   r   rs   get_minor_versionget_micro_versionbackend_versionstaticmethodr  r    r   r   r  r  .  sG    O    r   r  ))r]   loggingry   rd   r(   r   r   r   matplotlib._pylab_helpersr   matplotlib.backend_basesr   r   r	   r
   matplotlib.backend_toolsr   gigi.repositoryr   r   r   r   require_foreignImportErrore	getLoggerrZ   _logr   r   r2   rC   rE   ra   r   RubberbandBaser   ConfigureSubplotsBaser   r  r    r   r   <module>r     s     
  1 1 )@ @ , 	 . -ABw w"0	!y !H}.) }.@(@/ (@V7M00 7>=>> >
 (  o  A
8
9q@As   C C	CC