@@ -55,6 +55,19 @@ def test_rectangle_selector():
5555 check_rectangle (props = dict (fill = True ))
5656
5757
58+ def _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new ,
59+ use_key = None ):
60+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
61+ if use_key is not None :
62+ do_event (tool , 'on_key_press' , key = use_key )
63+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
64+ if use_key is not None :
65+ do_event (tool , 'on_key_release' , key = use_key )
66+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
67+
68+ return tool
69+
70+
5871@pytest .mark .parametrize ('drag_from_anywhere, new_center' ,
5972 [[True , (60 , 75 )],
6073 [False , (30 , 20 )]])
@@ -126,46 +139,36 @@ def onselect(epress, erelease):
126139
127140 tool = widgets .RectangleSelector (ax , onselect , interactive = True )
128141 # 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 )
142+ _resize_rectangle (tool , 0 , 10 , 100 , 120 )
132143 assert tool .extents == (0.0 , 100.0 , 10.0 , 120.0 )
133144
134145 # resize NE handle
135146 extents = tool .extents
136147 xdata , ydata = extents [1 ], extents [3 ]
137148 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 )
149+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
150+ assert tool .extents == (extents [0 ], xdata_new , extents [2 ], ydata_new )
142151
143152 # resize E handle
144153 extents = tool .extents
145154 xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
146155 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 )
156+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
157+ assert tool .extents == (extents [0 ], xdata_new , extents [2 ], extents [3 ])
151158
152159 # resize W handle
153160 extents = tool .extents
154161 xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
155162 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 )
163+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
164+ assert tool .extents == (xdata_new , extents [1 ], extents [2 ], extents [3 ])
160165
161166 # resize SW handle
162167 extents = tool .extents
163168 xdata , ydata = extents [0 ], extents [2 ]
164169 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 )
170+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
171+ assert tool .extents == (xdata_new , extents [1 ], ydata_new , extents [3 ])
169172
170173
171174@pytest .mark .parametrize ('use_default_state' , [True , False ])
@@ -177,97 +180,209 @@ def onselect(epress, erelease):
177180
178181 tool = widgets .RectangleSelector (ax , onselect , interactive = True )
179182 # 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+ _resize_rectangle (tool , 70 , 65 , 125 , 130 )
183184 assert tool .extents == (70.0 , 125.0 , 65.0 , 130.0 )
184185
185186 if use_default_state :
186187 tool ._default_state .add ('center' )
188+ use_key = None
189+ else :
190+ use_key = 'control'
187191
188192 # resize NE handle
189193 extents = tool .extents
190194 xdata , ydata = extents [1 ], extents [3 ]
191195 xdiff , ydiff = 10 , 5
192196 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 )
197+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
198+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
199+ extents [2 ] - ydiff , ydata_new )
201200
202201 # resize E handle
203202 extents = tool .extents
204203 xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
205204 xdiff = 10
206205 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 )
206+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
207+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
208+ extents [2 ], extents [3 ])
215209
216210 # resize E handle negative diff
217211 extents = tool .extents
218212 xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
219213 xdiff = - 20
220214 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 )
215+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
216+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
217+ extents [2 ], extents [3 ])
229218
230219 # resize W handle
231220 extents = tool .extents
232221 xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
233222 xdiff = 15
234223 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 )
224+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
225+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
226+ extents [2 ], extents [3 ])
227+
228+ # resize W handle negative diff
229+ extents = tool .extents
230+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
231+ xdiff = - 25
232+ xdata_new , ydata_new = xdata + xdiff , ydata
233+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
234+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
235+ extents [2 ], extents [3 ])
236+
237+ # resize SW handle
238+ extents = tool .extents
239+ xdata , ydata = extents [0 ], extents [2 ]
240+ xdiff , ydiff = 20 , 25
241+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
242+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
243+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
244+ ydata_new , extents [3 ] - ydiff )
245+
246+
247+ @pytest .mark .parametrize ('use_default_state' , [True , False ])
248+ def test_rectangle_resize_square (use_default_state ):
249+ ax = get_ax ()
250+
251+ def onselect (epress , erelease ):
252+ pass
253+
254+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
255+ # Create rectangle
256+ _resize_rectangle (tool , 70 , 65 , 120 , 115 )
257+ assert tool .extents == (70.0 , 120.0 , 65.0 , 115.0 )
258+
259+ if use_default_state :
260+ tool ._default_state .add ('square' )
261+ use_key = None
262+ else :
263+ use_key = 'shift'
264+
265+ # resize NE handle
266+ extents = tool .extents
267+ xdata , ydata = extents [1 ], extents [3 ]
268+ xdiff , ydiff = 10 , 5
269+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
270+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
271+ assert tool .extents == (extents [0 ], xdata_new ,
272+ extents [2 ], extents [3 ] + xdiff )
273+
274+ # resize E handle
275+ extents = tool .extents
276+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
277+ xdiff = 10
278+ xdata_new , ydata_new = xdata + xdiff , ydata
279+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
280+ assert tool .extents == (extents [0 ], xdata_new ,
281+ extents [2 ], extents [3 ] + xdiff )
282+
283+ # resize E handle negative diff
284+ extents = tool .extents
285+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
286+ xdiff = - 20
287+ xdata_new , ydata_new = xdata + xdiff , ydata
288+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
289+ assert tool .extents == (extents [0 ], xdata_new ,
290+ extents [2 ], extents [3 ] + xdiff )
243291
244292 # resize W handle
245293 extents = tool .extents
246294 xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
295+ xdiff = 15
296+ xdata_new , ydata_new = xdata + xdiff , ydata
297+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
298+ assert tool .extents == (xdata_new , extents [1 ],
299+ extents [2 ], extents [3 ] - xdiff )
300+
301+ # resize W handle negative diff
302+ extents = tool .extents
303+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
247304 xdiff = - 25
248305 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 )
306+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
307+ assert tool .extents == (xdata_new , extents [1 ],
308+ extents [2 ], extents [3 ] - xdiff )
257309
258310 # resize SW handle
259311 extents = tool .extents
260312 xdata , ydata = extents [0 ], extents [2 ]
261313 xdiff , ydiff = 20 , 25
262314 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 )
315+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
316+ assert tool .extents == (extents [0 ] + ydiff , extents [1 ],
317+ ydata_new , extents [3 ])
318+
319+
320+ def test_rectangle_resize_square_center ():
321+ ax = get_ax ()
322+
323+ def onselect (epress , erelease ):
324+ pass
325+
326+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
327+ # Create rectangle
328+ _resize_rectangle (tool , 70 , 65 , 120 , 115 )
329+ tool ._default_state .add ('square' )
330+ tool ._default_state .add ('center' )
331+ assert tool .extents == (70.0 , 120.0 , 65.0 , 115.0 )
332+
333+ # resize NE handle
334+ extents = tool .extents
335+ xdata , ydata = extents [1 ], extents [3 ]
336+ xdiff , ydiff = 10 , 5
337+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
338+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
339+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
340+ extents [2 ] - xdiff , extents [3 ] + xdiff )
341+
342+ # resize E handle
343+ extents = tool .extents
344+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
345+ xdiff = 10
346+ xdata_new , ydata_new = xdata + xdiff , ydata
347+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
348+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
349+ extents [2 ] - xdiff , extents [3 ] + xdiff )
350+
351+ # resize E handle negative diff
352+ extents = tool .extents
353+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
354+ xdiff = - 20
355+ xdata_new , ydata_new = xdata + xdiff , ydata
356+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
357+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
358+ extents [2 ] - xdiff , extents [3 ] + xdiff )
359+
360+ # resize W handle
361+ extents = tool .extents
362+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
363+ xdiff = 5
364+ xdata_new , ydata_new = xdata + xdiff , ydata
365+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
366+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
367+ extents [2 ] + xdiff , extents [3 ] - xdiff )
368+
369+ # resize W handle negative diff
370+ extents = tool .extents
371+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
372+ xdiff = - 25
373+ xdata_new , ydata_new = xdata + xdiff , ydata
374+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
375+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
376+ extents [2 ] + xdiff , extents [3 ] - xdiff )
377+
378+ # resize SW handle
379+ extents = tool .extents
380+ xdata , ydata = extents [0 ], extents [2 ]
381+ xdiff , ydiff = 20 , 25
382+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
383+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
384+ assert tool .extents == (extents [0 ] + ydiff , extents [1 ] - ydiff ,
385+ ydata_new , extents [3 ] - ydiff )
271386
272387
273388def test_ellipse ():
0 commit comments