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

Skip to content

Commit 623e05d

Browse files
committed
Add key release and continue refactoring state handling
1 parent 4e11da2 commit 623e05d

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
@@ -1119,7 +1119,7 @@ def __init__(self, ax, onselect, useblit=False, button=None):
11191119
# will save the data (pos. at mouserelease)
11201120
self.eventrelease = None
11211121
self._prev_event = None
1122-
self.state = []
1122+
self.state = set()
11231123

11241124
def set_active(self, active):
11251125
AxesWidget.set_active(self, active)
@@ -1140,6 +1140,7 @@ def connect_default_events(self):
11401140
self.connect_event('button_release_event', self._release)
11411141
self.connect_event('draw_event', self.update_background)
11421142
self.connect_event('key_press_event', self._on_key_press)
1143+
self.connect_event('key_release_event', self._on_key_release)
11431144
self.connect_event('scroll_event', self._on_scroll)
11441145

11451146
def ignore(self, event):
@@ -1220,15 +1221,9 @@ def _press(self, event):
12201221
event = self._clean_event(event)
12211222
self.eventpress = event
12221223
self._prev_event = event
1223-
1224-
self.state = []
12251224
key = event.key or ''
12261225
if 'alt' in key or key == ' ':
1227-
self.state.append('move')
1228-
if 'shift' in key:
1229-
self.state.append('square')
1230-
if 'ctrl' in key or 'control' in key:
1231-
self.state.append('center')
1226+
self.state.add('move')
12321227
self.press(event)
12331228

12341229
def press(self, event):
@@ -1250,16 +1245,6 @@ def _onmove(self, event):
12501245
"""Cursor move event handler and validator"""
12511246
if not self.ignore(event) and self.eventpress:
12521247
event = self._clean_event(event)
1253-
# update the state
1254-
if 'move' in self.state:
1255-
self.state = ['move']
1256-
else:
1257-
self.state = []
1258-
key = event.key or ''
1259-
if 'shift' in key:
1260-
self.state.append('square')
1261-
if 'ctrl' in key or 'control' in key:
1262-
self.state.append('center')
12631248
self.onmove(event)
12641249

12651250
def onmove(self, event):
@@ -1277,13 +1262,32 @@ def on_scroll(self, event):
12771262

12781263
def _on_key_press(self, event):
12791264
"""Key press event handler and validator"""
1280-
if not self.ignore(event):
1265+
if self.active:
1266+
key = event.key or ''
1267+
if 'shift' in key:
1268+
self.state.add('square')
1269+
if 'ctrl' in key or 'control' in key:
1270+
self.state.add('center')
12811271
self.on_key_press(event)
12821272

12831273
def on_key_press(self, event):
12841274
"""Key press event handler"""
12851275
pass
12861276

1277+
def _on_key_release(self, event):
1278+
"""Key release event handler and validator"""
1279+
if self.active:
1280+
key = event.key or ''
1281+
if 'shift' in key:
1282+
self.state.discard('square')
1283+
if 'ctrl' in key or 'control' in key:
1284+
self.state.discard('center')
1285+
self.on_key_release(event)
1286+
1287+
def on_key_release(self, event):
1288+
"""Key release event handler"""
1289+
pass
1290+
12871291
def set_visible(self, visible):
12881292
""" Set the visibility of our artists """
12891293
self.visible = visible

0 commit comments

Comments
 (0)