Skip to content

Commit 441b971

Browse files
committed
Merge pull request #4100 from blink1073/pass-js-event
Add guiEvent handling for web backends
2 parents 0c2f763 + 0c3416d commit 441b971

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

lib/matplotlib/backends/backend_webagg_core.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ def get_renderer(self, cleared=None):
271271

272272
def handle_event(self, event):
273273
e_type = event['type']
274+
guiEvent = event.get('guiEvent', None)
275+
274276
if e_type == 'ack':
275277
# Network latency tends to decrease if traffic is flowing
276278
# in both directions. Therefore, the browser sends back
@@ -299,23 +301,23 @@ def handle_event(self, event):
299301
button = 3
300302

301303
if e_type == 'button_press':
302-
self.button_press_event(x, y, button)
304+
self.button_press_event(x, y, button, guiEvent=guiEvent)
303305
elif e_type == 'button_release':
304-
self.button_release_event(x, y, button)
306+
self.button_release_event(x, y, button, guiEvent=guiEvent)
305307
elif e_type == 'motion_notify':
306-
self.motion_notify_event(x, y)
308+
self.motion_notify_event(x, y, guiEvent=guiEvent)
307309
elif e_type == 'figure_enter':
308-
self.enter_notify_event(xy=(x, y))
310+
self.enter_notify_event(xy=(x, y), guiEvent=guiEvent)
309311
elif e_type == 'figure_leave':
310312
self.leave_notify_event()
311313
elif e_type == 'scroll':
312-
self.scroll_event(x, y, event['step'])
314+
self.scroll_event(x, y, event['step'], guiEvent=guiEvent)
313315
elif e_type in ('key_press', 'key_release'):
314316
key = _handle_key(event['key'])
315317
if e_type == 'key_press':
316-
self.key_press_event(key)
318+
self.key_press_event(key, guiEvent=guiEvent)
317319
elif e_type == 'key_release':
318-
self.key_release_event(key)
320+
self.key_release_event(key, guiEvent=guiEvent)
319321
elif e_type == 'toolbar_button':
320322
# TODO: Be more suspicious of the input
321323
getattr(self.toolbar, event['name'])()

lib/matplotlib/backends/web_backend/mpl.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,19 @@ mpl.findpos = function(e) {
454454
return {"x": x, "y": y};
455455
};
456456

457+
/*
458+
* return a copy of an object with only non-object keys
459+
* we need this to avoid circular references
460+
* http://stackoverflow.com/a/24161582/3208463
461+
*/
462+
function simpleKeys (original) {
463+
return Object.keys(original).reduce(function (obj, key) {
464+
if (typeof original[key] !== 'object')
465+
obj[key] = original[key]
466+
return obj;
467+
}, {});
468+
}
469+
457470
mpl.figure.prototype.mouse_event = function(event, name) {
458471
var canvas_pos = mpl.findpos(event)
459472

@@ -467,7 +480,8 @@ mpl.figure.prototype.mouse_event = function(event, name) {
467480
var y = canvas_pos.y;
468481

469482
this.send_message(name, {x: x, y: y, button: event.button,
470-
step: event.step});
483+
step: event.step,
484+
guiEvent: simpleKeys(event)});
471485

472486
/* This prevents the web browser from automatically changing to
473487
* the text insertion cursor when the button is pressed. We want
@@ -507,7 +521,8 @@ mpl.figure.prototype.key_event = function(event, name) {
507521

508522
this._key_event_extra(event, name);
509523

510-
this.send_message(name, {key: value});
524+
this.send_message(name, {key: value,
525+
guiEvent: simpleKeys(event)});
511526
return false;
512527
}
513528

0 commit comments

Comments
 (0)