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

Skip to content

Commit 4e11da2

Browse files
committed
More "state" refactoring
1 parent 9a21943 commit 4e11da2

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

lib/matplotlib/widgets.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +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 = []
11221123

11231124
def set_active(self, active):
11241125
AxesWidget.set_active(self, active)
@@ -1221,13 +1222,14 @@ def _press(self, event):
12211222
self._prev_event = event
12221223

12231224
self.state = []
1224-
if 'alt' in event.key or event.key == ' ':
1225+
key = event.key or ''
1226+
if 'alt' in key or key == ' ':
12251227
self.state.append('move')
1226-
if 'shift' in event.key:
1228+
if 'shift' in key:
12271229
self.state.append('square')
1228-
if 'ctrl' in event.key or 'control' in event.key:
1230+
if 'ctrl' in key or 'control' in key:
12291231
self.state.append('center')
1230-
return event
1232+
self.press(event)
12311233

12321234
def press(self, event):
12331235
"""Button press handler"""
@@ -1246,16 +1248,17 @@ def release(self, event):
12461248

12471249
def _onmove(self, event):
12481250
"""Cursor move event handler and validator"""
1249-
if not self.ignore(event):
1251+
if not self.ignore(event) and self.eventpress:
12501252
event = self._clean_event(event)
12511253
# update the state
12521254
if 'move' in self.state:
12531255
self.state = ['move']
12541256
else:
12551257
self.state = []
1256-
if 'shift' in event.key:
1258+
key = event.key or ''
1259+
if 'shift' in key:
12571260
self.state.append('square')
1258-
if 'ctrl' in event.key or 'control' in event.key:
1261+
if 'ctrl' in key or 'control' in key:
12591262
self.state.append('center')
12601263
self.onmove(event)
12611264

@@ -1691,6 +1694,8 @@ def __init__(self, ax, onselect, drawtype='patch',
16911694
self._center_handle = ToolHandles(self.ax, [xc], [yc], marker='s',
16921695
marker_props=props, useblit=self.useblit)
16931696

1697+
self.active_handle = None
1698+
16941699
self.artists = [self.to_draw, self._center_handle.artist,
16951700
self._corner_handles.artist,
16961701
self._edge_handles.artist]
@@ -1756,8 +1761,7 @@ def release(self, event):
17561761
return False
17571762

17581763
def onmove(self, event):
1759-
"""on motion notify event if box/line is wanted"""
1760-
1764+
"""on motion notify event if box/line is wanted"""
17611765
# resize an existing shape
17621766
if self.active_handle and not self.active_handle == 'C':
17631767
x1, x2, y1, y2 = self._extents_on_press
@@ -1872,8 +1876,8 @@ def draw_shape(self, extents):
18721876
x0, x1, y0, y1 = extents
18731877
xmin, xmax = sorted([x0, x1])
18741878
ymin, ymax = sorted([y0, y1])
1875-
xlim = self.ax.get_xlim()
1876-
ylim = self.ax.get_ylim()
1879+
xlim = sorted(self.ax.get_xlim())
1880+
ylim = sorted(self.ax.get_ylim())
18771881

18781882
xmin = max(xlim[0], xmin)
18791883
ymin = max(ylim[0], ymin)
@@ -1896,10 +1900,10 @@ def _set_active_handle(self, event):
18961900
c_idx, c_dist = self._corner_handles.closest(event.x, event.y)
18971901
e_idx, e_dist = self._edge_handles.closest(event.x, event.y)
18981902
m_idx, m_dist = self._center_handle.closest(event.x, event.y)
1899-
1900-
if self._moving:
1903+
1904+
if 'move' in self.state:
19011905
self.active_handle = 'C'
1902-
self._extents_on_press = self.extents
1906+
self._extents_on_press = self.extents
19031907

19041908
# Set active handle as closest handle, if mouse click is close enough.
19051909
elif m_dist < self.maxdist * 2:

0 commit comments

Comments
 (0)