@@ -1156,7 +1156,7 @@ def __init__(self, ax, onselect, useblit=False, button=None):
1156
1156
# will save the data (pos. at mouserelease)
1157
1157
self.eventrelease = None
1158
1158
self._prev_event = None
1159
- self.state = []
1159
+ self.state = set()
1160
1160
1161
1161
def set_active(self, active):
1162
1162
AxesWidget.set_active(self, active)
@@ -1177,6 +1177,7 @@ def connect_default_events(self):
1177
1177
self.connect_event('button_release_event', self._release)
1178
1178
self.connect_event('draw_event', self.update_background)
1179
1179
self.connect_event('key_press_event', self._on_key_press)
1180
+ self.connect_event('key_release_event', self._on_key_release)
1180
1181
self.connect_event('scroll_event', self._on_scroll)
1181
1182
1182
1183
def ignore(self, event):
@@ -1257,15 +1258,9 @@ def _press(self, event):
1257
1258
event = self._clean_event(event)
1258
1259
self.eventpress = event
1259
1260
self._prev_event = event
1260
-
1261
- self.state = []
1262
1261
key = event.key or ''
1263
1262
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')
1269
1264
self.press(event)
1270
1265
1271
1266
def press(self, event):
@@ -1287,16 +1282,6 @@ def _onmove(self, event):
1287
1282
"""Cursor move event handler and validator"""
1288
1283
if not self.ignore(event) and self.eventpress:
1289
1284
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')
1300
1285
self.onmove(event)
1301
1286
1302
1287
def onmove(self, event):
@@ -1314,13 +1299,32 @@ def on_scroll(self, event):
1314
1299
1315
1300
def _on_key_press(self, event):
1316
1301
"""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')
1318
1308
self.on_key_press(event)
1319
1309
1320
1310
def on_key_press(self, event):
1321
1311
"""Key press event handler"""
1322
1312
pass
1323
1313
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
+
1324
1328
def set_visible(self, visible):
1325
1329
""" Set the visibility of our artists """
1326
1330
self.visible = visible
0 commit comments