2323from matplotlib .cbook import is_string_like , enumerate
2424from matplotlib .backend_bases import \
2525 RendererBase , GraphicsContextBase , FigureManagerBase , FigureCanvasBase ,\
26- NavigationToolbar2 , cursors , MplEvent
26+ NavigationToolbar2 , cursors
2727from matplotlib .figure import Figure
2828from matplotlib ._pylab_helpers import Gcf
2929from matplotlib .numerix import asarray
@@ -92,73 +92,17 @@ def new_figure_manager(num, *args, **kwargs):
9292 window .end ()
9393 figManager = FigureManagerFltkAgg (canvas , num , window )
9494 return figManager
95-
96- def fltk_event2mpl_event (s ,source , need_pos = False , need_button = False , need_key = False ):
97- special = {Fltk .FL_Shift_R :'shift' ,
98- Fltk .FL_Shift_L :'shift' ,
99- Fltk .FL_Control_R :'control' ,
100- Fltk .FL_Control_L :'control' ,
101- Fltk .FL_Control_R :'control' ,
102- Fltk .FL_Control_L :'control' ,
103- 65515 :'win' ,
104- 65516 :'win' ,
105- }
106-
107- thisEvent = MplEvent (s ,source )
108- thisEvent .x = Fltk .Fl .event_x ()
109- # flipy so y=0 is bottom of canvas
110- thisEvent .y = source .figure .bbox .height () - Fltk .Fl .event_y ()
111- if need_pos :
112- thisEvent .inaxes = None
113- for a in source .figure .get_axes ():
114- if a .in_axes (thisEvent .x , thisEvent .y ):
115- thisEvent .inaxes = a
116- xdata , ydata = a .transData .inverse_xy_tup ((thisEvent .x , thisEvent .y ))
117- thisEvent .xdata = xdata
118- thisEvent .ydata = ydata
119- break
120-
121- if need_button :
122- b1 = Fltk .Fl .event_button1 ()
123- b2 = Fltk .Fl .event_button2 ()
124- b3 = Fltk .Fl .event_button3 ()
125- thisEvent .button = None
126- if b1 :
127- thisEvent .button = 1
128- if b2 :
129- thisEvent .button = 2
130- if b3 :
131- thisEvent .button = 3
132- else :
133- thisEvent .button = None
134-
135- ikey = Fltk .Fl .event_key ()
136- if need_key and Fltk .Fl .event_key (ikey ):
137- if (ikey <= 255 ):
138- thisEvent .key = chr (ikey )
139- else :
140- try :
141- thisEvent .key = special [ikey ]
142- except :
143- thisEvent .key = None
144- else :
145- thisEvent .key = None
146- return thisEvent
95+
14796
14897class FltkCanvas (Fltk .Fl_Widget ):
14998
15099 def __init__ (self ,x ,y ,w ,h ,l ,source ):
151100 Fltk .Fl_Widget .__init__ (self , 0 , 0 , w , h , "canvas" )
152101 self ._source = source
153102 self ._oldsize = (None ,None )
154- self .button_press_event = None
155- self .button_double_press_event = None
156- self .button_release_event = None
157- self .button_drag_event = None
158- self .motion_notify_event = None
159- self .key_press_event = None
160- self .key_release_event = None
161103 self ._draw_overlay = False
104+ self ._button = None
105+ self ._key = None
162106
163107
164108 def draw (self ):
@@ -172,38 +116,59 @@ def draw(self):
172116
173117 def handle (self , event ):
174118 self .window ().make_current ()
119+ x = Fltk .Fl .event_x ()
120+ y = Fltk .Fl .event_y ()
121+ yf = self ._source .figure .bbox .height () - y
122+ ikey = Fltk .Fl .event_key ()
123+ #~ if Fltk.Fl.event_key(ikey):
124+ #~ if(ikey<=255):
125+ #~ self._key=chr(ikey)
126+ #~ else:
127+ #~ try:
128+ #~ self._key=special[ikey]
129+ #~ except:
130+ #~ self._key=None
131+ #~ else:
132+ #~ self._key=None
175133 if event == Fltk .FL_PUSH :
134+ if Fltk .Fl .event_button1 ():
135+ self ._button = 1
136+ elif Fltk .Fl .event_button2 ():
137+ self ._button = 2
138+ elif Fltk .Fl .event_button3 ():
139+ self ._button = 3
140+ else :
141+ self ._button = None
142+
176143 if self ._draw_overlay :
177- self ._oldx = Fltk . Fl . event_x ()
178- self ._oldy = Fltk . Fl . event_y ()
179- if Fltk .Fl .event_clicks () and self . button_double_press_event :
180- self . double_press_event ( fltk_event2mpl_event ( 'button_double_press_event' , self ._source ,True , True , True ) )
144+ self ._oldx = x
145+ self ._oldy = y
146+ if Fltk .Fl .event_clicks ():
147+ FigureCanvasBase . button_press_event ( self ._source , x , yf , self . _button , self . _key )
181148 return 1
182- elif self . button_press_event :
183- self .button_press_event (fltk_event2mpl_event ( 'button_press_event' , self ._source ,True , True , True ))
149+ else :
150+ FigureCanvasBase .button_press_event (self ._source , x , yf , self . _button , self . _key )
184151 return 1
185152 elif event == Fltk .FL_ENTER :
186153 return 1
187154 elif event == Fltk .FL_LEAVE :
188155 return 1
189156 elif event == Fltk .FL_MOVE :
190- if self .motion_notify_event :
191- self .motion_notify_event (fltk_event2mpl_event ('motion_notify_event' ,self ._source ,True ,False ,True ))
192- return 1
157+ FigureCanvasBase .motion_notify_event (self ._source , x , yf , self ._button , self ._key )
158+ return 1
193159 elif event == Fltk .FL_DRAG :
194160 if self ._draw_overlay :
195161 self ._dx = Fltk .Fl .event_x ()- self ._oldx
196162 self ._dy = Fltk .Fl .event_y ()- self ._oldy
197163 Fltk .fl_overlay_rect (self ._oldx ,self ._oldy ,self ._dx ,self ._dy )
198- if self .motion_notify_event :
199- self .motion_notify_event (fltk_event2mpl_event ('motion_notify_event' ,self ._source ,True ,True ,True ))
200- return 1
164+ FigureCanvasBase .motion_notify_event (self ._source , x , yf , self ._button , self ._key )
165+ return 1
201166 elif event == Fltk .FL_RELEASE :
202167 if self ._draw_overlay :
203168 Fltk .fl_overlay_clear ()
204- if self .button_release_event :
205- self .button_release_event ( fltk_event2mpl_event ( 'button_release_event' , self . _source , True , True , True ))
206- return 1
169+ FigureCanvasBase . button_release_event ( self . _source , x , yf , self ._button , self . _key )
170+ self ._button = None
171+ return 1
207172 else :
208173 return 0
209174
@@ -237,38 +202,6 @@ def print_figure(self, filename, dpi=150,
237202
238203 agg = self .switch_backends (FigureCanvasAgg )
239204 agg .print_figure (filename , dpi , facecolor , edgecolor , orientation )
240-
241- def mpl_connect (self ,s ,func ):
242- if (s == 'button_press_event' ):
243- self .canvas .button_press_event = func
244- elif (s == 'button_double_press_event' ):
245- self .canvas .button_double_press_event = func
246- elif (s == 'button_release_event' ):
247- self .canvas .button_release_event = func
248- elif (s == 'motion_notify_event' ):
249- self .canvas .motion_notify_event = func
250- self .canvas .button_drag_event = func
251- elif (s == 'key_press_event' ):
252- self .canvas .key_press_event = func
253- elif (s == 'key_release_event' ):
254- self .canvas .key_release_event = func
255- return s
256-
257- def mpl_disconnect (self ,s ):
258- if (s == 'button_press_event' ):
259- self .canvas .button_press_event = None
260- elif (s == 'button_double_press_event' ):
261- self .canvas .button_double_press_event = None
262- elif (s == 'button_release_event' ):
263- self .canvas .button_release_event = None
264- elif (s == 'motion_notify_event' ):
265- self .canvas .motion_notify_event = None
266- self .canvas .button_drag_event = None
267- elif (s == 'key_press_event' ):
268- self .canvas .key_press_event = None
269- elif (s == 'key_release_event' ):
270- self .canvas .key_release_event = None
271- return None
272205
273206 def widget (self ):
274207 return self .canvas
0 commit comments