@@ -1119,6 +1119,7 @@ def __init__(self, ax, onselect, useblit=False, button=None):
1119
1119
# will save the data (pos. at mouserelease)
1120
1120
self .eventrelease = None
1121
1121
self ._prev_event = None
1122
+ self .state = []
1122
1123
1123
1124
def set_active (self , active ):
1124
1125
AxesWidget .set_active (self , active )
@@ -1221,13 +1222,14 @@ def _press(self, event):
1221
1222
self ._prev_event = event
1222
1223
1223
1224
self .state = []
1224
- if 'alt' in event .key or event .key == ' ' :
1225
+ key = event .key or ''
1226
+ if 'alt' in key or key == ' ' :
1225
1227
self .state .append ('move' )
1226
- if 'shift' in event . key :
1228
+ if 'shift' in key :
1227
1229
self .state .append ('square' )
1228
- if 'ctrl' in event . key or 'control' in event . key :
1230
+ if 'ctrl' in key or 'control' in key :
1229
1231
self .state .append ('center' )
1230
- return event
1232
+ self . press ( event )
1231
1233
1232
1234
def press (self , event ):
1233
1235
"""Button press handler"""
@@ -1246,16 +1248,17 @@ def release(self, event):
1246
1248
1247
1249
def _onmove (self , event ):
1248
1250
"""Cursor move event handler and validator"""
1249
- if not self .ignore (event ):
1251
+ if not self .ignore (event ) and self . eventpress :
1250
1252
event = self ._clean_event (event )
1251
1253
# update the state
1252
1254
if 'move' in self .state :
1253
1255
self .state = ['move' ]
1254
1256
else :
1255
1257
self .state = []
1256
- if 'shift' in event .key :
1258
+ key = event .key or ''
1259
+ if 'shift' in key :
1257
1260
self .state .append ('square' )
1258
- if 'ctrl' in event . key or 'control' in event . key :
1261
+ if 'ctrl' in key or 'control' in key :
1259
1262
self .state .append ('center' )
1260
1263
self .onmove (event )
1261
1264
@@ -1691,6 +1694,8 @@ def __init__(self, ax, onselect, drawtype='patch',
1691
1694
self ._center_handle = ToolHandles (self .ax , [xc ], [yc ], marker = 's' ,
1692
1695
marker_props = props , useblit = self .useblit )
1693
1696
1697
+ self .active_handle = None
1698
+
1694
1699
self .artists = [self .to_draw , self ._center_handle .artist ,
1695
1700
self ._corner_handles .artist ,
1696
1701
self ._edge_handles .artist ]
@@ -1756,8 +1761,7 @@ def release(self, event):
1756
1761
return False
1757
1762
1758
1763
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"""
1761
1765
# resize an existing shape
1762
1766
if self .active_handle and not self .active_handle == 'C' :
1763
1767
x1 , x2 , y1 , y2 = self ._extents_on_press
@@ -1872,8 +1876,8 @@ def draw_shape(self, extents):
1872
1876
x0 , x1 , y0 , y1 = extents
1873
1877
xmin , xmax = sorted ([x0 , x1 ])
1874
1878
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 () )
1877
1881
1878
1882
xmin = max (xlim [0 ], xmin )
1879
1883
ymin = max (ylim [0 ], ymin )
@@ -1896,10 +1900,10 @@ def _set_active_handle(self, event):
1896
1900
c_idx , c_dist = self ._corner_handles .closest (event .x , event .y )
1897
1901
e_idx , e_dist = self ._edge_handles .closest (event .x , event .y )
1898
1902
m_idx , m_dist = self ._center_handle .closest (event .x , event .y )
1899
-
1900
- if self ._moving :
1903
+
1904
+ if 'move' in self .state :
1901
1905
self .active_handle = 'C'
1902
- self ._extents_on_press = self .extents
1906
+ self ._extents_on_press = self .extents
1903
1907
1904
1908
# Set active handle as closest handle, if mouse click is close enough.
1905
1909
elif m_dist < self .maxdist * 2 :
0 commit comments