@@ -251,68 +251,53 @@ def get_tk_widget(self):
251
251
"""
252
252
return self ._tkcanvas
253
253
254
+ def _event_mpl_coords (self , event ):
255
+ # calling canvasx/canvasy allows taking scrollbars into account (i.e.
256
+ # the top of the widget may have been scrolled out of view).
257
+ return (self ._tkcanvas .canvasx (event .x ),
258
+ # flipy so y=0 is bottom of canvas
259
+ self .figure .bbox .height - self ._tkcanvas .canvasy (event .y ))
260
+
254
261
def motion_notify_event (self , event ):
255
- x = event .x
256
- # flipy so y=0 is bottom of canvas
257
- y = self .figure .bbox .height - event .y
258
- super ().motion_notify_event (x , y , guiEvent = event )
262
+ super ().motion_notify_event (
263
+ * self ._event_mpl_coords (event ), guiEvent = event )
259
264
260
265
def enter_notify_event (self , event ):
261
- x = event .x
262
- # flipy so y=0 is bottom of canvas
263
- y = self .figure .bbox .height - event .y
264
- super ().enter_notify_event (guiEvent = event , xy = (x , y ))
266
+ super ().enter_notify_event (
267
+ guiEvent = event , xy = self ._event_mpl_coords (event ))
265
268
266
269
def button_press_event (self , event , dblclick = False ):
267
- x = event .x
268
- # flipy so y=0 is bottom of canvas
269
- y = self .figure .bbox .height - event .y
270
270
num = getattr (event , 'num' , None )
271
-
272
- if sys .platform == 'darwin' :
273
- # 2 and 3 were reversed on the OSX platform I tested under tkagg.
274
- if num == 2 :
275
- num = 3
276
- elif num == 3 :
277
- num = 2
278
-
279
- super ().button_press_event (x , y , num ,
280
- dblclick = dblclick , guiEvent = event )
271
+ if sys .platform == 'darwin' : # 2 and 3 are reversed.
272
+ num = {2 : 3 , 3 : 2 }.get (num , num )
273
+ super ().button_press_event (
274
+ * self ._event_mpl_coords (event ), num , dblclick = dblclick ,
275
+ guiEvent = event )
281
276
282
277
def button_dblclick_event (self , event ):
283
278
self .button_press_event (event , dblclick = True )
284
279
285
280
def button_release_event (self , event ):
286
- x = event .x
287
- # flipy so y=0 is bottom of canvas
288
- y = self .figure .bbox .height - event .y
289
-
290
281
num = getattr (event , 'num' , None )
291
-
292
- if sys .platform == 'darwin' :
293
- # 2 and 3 were reversed on the OSX platform I tested under tkagg.
294
- if num == 2 :
295
- num = 3
296
- elif num == 3 :
297
- num = 2
298
-
299
- super ().button_release_event (x , y , num , guiEvent = event )
282
+ if sys .platform == 'darwin' : # 2 and 3 are reversed.
283
+ num = {2 : 3 , 3 : 2 }.get (num , num )
284
+ super ().button_release_event (
285
+ * self ._event_mpl_coords (event ), num , guiEvent = event )
300
286
301
287
def scroll_event (self , event ):
302
- x = event .x
303
- y = self .figure .bbox .height - event .y
304
288
num = getattr (event , 'num' , None )
305
289
step = 1 if num == 4 else - 1 if num == 5 else 0
306
- super ().scroll_event (x , y , step , guiEvent = event )
290
+ super ().scroll_event (
291
+ * self ._event_mpl_coords (event ), step , guiEvent = event )
307
292
308
293
def scroll_event_windows (self , event ):
309
294
"""MouseWheel event processor"""
310
295
# need to find the window that contains the mouse
311
296
w = event .widget .winfo_containing (event .x_root , event .y_root )
312
297
if w == self ._tkcanvas :
313
- x = event .x_root - w .winfo_rootx ()
314
- y = event . y_root - w . winfo_rooty ()
315
- y = self .figure . bbox . height - y
298
+ x = self . _tkcanvas . canvasx ( event .x_root - w .winfo_rootx () )
299
+ y = ( self . figure . bbox . height
300
+ - self ._tkcanvas . canvasy ( event . y_root - w . winfo_rooty ()))
316
301
step = event .delta / 120.
317
302
FigureCanvasBase .scroll_event (self , x , y , step , guiEvent = event )
318
303
0 commit comments