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

Skip to content

Commit 5ddbdcb

Browse files
committed
Move key/mouse dead reckoning to standard callbacks.
1 parent 3912f21 commit 5ddbdcb

File tree

2 files changed

+44
-34
lines changed

2 files changed

+44
-34
lines changed

lib/matplotlib/backend_bases.py

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,17 +1418,6 @@ def __init__(self, name, canvas, x, y, button=None, key=None,
14181418
self.step = step
14191419
self.dblclick = dblclick
14201420

1421-
def _process(self):
1422-
if self.name == "button_press_event":
1423-
self.canvas._button = self.button
1424-
elif self.name == "button_release_event":
1425-
self.canvas._button = None
1426-
elif self.name == "motion_notify_event" and self.button is None:
1427-
self.button = self.canvas._button
1428-
if self.key is None:
1429-
self.key = self.canvas._key
1430-
super()._process()
1431-
14321421
def __str__(self):
14331422
return (f"{self.name}: "
14341423
f"xy=({self.x}, {self.y}) xydata=({self.xdata}, {self.ydata}) "
@@ -1521,28 +1510,41 @@ def __init__(self, name, canvas, key, x=0, y=0, guiEvent=None):
15211510
super().__init__(name, canvas, x, y, guiEvent=guiEvent)
15221511
self.key = key
15231512

1524-
def _process(self):
1525-
if self.name == "key_press_event":
1526-
self.canvas._key = self.key
1527-
elif self.name == "key_release_event":
1528-
self.canvas._key = None
1529-
super()._process()
15301513

1531-
1532-
def _axes_enter_leave_emitter(event):
1533-
last = LocationEvent.lastevent
1534-
last_axes = last.inaxes if last is not None else None
1535-
if last_axes != event.inaxes:
1536-
if last_axes is not None:
1537-
try:
1538-
last.canvas.callbacks.process("axes_leave_event", last)
1539-
except Exception:
1540-
# The last canvas may already have been torn down.
1541-
pass
1542-
if event.inaxes is not None:
1543-
event.canvas.callbacks.process("axes_enter_event", event)
1544-
LocationEvent.lastevent = (
1545-
None if event.name == "figure_leave_event" else event)
1514+
# Default callback for key events.
1515+
def _key_handler(event):
1516+
# Dead reckoning of key.
1517+
if event.name == "key_press_event":
1518+
event.canvas._key = event.key
1519+
elif event.name == "key_release_event":
1520+
event.canvas._key = None
1521+
1522+
1523+
# Default callback for mouse events.
1524+
def _mouse_handler(event):
1525+
# Dead-reckoning of button and key.
1526+
if event.name == "button_press_event":
1527+
event.canvas._button = event.button
1528+
elif event.name == "button_release_event":
1529+
event.canvas._button = None
1530+
elif event.name == "motion_notify_event" and event.button is None:
1531+
event.button = event.canvas._button
1532+
if event.key is None:
1533+
event.key = event.canvas._key
1534+
# Emit axes_enter/axes_leave.
1535+
if event.name == "motion_notify_event":
1536+
last = LocationEvent.lastevent
1537+
last_axes = last.inaxes if last is not None else None
1538+
if last_axes != event.inaxes:
1539+
if last_axes is not None:
1540+
try:
1541+
last.canvas.callbacks.process("axes_leave_event", last)
1542+
except Exception:
1543+
pass # The last canvas may already have been torn down.
1544+
if event.inaxes is not None:
1545+
event.canvas.callbacks.process("axes_enter_event", event)
1546+
LocationEvent.lastevent = (
1547+
None if event.name == "figure_leave_event" else event)
15461548

15471549

15481550
def _get_renderer(figure, print_method=None):

lib/matplotlib/figure.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2376,8 +2376,16 @@ def __init__(self,
23762376
'button_press_event', lambda event: self.canvas.pick(event))
23772377
self._scroll_pick_id = self._canvas_callbacks.connect(
23782378
'scroll_event', lambda event: self.canvas.pick(event))
2379-
self._axes_enter_leave_id = self._canvas_callbacks.connect(
2380-
'motion_notify_event', backend_bases._axes_enter_leave_emitter)
2379+
connect = self._canvas_callbacks._connect_picklable
2380+
self._mouse_key_ids = [
2381+
connect('key_press_event', backend_bases._key_handler),
2382+
connect('key_release_event', backend_bases._key_handler),
2383+
connect('key_release_event', backend_bases._key_handler),
2384+
connect('button_press_event', backend_bases._mouse_handler),
2385+
connect('button_release_event', backend_bases._mouse_handler),
2386+
connect('scroll_event', backend_bases._mouse_handler),
2387+
connect('motion_notify_event', backend_bases._mouse_handler),
2388+
]
23812389

23822390
if figsize is None:
23832391
figsize = mpl.rcParams['figure.figsize']

0 commit comments

Comments
 (0)