rL iWddlZddlZddlZddlmZddlZddlmZmZm Z ddl m Z m Z m Z mZmZmZmZ ddlZ ej*ddddlmZmZmZmZmZd d lmZd d lm Z m!Z!m"Z"m#Z#m$Z%ejLe'Z(ejRd Z*Gd de!ejVZ,Gdde#ejZZ.Gdde ej^Z0ejbe,GddejdZ3ejbe,GddejhZ5ejbe,GddejlZ7e0Z-ejbe,ejpejbe,ejrGdde"Z:e jvGdde ZzFigureCanvasGTK3..s3Dr$Nct||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+dt-j.}|j1d|j3}|j5|t,j6|j9dy)N)figurer scroll_eventbutton_press_eventbutton_release_eventconfigure_eventzscreen-changedznotify::scale-factordrawkey_press_eventkey_release_eventmotion_notify_evententer_notify_eventleave_notify_event size_allocateTs/.matplotlib-canvas { background-color: white; }zmatplotlib-canvas)super__init__ _idle_draw_id_rubberband_rectconnectr.r/r0r1_update_device_pixel_ratio on_draw_event _post_drawr3r4r5r6r7r8 set_events __class__ event_mask set_can_focusr CssProviderload_from_dataget_style_context add_provider#STYLE_PROVIDER_PRIORITY_APPLICATION add_class)selfr-css style_ctxrBs r"r:zFigureCanvasGTK3.__init__;s ' $ ^T->->? )T-D-DE +T-F-FG &T-A-AB %T-L-LM +T-L-LM VT-?-?@ VT__= &T-A-AB (T-C-CD *T-E-EF )T-D-DE )T-D-DE _T-?-?@ 112 4 oo MN**, sC$K$KL/0r$c8td|jy)N close_event)r _processrKs r"destroyzFigureCanvasGTK3.destroyZs=$'002r$c|jd}|J|jt|tjj }|j dyy)NwindowT) get_property set_cursorr#r MainContextdefault iteration)rKcursorrTcontexts r"rVzFigureCanvasGTK3.set_cursor]sS""8,     08 9&&..0G   d # r$c^|Q|j}|j|jjj \}}}}n|j |j }}||jz}|jjj||jzz }||fS)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_windowget_device_position get_displayget_device_managerget_client_pointerxydevice_pixel_ratior-bboxheight)rKeventrTtrbrcstates r" _mpl_coordszFigureCanvasGTK3._mpl_coordses =__&F#77""$779LLNPNAq!U77EGGqA '' ' KK   # #a$*A*A&A A!t r$c|jtjjk(rdnd}t d|g|j |||j |j|djy)Nrr.)step modifiersguiEventF) directionrScrollDirectionUPr rj_mpl_modifiersrirP)rKwidgetrgrms r"r.zFigureCanvasGTK3.scroll_event{shOOs':':'='==q2>4 #$$U+ #26!00=! #$,8:r$ctd|g|j||j|j|j|dj y)Nr/rnroFr rjbuttonrsrirPrKrtrgs r"r/z#FigureCanvasGTK3.button_press_eventsT' #$$U+ #-2\\ #!00=! #$,8:r$ctd|g|j||j|j|j|dj y)Nr0rvFrwrys r"r0z%FigureCanvasGTK3.button_release_eventsT)4 #$$U+ #-2\\ #!00=! #$,8:r$c|td||j|g|jd|ijy)Nr3roTr _get_keyrjrPrys r"r3z FigureCanvasGTK3.key_press_events>"Du% !(,(8(8(: ! !!)r$c|td||j|g|jd|ijy)Nr4roTr|rys r"r4z"FigureCanvasGTK3.key_release_events>$du% !(,(8(8(: ! !!)r$ctd|g|j||j|j|j |j|dj y)Nr5)buttonsrnroF)r rj _mpl_buttonsrirsrPrys r"r5z$FigureCanvasGTK3.motion_notify_eventsY($ #1A1A%1H #,,U[[9!00=! #$,8:r$ctjj|jj }t d|g|j ||j||djy)Nfigure_enter_eventrv rKeymapget_for_displayr_get_modifier_stater rjrsrPrKrtrggtk_modss r"r6z#FigureCanvasGTK3.enter_notify_eventj::--     2 2 4 *D &43C3CE3J & $ 3 3H =$ &&.hjr$ctjj|jj }t d|g|j ||j||djy)Nfigure_leave_eventrvrrs r"r7z#FigureCanvasGTK3.leave_notify_eventrr$c0|jj}|j|jz|z }|j|jz|z }|jj ||dt d|j|jy)NFforward resize_event) r-dpiwidthrdrfset_size_inchesr rP draw_idle)rKrt allocationdpivalwinchhinchs r"r8zFigureCanvasGTK3.size_allocates{  4#:#::VC!!D$;$;;fD ##E5%#@ND)224 r$ctjtjjftj tjj ftjtjjftjtjjftjtjjfg}|Dcgc] \}}||zs |c}}Scc}}wr) rLEFTr ModifierType BUTTON1_MASKMIDDLE BUTTON2_MASKRIGHT BUTTON3_MASKBACK BUTTON4_MASKFORWARD BUTTON5_MASK) event_staternnamemasks r"rzFigureCanvasGTK3._mpl_buttonss  s//<< =   !1!1!>!> ?    0 0 = = >   s//<< =  #"2"2"?"? @  (1GtK$4FGGGs  C+#C+excludec8dtjjdfdtjjdfdtjjdfdtjj dfg}|Dcgc]\}}}||k7r||zr|c}}}Scc}}}w)Nctrlcontrolaltshiftr9)rr CONTROL_MASK MOD1_MASK SHIFT_MASK MOD4_MASK)rrrnrrkeys r"rszFigureCanvasGTK3._mpl_modifierssS%%22I > C$$.. 6 c&&117 ; c&&00' :  -6::tSc>kD&8: ::s9Bcfttj|j}t j |tj |j}|j|j|}d|vr!|jr|jddjg||S)Nrr+) chrrkeyval_to_unicodekeyvalr_unikey_or_keysym_to_mplkey keyval_namersri isprintableremovejoin)rKrgunikeyrmodss r"r}zFigureCanvasGTK3._get_keysS**5<<89// COOELL13""5;;"< d?v113 KK xx $  %%r$c|j|jr!|j|jyyr)_set_device_pixel_ratioget_scale_factor queue_resize queue_drawrKargskwargss r"r>z+FigureCanvasGTK3._update_device_pixel_ratios9  ' '(=(=(? @     OO  Ar$c|jdy|j|jz}|j|jz}|dks|dkry|jj }|jj ||z ||z dy)NrTFr)rUrrdrfr-rr)rKrtrgwhrs r"r1z FigureCanvasGTK3.configure_events   x ( 0  KK$11 1 LL422 2 q5AE kkoo ##AGQWe#Dr$c2||_|jyr)r<r)rKrects r"_draw_rubberbandz!FigureCanvasGTK3._draw_rubberbands $ r$cjyfdjD\}}}}||z}||z}|j|||j|||j|||j|||j|||j|||j|||j|||jd|j d|j dd|j ddd|j|j dd|j ddd|jy)Nc3<K|]}|jz ywr)rd).0dimrKs r" z.FigureCanvasGTK3._post_draw..s$:d555:sr)rrrr) r<move_toline_to set_antialiasset_line_widthset_dashset_source_rgbstroke_preservestroke) rKrtctxx0y0rrx1y1s ` r"r@zFigureCanvasGTK3._post_draws$  ( :#'#8#8: B1 !V !V B B B B B B B B ! 1 VQ 1a#  VQ 1a# r$cyr)rKrtrs r"r?zFigureCanvasGTK3.on_draw_events r$cF|jr|jyyr) is_drawablerrQs r"r2zFigureCanvasGTK3.draws     OO  r$cdjdk7ryfd}tj|_y)NrcN jd_y#d_wxYw)NrF)r2r;)rrKs r" idle_drawz-FigureCanvasGTK3.draw_idle..idle_draw s( ' %&"&'"s $)r;ridle_add)rKrs` r"rzFigureCanvasGTK3.draw_idles,    "   "]]95r$ctjj}|jr#|j d|jr"yy)NT)rrWrXpendingrY)rKr[s r" flush_eventszFigureCanvasGTK3.flush_events(s:""**,oo   d #oor$r)-__name__ __module__ __qualname__required_interactive_frameworkr classproperty manager_classr EventMaskBUTTON_PRESS_MASKBUTTON_RELEASE_MASK EXPOSURE_MASKKEY_PRESS_MASKKEY_RELEASE_MASKENTER_NOTIFY_MASKLEAVE_NOTIFY_MASKPOINTER_MOTION_MASK SCROLL_MASKrCr:rRrVrjr.r/r0r3r4r5r6r7r8 staticmethodrrsr}r>r1rr@r?r2rr __classcell__)rBs@r"r&r&,sd%+"&D&&'DEM--11MM556MM//0MM001MM22 3 MM33 4 MM33 4MM556MM--.J1>3$,  11 H H/3::&  <  6$r$r&ceZdZdZdZy)NavigationToolbar2GTK3c tjj||jtjj i|_|jD]E\}}}}|%|jtjd0tjjtjjtt!j"d|dtj$j&}|dvrtj(ntj*x|j |<}|j-||j/||j1dt3|||_|j7||j|dHtj8}|j|dtj:} | j=d|j?d|jA| tj8}|j|dtj:|_!|jBjEtjFjH|jA|jB|jKtMj||y)Nrlimages -symbolic.svg)zoompanclickedu   T)'rr: set_styler ToolbarStyleICONS_gtk_ids toolitemsinsertSeparatorToolItemImagenew_from_giconrIconnew_for_stringstrr_get_data_pathIconSize LARGE_TOOLBARToggleToolButton ToolButton set_labelset_icon_widgetr=getattr_signal_handlerset_tooltip_textToolItemLabel set_markup set_expandaddmessage set_justify Justificationrshow_allr) rKcanvastext tooltip_text image_filecallbackimagerxtoolitemlabels r"r:zNavigationToolbar2GTK3.__init__0s  & s''--. 8< $ 4D, H| C113R8II,,'',,X0:|=-IKLM ** ,E +3o*E$$&  "DMM$ &   T "  " "5 )%+^^742&4F "  # #L 1 KK #% $0<<> Hb!   C ED! U<<> Hb!yy{    !2!2!8!89 T\\" ''f5r$c  tjdjjtjj tj tjjtjtjjf jjjD]\}}tj}|j||D]}|jd| j!|jj#|vst j%|t'j( j*d fd} j-t.j0d j3jj5 j7d j9} j;} j=}jj|j?d} jA|tjjk7ryt.j0dr0tBjDjG|t.j0d< jjHjK|| |S#tL$r} tjNjjtQ| tjRjTtjVj  j9 jAYd} ~ yd} ~ wwxYw) NzSave the figure)title transient_foractionrz*.znotify::filtercjj}jj|d}j t t jjd|y)Nr.) get_filterget_namer%get_supported_filetypes_groupedset_current_namerrget_current_name with_suffix)rrfmtdialogrKs r"on_notify_filterz.on_notify_filterrsl$$&//1D++==?EaHC  # #D0023??!C5 JK Mr$zsavefig.directoryTr)format)r/r& message_typer),rFileChooserDialogr% get_toplevelFileChooserActionSAVE STOCK_CANCEL ResponseTypeCANCEL STOCK_SAVEOKr5items FileFilterset_name add_pattern add_filterget_default_filetype set_filter functoolspartialr=set_current_foldermplrcParamsr6get_default_filenameset_do_overwrite_confirmationrun get_filenamer3r4rRospathdirnamer-savefig Exception MessageDialogr MessageTypeERROR ButtonsType) rKrrfmtsffr9r;responsefnameer:s ` @r" save_figurez"NavigationToolbar2GTK3.save_figure`s&&#++224((--%%s'7'7'>'>^^s'7'7':':<  ;;>>@FFH &JD$!B KK  +C5z* +   b !{{//1T9!!"% &   6>>+; < M = M !!#,,/B"CD @ @ BC,,T2::<##%    kk99;BKKMJ1M s''** * <<+ ,020FCLL, -  KK   & &uS & 9L &&"kk668s1v __22COO 9 Hg 9t||E22LL'..x8 9 9r$ctj}|jdtjj|j |ddd|j y)NriFTr)r SeparatorrkrlVERTICALrr$)rKseps r"rzToolbarGTK3._add_separatorsBmmo (@(@A UD!, r$c:|jj|yr)rnr)rKss r" set_messagezToolbarGTK3.set_messages "r$N) rrr_icon_extensionr:r}rtrurrrrrr$r"rgrgs/%O 70 5 -9  #r$rgceZdZdZy)SaveFigureGTK3cJtj|jyr)rre"_make_classic_style_pseudo_toolbarrs r"triggerzSaveFigureGTK3.triggers**  3 3 5 7r$Nrrrrrr$r"rrs7r$rc*eZdZdZdZdZdZdZy)HelpGTK3cddddd}|jd}|ddDcgc] }d |zd z }}|d}||vr||}n5t|d kDr|j}n|jr|d gz }d j ||zScc}w)z Convert Matplotlib key presses to GTK+ accelerator identifiers. Related to `FigureCanvasGTK3._get_key`. BackSpace Page_DownPage_Up Scroll_Lock) backspacepagedownpageup scroll_lockrNrl<>rz)splitlen capitalizeisupperr)rKrspecialpartsmodrs r"_normalize_shortcutzHelpGTK3._normalize_shortcuts%#(   #+0":6Cc C66Bi '>#,C X\.."C [[] YK Dwwt}s""7sB c2d|vxr|jd 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. zcmd+z MouseButton.) startswith)rKrs r"_is_valid_shortcutzHelpGTK3._is_valid_shortcuts S G)G%GGr$c tj}tjjj D]\}}|j stj}|j||jddtjdjfdjj|D|j|j }|j|tjddjj j#}|j%|j||j'y)Nc$|jdS)NF) set_visible)rtdatas r"r+z1HelpGTK3._show_shortcuts_window..sf.@.@.Gr$ c3bK|]&}j|rj|(ywr)rr)rrrKs r"rz2HelpGTK3._show_shortcuts_window..s2%5..s3,,S1%5s,/) acceleratorr.subtitleHelpT)r.modalr/)rShortcutsSectionsortedrrtoolsrGrzShortcutsGroupr forallShortcutsShortcutrget_tool_keymaprShortcutsWindow_figurer%r?showr$)rKsectionrtoolrxshortcutrTs` r"_show_shortcuts_windowzHelpGTK3._show_shortcuts_window s&&( !1!1!7!7!=!=!?@ JD$## &&(E KK  LLG N,,HH%5#//??E%55ii)) +H IIh ) ,$$,,--::<>   7r$c:tj|jjj dtj j tjj|jd}|j|jy)Nrr)r.) rr\rr%r?r]INFOr_rF_get_help_textrUrR)rKr:s r"_show_shortcuts_dialogzHelpGTK3._show_shortcuts_dialog,sf"" LL   , , . s##S__%7%79L9L9N  r$cttjddd|jy|jy)Nrr)r check_versionrr)rKrs r"rzHelpGTK3.trigger4s/   QA & .  ' ' )  ' ' )r$N)rrrrrrrrrr$r"rrs#4H D*r$rceZdZdZy)ToolCopyToClipboardGTK3ctjjtj}|j j }|j\}}}}tj|||||} |j| yr) r ClipboardgetrSELECTION_CLIPBOARDr%r] get_geometrypixbuf_get_from_window set_image) rKrr clipboardrTrbrcrrfpbs r"rzToolCopyToClipboardGTK3.trigger=skMM%%c&=&=> '')$1131eV  ' '1eV DBr$Nrrr$r"rr;s r$rceZdZeZeZy)r)N)rrrr_toolbar2_classrg_toolmanager_toolbar_classrr$r"r)r)Ls ,O!,r$r)ceZdZeZeZy) _BackendGTK3N)rrrr& FigureCanvasr) FigureManagerrr$r"rrQs #L%Mr$r)=rNloggingrWpathlibr matplotlibrQrrrmatplotlib.backend_basesrrr r r r r gi ImportErrorerrrequire_version ValueErrorrd gi.repositoryrrrrrrrrrrrr TimerGTK3 getLoggerr_logcacher# DrawingArear&rrrjrg_register_tool_classSaveFigureBaser ToolHelpBaserToolCopyToClipboardBaserConfigureSubplotsGTK RubberbandGTKr)exportrrr$r"rs 11BBBF  Bue$ 76 w" 99 @$'@$F`3S[[`FI##SWWI#X$##$457]11767 $##$45R*}))R*6R*j$##$45 mCC 6  " ""l779" ""l002-)-  &;&&IF ; <#EF  a.a s.F4G 4G9 GG G GG