@@ -2985,6 +2985,7 @@ def _press(self, event):
2985
2985
self .update ()
2986
2986
2987
2987
if self ._active_handle is None and not self .ignore_event_outside :
2988
+ # Start drawing a new rectangle
2988
2989
x = event .xdata
2989
2990
y = event .ydata
2990
2991
self .visible = False
@@ -3051,16 +3052,28 @@ def _release(self, event):
3051
3052
return False
3052
3053
3053
3054
def _onmove (self , event ):
3054
- """Motion notify event handler."""
3055
+ """
3056
+ Motion notify event handler.
3055
3057
3058
+ This can do one of four things:
3059
+ - Translate
3060
+ - Rotate
3061
+ - Re-size
3062
+ - Continue the creation of a new shape
3063
+ """
3056
3064
state = self ._state
3057
3065
rotate = ('rotate' in state and
3058
3066
self ._active_handle in self ._corner_order )
3059
3067
eventpress = self ._eventpress
3060
3068
# The calculations are done for rotation at zero: we apply inverse
3061
3069
# transformation to events except when we rotate and move
3070
+ state = self ._state
3071
+ rotate = ('rotate' in state and
3072
+ self ._active_handle in self ._corner_order )
3062
3073
move = self ._active_handle == 'C'
3063
- if not move and not rotate :
3074
+ resize = self ._active_handle and not move
3075
+
3076
+ if resize :
3064
3077
inv_tr = self ._get_rotation_transform ().inverted ()
3065
3078
event .xdata , event .ydata = inv_tr .transform (
3066
3079
[event .xdata , event .ydata ])
@@ -3091,8 +3104,7 @@ def _onmove(self, event):
3091
3104
np .arctan2 (a [1 ]- b [1 ], a [0 ]- b [0 ]))
3092
3105
self .rotation = np .rad2deg (self ._rotation_on_press + angle )
3093
3106
3094
- # resize an existing shape
3095
- elif self ._active_handle and self ._active_handle != 'C' :
3107
+ elif resize :
3096
3108
size_on_press = [x1 - x0 , y1 - y0 ]
3097
3109
center = [x0 + size_on_press [0 ] / 2 , y0 + size_on_press [1 ] / 2 ]
3098
3110
@@ -3145,8 +3157,7 @@ def _onmove(self, event):
3145
3157
x1 = x0 + sign * abs (y1 - y0 ) * \
3146
3158
self ._aspect_ratio_correction
3147
3159
3148
- # move existing shape
3149
- elif self ._active_handle == 'C' :
3160
+ elif move :
3150
3161
x0 , x1 , y0 , y1 = self ._extents_on_press
3151
3162
dx = event .xdata - eventpress .xdata
3152
3163
dy = event .ydata - eventpress .ydata
@@ -3155,8 +3166,8 @@ def _onmove(self, event):
3155
3166
y0 += dy
3156
3167
y1 += dy
3157
3168
3158
- # new shape
3159
3169
else :
3170
+ # Create a new shape
3160
3171
self ._rotation = 0
3161
3172
# Don't create a new rectangle if there is already one when
3162
3173
# ignore_event_outside=True
0 commit comments