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

Skip to content

Commit 248bfef

Browse files
committed
Prevent repeat key events
Prevent repeat key events Add missing brace Use cross-platform event.which and handle shift casing Handle other special keys Add support for firefox Handle modified number keys (like #), pause, and capslock Cleaner handling of shift Style update Style update Handle all key events in chrome Better handling of shift modifier in firefox
1 parent 70d19e5 commit 248bfef

File tree

2 files changed

+91
-16
lines changed

2 files changed

+91
-16
lines changed

lib/matplotlib/backends/backend_webagg_core.py

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io
1919
import json
2020
import os
21+
import re
2122
import time
2223
import warnings
2324

@@ -47,6 +48,55 @@ def new_figure_manager_given_figure(num, figure):
4748
return manager
4849

4950

51+
_KEY_LUT = {'shift+À': '~',
52+
'À': '`',
53+
'\x1b': 'esc',
54+
'\x08': 'backspace',
55+
'shift+Ü': '|',
56+
'Ü': '\\',
57+
'shift+Ý': '}',
58+
'Ý': ']',
59+
'shift+Û': '{',
60+
'Û': '[',
61+
'shift+º': ':',
62+
'º': ';',
63+
'shift+Þ': '"',
64+
'Þ': "'",
65+
'shift+¼': '<',
66+
'¼': ',',
67+
'shift+¾': '>',
68+
'¾': '.',
69+
'shift+¿': '?',
70+
'¿': '/',
71+
'shift+»': '+',
72+
'»': '=',
73+
'shift+½': '_',
74+
'½': '-',
75+
'\x7f': 'del',
76+
'\t': 'tab'}
77+
78+
79+
def _get_key(key):
80+
"""Handle key codes with unicode characters"""
81+
ind = key.index('u+')
82+
char = chr(int(key[ind + 2:], 16))
83+
if re.match('\d', char):
84+
if 'shift+' in key:
85+
num = int(key[-1])
86+
key = key.replace('shift+', '')
87+
char = ')!@#$%^&*('[num]
88+
elif 'shift+' in key:
89+
if 'shift+' + char in _KEY_LUT:
90+
key = key.replace('shift+', '')
91+
char = _KEY_LUT['shift+' + char]
92+
else:
93+
char = _KEY_LUT[char]
94+
else:
95+
char = _KEY_LUT.get(char, char)
96+
key = key[:key.index('u+')] + char
97+
return key
98+
99+
50100
class FigureCanvasWebAggCore(backend_agg.FigureCanvasAgg):
51101
supports_blit = False
52102

@@ -222,7 +272,8 @@ def handle_event(self, event):
222272
self.scroll_event(x, y, event['step'])
223273
elif e_type in ('key_press', 'key_release'):
224274
key = event['key']
225-
275+
if 'u+' in key:
276+
key = _get_key(key)
226277
if e_type == 'key_press':
227278
self.key_press_event(key)
228279
elif e_type == 'key_release':

lib/matplotlib/backends/web_backend/mpl.js

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -460,31 +460,55 @@ mpl.figure.prototype.mouse_event = function(event, name) {
460460

461461
mpl.figure.prototype.key_event = function(event, name) {
462462

463-
// Ignore pause/break and caps lock
464-
if (event.keyCode === 19 || event.keyCode === 20)
465-
return;
463+
// Prevent repeat events
464+
if (name == 'key_press')
465+
{
466+
if (event.which === this._key)
467+
return;
468+
else
469+
this._key = event.which;
470+
}
471+
if (name == 'key_release')
472+
this._key = null;
473+
466474
var value = '';
467-
if (event.ctrlKey && !(event.keyCode == 17)) {
475+
if (event.ctrlKey && !(event.which == 17))
468476
value += "ctrl+";
469-
}
470-
if (event.altKey && !(event.keyCode == 18)) {
477+
if (event.altKey && !(event.which == 18))
471478
value += "alt+";
472-
}
473-
if (event.shiftKey && !(event.keyCode == 16)) {
474-
value += "shift+";
475-
}
476479

477-
if (event.keyCode == 17) {
480+
if (event.which == 17) {
478481
value += "control";
482+
if (event.shiftKey)
483+
value += "+shift"
479484
}
480-
else if (event.keyCode == 18) {
485+
else if (event.which == 18) {
481486
value += "alt";
487+
if (event.shiftKey)
488+
value += "+shift"
482489
}
483-
else if (event.keyCode == 16) {
490+
else if (event.which == 16)
484491
value += "shift";
485-
}
486492
else {
487-
value += String.fromCharCode(event.keyCode).toLowerCase();
493+
if (event.which >= 65 && event.which <= 90) {
494+
if (event.shiftKey)
495+
value += String.fromCharCode(event.which);
496+
else
497+
value += String.fromCharCode(event.which).toLowerCase();
498+
}
499+
else if (event.key) {
500+
if (event.shiftKey && (event.which <= 46 ||
501+
(event.key >= 91 && event.key <= 145)))
502+
value += "shift+"
503+
value += event.key.toLowerCase();
504+
}
505+
else if (event.originalEvent.keyIdentifier) {
506+
if (event.shiftKey)
507+
value += "shift+"
508+
value += event.originalEvent.keyIdentifier.toLowerCase();
509+
}
510+
else
511+
value += String.fromCharCode(event.which);
488512
}
489513

490514
this.send_message(name, {key: value});

0 commit comments

Comments
 (0)