Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit da8790a

Browse files
Alejandro Garcíatacaswell
authored andcommitted
Improve WebAgg backend handling of shift as a modifier
1 parent 49db5c4 commit da8790a

2 files changed

Lines changed: 56 additions & 23 deletions

File tree

lib/matplotlib/backends/backend_webagg_core.py

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,56 @@
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

4070
def _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

5382
class 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

324355
class 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)))

lib/matplotlib/backends/web_backend/js/mpl.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -656,11 +656,14 @@ mpl.figure.prototype.key_event = function (event, name) {
656656
if (event.ctrlKey && event.key !== 'Control') {
657657
value += 'ctrl+';
658658
}
659-
if (event.altKey && event.key !== 'Alt') {
659+
else if (event.altKey && event.key !== 'Alt') {
660660
value += 'alt+';
661661
}
662+
else if (event.shiftKey && event.key !== 'Shift') {
663+
value += 'shift+';
664+
}
662665

663-
value += event.key;
666+
value += 'k' + event.key;
664667

665668
this._key_event_extra(event, name);
666669

0 commit comments

Comments
 (0)