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

Skip to content

Commit 7c04e25

Browse files
committed
Add key release and continue refactoring state handling
1 parent f7a9222 commit 7c04e25

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

lib/matplotlib/widgets.py

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1156,7 +1156,7 @@ def __init__(self, ax, onselect, useblit=False, button=None):
11561156
# will save the data (pos. at mouserelease)
11571157
self.eventrelease = None
11581158
self._prev_event = None
1159-
self.state = []
1159+
self.state = set()
11601160

11611161
def set_active(self, active):
11621162
AxesWidget.set_active(self, active)
@@ -1177,6 +1177,7 @@ def connect_default_events(self):
11771177
self.connect_event('button_release_event', self._release)
11781178
self.connect_event('draw_event', self.update_background)
11791179
self.connect_event('key_press_event', self._on_key_press)
1180+
self.connect_event('key_release_event', self._on_key_release)
11801181
self.connect_event('scroll_event', self._on_scroll)
11811182

11821183
def ignore(self, event):
@@ -1257,15 +1258,9 @@ def _press(self, event):
12571258
event = self._clean_event(event)
12581259
self.eventpress = event
12591260
self._prev_event = event
1260-
1261-
self.state = []
12621261
key = event.key or ''
12631262
if 'alt' in key or key == ' ':
1264-
self.state.append('move')
1265-
if 'shift' in key:
1266-
self.state.append('square')
1267-
if 'ctrl' in key or 'control' in key:
1268-
self.state.append('center')
1263+
self.state.add('move')
12691264
self.press(event)
12701265

12711266
def press(self, event):
@@ -1287,16 +1282,6 @@ def _onmove(self, event):
12871282
"""Cursor move event handler and validator"""
12881283
if not self.ignore(event) and self.eventpress:
12891284
event = self._clean_event(event)
1290-
# update the state
1291-
if 'move' in self.state:
1292-
self.state = ['move']
1293-
else:
1294-
self.state = []
1295-
key = event.key or ''
1296-
if 'shift' in key:
1297-
self.state.append('square')
1298-
if 'ctrl' in key or 'control' in key:
1299-
self.state.append('center')
13001285
self.onmove(event)
13011286

13021287
def onmove(self, event):
@@ -1314,13 +1299,32 @@ def on_scroll(self, event):
13141299

13151300
def _on_key_press(self, event):
13161301
"""Key press event handler and validator"""
1317-
if not self.ignore(event):
1302+
if self.active:
1303+
key = event.key or ''
1304+
if 'shift' in key:
1305+
self.state.add('square')
1306+
if 'ctrl' in key or 'control' in key:
1307+
self.state.add('center')
13181308
self.on_key_press(event)
13191309

13201310
def on_key_press(self, event):
13211311
"""Key press event handler"""
13221312
pass
13231313

1314+
def _on_key_release(self, event):
1315+
"""Key release event handler and validator"""
1316+
if self.active:
1317+
key = event.key or ''
1318+
if 'shift' in key:
1319+
self.state.discard('square')
1320+
if 'ctrl' in key or 'control' in key:
1321+
self.state.discard('center')
1322+
self.on_key_release(event)
1323+
1324+
def on_key_release(self, event):
1325+
"""Key release event handler"""
1326+
pass
1327+
13241328
def set_visible(self, visible):
13251329
""" Set the visibility of our artists """
13261330
self.visible = visible

0 commit comments

Comments
 (0)