@@ -272,73 +272,82 @@ def get_renderer(self, cleared=None):
272
272
273
273
def handle_event (self , event ):
274
274
e_type = event ['type' ]
275
- guiEvent = event .get ('guiEvent' , None )
275
+ handler = getattr (self , 'handle_{0}' .format (e_type ),
276
+ self .handle_unknown_event )
277
+ return handler (event )
278
+
279
+ def handle_unknown_event (self , event ):
280
+ warnings .warn ('Unhandled message type {0}. {1}' .format (
281
+ event ['type' ], event ))
282
+
283
+ def handle_ack (self , event ):
284
+ # Network latency tends to decrease if traffic is flowing
285
+ # in both directions. Therefore, the browser sends back
286
+ # an "ack" message after each image frame is received.
287
+ # This could also be used as a simple sanity check in the
288
+ # future, but for now the performance increase is enough
289
+ # to justify it, even if the server does nothing with it.
290
+ pass
276
291
277
- if e_type == 'ack' :
278
- # Network latency tends to decrease if traffic is flowing
279
- # in both directions. Therefore, the browser sends back
280
- # an "ack" message after each image frame is received.
281
- # This could also be used as a simple sanity check in the
282
- # future, but for now the performance increase is enough
283
- # to justify it, even if the server does nothing with it.
284
- pass
285
- elif e_type == 'draw' :
286
- self .draw ()
287
- elif e_type in ('button_press' , 'button_release' , 'motion_notify' ,
288
- 'figure_enter' , 'figure_leave' , 'scroll' ):
289
- x = event ['x' ]
290
- y = event ['y' ]
291
- y = self .get_renderer ().height - y
292
-
293
- # Javascript button numbers and matplotlib button numbers are
294
- # off by 1
295
- button = event ['button' ] + 1
296
-
297
- # The right mouse button pops up a context menu, which
298
- # doesn't work very well, so use the middle mouse button
299
- # instead. It doesn't seem that it's possible to disable
300
- # the context menu in recent versions of Chrome. If this
301
- # is resolved, please also adjust the docstring in MouseEvent.
302
- if button == 2 :
303
- button = 3
304
-
305
- if e_type == 'button_press' :
306
- self .button_press_event (x , y , button , guiEvent = guiEvent )
307
- elif e_type == 'button_release' :
308
- self .button_release_event (x , y , button , guiEvent = guiEvent )
309
- elif e_type == 'motion_notify' :
310
- self .motion_notify_event (x , y , guiEvent = guiEvent )
311
- elif e_type == 'figure_enter' :
312
- self .enter_notify_event (xy = (x , y ), guiEvent = guiEvent )
313
- elif e_type == 'figure_leave' :
314
- self .leave_notify_event ()
315
- elif e_type == 'scroll' :
316
- self .scroll_event (x , y , event ['step' ], guiEvent = guiEvent )
317
- elif e_type in ('key_press' , 'key_release' ):
318
- key = _handle_key (event ['key' ])
319
- if e_type == 'key_press' :
320
- self .key_press_event (key , guiEvent = guiEvent )
321
- elif e_type == 'key_release' :
322
- self .key_release_event (key , guiEvent = guiEvent )
323
- elif e_type == 'toolbar_button' :
324
- # TODO: Be more suspicious of the input
325
- getattr (self .toolbar , event ['name' ])()
326
- elif e_type == 'refresh' :
327
- figure_label = self .figure .get_label ()
328
- if not figure_label :
329
- figure_label = "Figure {0}" .format (self .manager .num )
330
- self .send_event ('figure_label' , label = figure_label )
331
- self ._force_full = True
332
- self .draw_idle ()
292
+ def handle_draw (self , event ):
293
+ self .draw ()
333
294
334
- else :
335
- handler = getattr (self , 'handle_{0}' .format (e_type ), None )
336
- if handler is None :
337
- import warnings
338
- warnings .warn ('Unhandled message type {0}. {1}' .format (
339
- e_type , event ))
340
- else :
341
- return handler (event )
295
+ def _handle_mouse (self , event ):
296
+ x = event ['x' ]
297
+ y = event ['y' ]
298
+ y = self .get_renderer ().height - y
299
+
300
+ # Javascript button numbers and matplotlib button numbers are
301
+ # off by 1
302
+ button = event ['button' ] + 1
303
+
304
+ # The right mouse button pops up a context menu, which
305
+ # doesn't work very well, so use the middle mouse button
306
+ # instead. It doesn't seem that it's possible to disable
307
+ # the context menu in recent versions of Chrome. If this
308
+ # is resolved, please also adjust the docstring in MouseEvent.
309
+ if button == 2 :
310
+ button = 3
311
+
312
+ e_type = event ['type' ]
313
+ guiEvent = event .get ('guiEvent' , None )
314
+ if e_type == 'button_press' :
315
+ self .button_press_event (x , y , button , guiEvent = guiEvent )
316
+ elif e_type == 'button_release' :
317
+ self .button_release_event (x , y , button , guiEvent = guiEvent )
318
+ elif e_type == 'motion_notify' :
319
+ self .motion_notify_event (x , y , guiEvent = guiEvent )
320
+ elif e_type == 'figure_enter' :
321
+ self .enter_notify_event (xy = (x , y ), guiEvent = guiEvent )
322
+ elif e_type == 'figure_leave' :
323
+ self .leave_notify_event ()
324
+ elif e_type == 'scroll' :
325
+ self .scroll_event (x , y , event ['step' ], guiEvent = guiEvent )
326
+ handle_button_press = handle_button_release = handle_motion_notify = \
327
+ handle_figure_enter = handle_figure_leave = handle_scroll = \
328
+ _handle_mouse
329
+
330
+ def _handle_key (self , event ):
331
+ key = _handle_key (event ['key' ])
332
+ e_type = event ['type' ]
333
+ guiEvent = event .get ('guiEvent' , None )
334
+ if e_type == 'key_press' :
335
+ self .key_press_event (key , guiEvent = guiEvent )
336
+ elif e_type == 'key_release' :
337
+ self .key_release_event (key , guiEvent = guiEvent )
338
+ handle_key_press = handle_key_release = _handle_key
339
+
340
+ def handle_toolbar_button (self , event ):
341
+ # TODO: Be more suspicious of the input
342
+ getattr (self .toolbar , event ['name' ])()
343
+
344
+ def handle_refresh (self , event ):
345
+ figure_label = self .figure .get_label ()
346
+ if not figure_label :
347
+ figure_label = "Figure {0}" .format (self .manager .num )
348
+ self .send_event ('figure_label' , label = figure_label )
349
+ self ._force_full = True
350
+ self .draw_idle ()
342
351
343
352
def handle_resize (self , event ):
344
353
x , y = event .get ('width' , 800 ), event .get ('height' , 800 )
0 commit comments