2727
2828_log = logging .getLogger (__name__ )
2929
30- _LUT = {'AltGraph' : 'alt' ,
31- 'CapsLock' : 'caps' ,
32- 'ArrowLeft' : 'left' ,
33- 'ArrowUp' : 'up' ,
34- 'ArrowRight' : 'right' ,
35- 'ArrowDown' : 'down' ,
36- 'NumLock' : 'num_lock' ,
37- 'ScrollLock' : 'scroll_lock' }
30+ _SPECIAL_KEYS_LUT = {'Alt' : 'alt' ,
31+ 'AltGraph' : 'alt' ,
32+ 'CapsLock' : 'caps_lock' ,
33+ 'Control' : 'control' ,
34+ 'Meta' : 'meta' ,
35+ 'NumLock' : 'num_lock' ,
36+ 'ScrollLock' : 'scroll_lock' ,
37+ 'Shift' : 'shift' ,
38+ 'Super' : 'super' ,
39+ 'Enter' : 'enter' ,
40+ 'Tab' : 'tab' ,
41+ 'ArrowDown' : 'down' ,
42+ 'ArrowLeft' : 'left' ,
43+ 'ArrowRight' : 'right' ,
44+ 'ArrowUp' : 'up' ,
45+ 'End' : 'end' ,
46+ 'Home' : 'home' ,
47+ 'PageDown' : 'pagedown' ,
48+ 'PageUp' : 'pageup' ,
49+ 'Backspace' : 'backspace' ,
50+ 'Delete' : 'delete' ,
51+ 'Insert' : 'insert' ,
52+ 'Escape' : 'escape' ,
53+ 'Pause' : 'pause' ,
54+ 'Select' : 'select' ,
55+ 'Dead' : 'dead' ,
56+ 'F1' : 'f1' ,
57+ 'F2' : 'f2' ,
58+ 'F3' : 'f3' ,
59+ 'F4' : 'f4' ,
60+ 'F5' : 'f5' ,
61+ 'F6' : 'f6' ,
62+ 'F7' : 'f7' ,
63+ 'F8' : 'f8' ,
64+ 'F9' : 'f9' ,
65+ 'F10' : 'f10' ,
66+ 'F11' : 'f11' ,
67+ 'F12' : 'f12' }
3868
3969
4070def _handle_key (key ):
4171 """Handle key values"""
42- value = key
43- # Only set to lower if key value is an uppercase letter or
44- # a combination of a modifier and an uppercase letter
45- # (e.g. "ctrl+C", "A", and "ctrl+alt+T" must remain unaltered).
46- if not value [- 1 :].isupper ():
47- value = value .lower ()
48- if key in _LUT :
49- value = _LUT [key ]
50- return value
72+ value = key [key .index ('k' ) + 1 :]
73+ if 'shift+' in key :
74+ if len (value ) == 1 :
75+ key = key .replace ('shift+' , '' )
76+ if value in _SPECIAL_KEYS_LUT :
77+ value = _SPECIAL_KEYS_LUT [value ]
78+ key = key [:key .index ('k' )] + value
79+ return key
5180
5281
5382class TimerTornado (backend_bases .TimerBase ):
@@ -207,7 +236,7 @@ def handle_event(self, event):
207236
208237 def handle_unknown_event (self , event ):
209238 _log .warning ('Unhandled message type {0}. {1}' .format (
210- event ['type' ], event ))
239+ event ['type' ], event ))
211240
212241 def handle_ack (self , event ):
213242 # Network latency tends to decrease if traffic is flowing
@@ -247,6 +276,7 @@ def _handle_mouse(self, event):
247276 self .leave_notify_event ()
248277 elif e_type == 'scroll' :
249278 self .scroll_event (x , y , event ['step' ], guiEvent = guiEvent )
279+
250280 handle_button_press = handle_button_release = handle_dblclick = \
251281 handle_figure_enter = handle_figure_leave = handle_motion_notify = \
252282 handle_scroll = _handle_mouse
@@ -259,6 +289,7 @@ def _handle_key(self, event):
259289 self .key_press_event (key , guiEvent = guiEvent )
260290 elif e_type == 'key_release' :
261291 self .key_release_event (key , guiEvent = guiEvent )
292+
262293 handle_key_press = handle_key_release = _handle_key
263294
264295 def handle_toolbar_button (self , event ):
@@ -322,7 +353,6 @@ def send_event(self, event_type, **kwargs):
322353
323354
324355class NavigationToolbar2WebAgg (backend_bases .NavigationToolbar2 ):
325-
326356 # Use the standard toolbar items + download button
327357 toolitems = [
328358 (text , tooltip_text , image_file , name_of_method )
@@ -442,8 +472,8 @@ def get_javascript(cls, stream=None):
442472
443473 extensions = []
444474 for filetype , ext in sorted (FigureCanvasWebAggCore .
445- get_supported_filetypes_grouped ().
446- items ()):
475+ get_supported_filetypes_grouped ().
476+ items ()):
447477 extensions .append (ext [0 ])
448478 output .write ("mpl.extensions = {0};\n \n " .format (
449479 json .dumps (extensions )))
0 commit comments