@@ -118,6 +118,158 @@ def onselect(epress, erelease):
118118 assert artist .get_alpha () == 0.3
119119
120120
121+ def test_rectangle_resize ():
122+ ax = get_ax ()
123+
124+ def onselect (epress , erelease ):
125+ pass
126+
127+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
128+ # Create rectangle
129+ do_event (tool , 'press' , xdata = 0 , ydata = 10 , button = 1 )
130+ do_event (tool , 'onmove' , xdata = 100 , ydata = 120 , button = 1 )
131+ do_event (tool , 'release' , xdata = 100 , ydata = 120 , button = 1 )
132+ assert tool .extents == (0.0 , 100.0 , 10.0 , 120.0 )
133+
134+ # resize NE handle
135+ extents = tool .extents
136+ xdata , ydata = extents [1 ], extents [3 ]
137+ xdata_new , ydata_new = xdata + 10 , ydata + 5
138+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
139+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
140+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
141+ assert tool .extents == (0.0 , xdata_new , 10.0 , ydata_new )
142+
143+ # resize E handle
144+ extents = tool .extents
145+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
146+ xdata_new , ydata_new = xdata + 10 , ydata
147+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
148+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
149+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
150+ assert tool .extents == (0.0 , xdata_new , 10.0 , 125.0 )
151+
152+ # resize W handle
153+ extents = tool .extents
154+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
155+ xdata_new , ydata_new = xdata + 15 , ydata
156+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
157+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
158+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
159+ assert tool .extents == (xdata_new , 120.0 , 10.0 , 125.0 )
160+
161+ # resize SW handle
162+ extents = tool .extents
163+ xdata , ydata = extents [0 ], extents [2 ]
164+ xdata_new , ydata_new = xdata + 20 , ydata + 25
165+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
166+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
167+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
168+ assert tool .extents == (xdata_new , 120.0 , ydata_new , 125.0 )
169+
170+
171+ @pytest .mark .parametrize ('use_default_state' , [True , False ])
172+ def test_rectangle_resize_center (use_default_state ):
173+ ax = get_ax ()
174+
175+ def onselect (epress , erelease ):
176+ pass
177+
178+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
179+ # Create rectangle
180+ do_event (tool , 'press' , xdata = 70 , ydata = 65 , button = 1 )
181+ do_event (tool , 'onmove' , xdata = 125 , ydata = 130 , button = 1 )
182+ do_event (tool , 'release' , xdata = 125 , ydata = 130 , button = 1 )
183+ assert tool .extents == (70.0 , 125.0 , 65.0 , 130.0 )
184+
185+ if use_default_state :
186+ tool ._default_state .add ('center' )
187+
188+ # resize NE handle
189+ extents = tool .extents
190+ xdata , ydata = extents [1 ], extents [3 ]
191+ xdiff , ydiff = 10 , 5
192+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
193+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
194+ if not use_default_state :
195+ do_event (tool , 'on_key_press' , key = 'control' )
196+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
197+ if not use_default_state :
198+ do_event (tool , 'on_key_release' , key = 'control' )
199+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
200+ assert tool .extents == (70.0 - xdiff , xdata_new , 65.0 - ydiff , ydata_new )
201+
202+ # resize E handle
203+ extents = tool .extents
204+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
205+ xdiff = 10
206+ xdata_new , ydata_new = xdata + xdiff , ydata
207+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
208+ if not use_default_state :
209+ do_event (tool , 'on_key_press' , key = 'control' )
210+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
211+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
212+ if not use_default_state :
213+ do_event (tool , 'on_key_release' , key = 'control' )
214+ assert tool .extents == (60.0 - xdiff , xdata_new , 60.0 , 135.0 )
215+
216+ # resize E handle negative diff
217+ extents = tool .extents
218+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
219+ xdiff = - 20
220+ xdata_new , ydata_new = xdata + xdiff , ydata
221+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
222+ if not use_default_state :
223+ do_event (tool , 'on_key_press' , key = 'control' )
224+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
225+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
226+ if not use_default_state :
227+ do_event (tool , 'on_key_release' , key = 'control' )
228+ assert tool .extents == (50.0 - xdiff , xdata_new , 60.0 , 135.0 )
229+
230+ # resize W handle
231+ extents = tool .extents
232+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
233+ xdiff = 15
234+ xdata_new , ydata_new = xdata + xdiff , ydata
235+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
236+ if not use_default_state :
237+ do_event (tool , 'on_key_press' , key = 'control' )
238+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
239+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
240+ if not use_default_state :
241+ do_event (tool , 'on_key_release' , key = 'control' )
242+ assert tool .extents == (xdata_new , 125.0 - xdiff , 60.0 , 135.0 )
243+
244+ # resize W handle
245+ extents = tool .extents
246+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
247+ xdiff = - 25
248+ xdata_new , ydata_new = xdata + xdiff , ydata
249+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
250+ if not use_default_state :
251+ do_event (tool , 'on_key_press' , key = 'control' )
252+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
253+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
254+ if not use_default_state :
255+ do_event (tool , 'on_key_release' , key = 'control' )
256+ assert tool .extents == (xdata_new , 110.0 - xdiff , 60.0 , 135.0 )
257+
258+ # resize SW handle
259+ extents = tool .extents
260+ xdata , ydata = extents [0 ], extents [2 ]
261+ xdiff , ydiff = 20 , 25
262+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
263+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
264+ if not use_default_state :
265+ do_event (tool , 'on_key_press' , key = 'control' )
266+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
267+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
268+ if not use_default_state :
269+ do_event (tool , 'on_key_release' , key = 'control' )
270+ assert tool .extents == (xdata_new , 135.0 - xdiff , ydata_new , 135.0 - ydiff )
271+
272+
121273def test_ellipse ():
122274 """For ellipse, test out the key modifiers"""
123275 ax = get_ax ()
0 commit comments