@@ -190,6 +190,63 @@ def onselect(epress, erelease):
190
190
tool ._corner_handles .artist .get_markeredgecolor (), 'b' )
191
191
192
192
193
+ @pytest .mark .parametrize ('interactive' , [True , False ])
194
+ def test_rectangle_selector_onselect (interactive ):
195
+ # check when press and release events take place at the same position
196
+ ax = get_ax ()
197
+
198
+ def onselect (vmin , vmax ):
199
+ ax ._got_onselect = True
200
+
201
+ tool = widgets .RectangleSelector (ax , onselect , interactive = interactive )
202
+ do_event (tool , 'press' , xdata = 100 , ydata = 110 , button = 1 )
203
+ # move outside of axis
204
+ do_event (tool , 'onmove' , xdata = 150 , ydata = 120 , button = 1 )
205
+ do_event (tool , 'release' , xdata = 150 , ydata = 120 , button = 1 )
206
+
207
+ assert tool .ax ._got_onselect
208
+ assert tool .extents == (100.0 , 150.0 , 110.0 , 120.0 )
209
+
210
+ # Reset tool.ax._got_onselect
211
+ tool .ax ._got_onselect = False
212
+
213
+ do_event (tool , 'press' , xdata = 10 , ydata = 100 , button = 1 )
214
+ do_event (tool , 'release' , xdata = 10 , ydata = 100 , button = 1 )
215
+
216
+ assert tool .ax ._got_onselect
217
+
218
+
219
+ @pytest .mark .parametrize ('ignore_event_outside' , [True , False ])
220
+ def test_rectangle_selector_ignore_outside (ignore_event_outside ):
221
+ ax = get_ax ()
222
+ def onselect (vmin , vmax ):
223
+ ax ._got_onselect = True
224
+
225
+ tool = widgets .RectangleSelector (ax , onselect ,
226
+ ignore_event_outside = ignore_event_outside )
227
+ do_event (tool , 'press' , xdata = 100 , ydata = 110 , button = 1 )
228
+ do_event (tool , 'onmove' , xdata = 150 , ydata = 120 , button = 1 )
229
+ do_event (tool , 'release' , xdata = 150 , ydata = 120 , button = 1 )
230
+
231
+ assert tool .ax ._got_onselect
232
+ assert tool .extents == (100.0 , 150.0 , 110.0 , 120.0 )
233
+
234
+ # Reset
235
+ ax ._got_onselect = False
236
+ # Trigger event outside of span
237
+ do_event (tool , 'press' , xdata = 150 , ydata = 150 , button = 1 )
238
+ do_event (tool , 'onmove' , xdata = 160 , ydata = 160 , button = 1 )
239
+ do_event (tool , 'release' , xdata = 160 , ydata = 160 , button = 1 )
240
+ if ignore_event_outside :
241
+ # event have been ignored and span haven't changed.
242
+ assert not ax ._got_onselect
243
+ assert tool .extents == (100.0 , 150.0 , 110.0 , 120.0 )
244
+ else :
245
+ # A new shape is created
246
+ assert ax ._got_onselect
247
+ assert tool .extents == (150.0 , 160.0 , 150.0 , 160.0 )
248
+
249
+
193
250
def check_span (* args , ** kwargs ):
194
251
ax = get_ax ()
195
252
@@ -222,13 +279,79 @@ def test_span_selector():
222
279
check_span ('horizontal' , minspan = 10 , useblit = True )
223
280
check_span ('vertical' , onmove_callback = True , button = 1 )
224
281
check_span ('horizontal' , props = dict (fill = True ))
282
+ check_span ('horizontal' , interactive = True )
283
+
284
+
285
+ @pytest .mark .parametrize ('interactive' , [True , False ])
286
+ def test_span_selector_onselect (interactive ):
287
+ # check when press and release events take place at the same position
288
+ ax = get_ax ()
289
+
290
+ def onselect (vmin , vmax ):
291
+ ax ._got_onselect = True
292
+
293
+ tool = widgets .SpanSelector (ax , onselect , 'horizontal' ,
294
+ interactive = interactive )
295
+ do_event (tool , 'press' , xdata = 100 , ydata = 100 , button = 1 )
296
+ # move outside of axis
297
+ do_event (tool , 'onmove' , xdata = 150 , ydata = 100 , button = 1 )
298
+ do_event (tool , 'release' , xdata = 150 , ydata = 100 , button = 1 )
299
+
300
+ assert tool .ax ._got_onselect
301
+ assert tool .extents == (100 , 150 )
302
+
303
+ # Reset tool.ax._got_onselect
304
+ tool .ax ._got_onselect = False
305
+
306
+ do_event (tool , 'press' , xdata = 10 , ydata = 100 , button = 1 )
307
+ do_event (tool , 'release' , xdata = 10 , ydata = 100 , button = 1 )
308
+
309
+ assert tool .ax ._got_onselect
310
+
311
+
312
+ @pytest .mark .parametrize ('ignore_event_outside' , [True , False ])
313
+ def test_span_selector_ignore_outside (ignore_event_outside ):
314
+ ax = get_ax ()
315
+ def onselect (vmin , vmax ):
316
+ ax ._got_onselect = True
317
+
318
+ def onmove (vmin , vmax ):
319
+ ax ._got_on_move = True
320
+
321
+ tool = widgets .SpanSelector (ax , onselect , 'horizontal' ,
322
+ onmove_callback = onmove ,
323
+ ignore_event_outside = ignore_event_outside )
324
+ do_event (tool , 'press' , xdata = 100 , ydata = 100 , button = 1 )
325
+ do_event (tool , 'onmove' , xdata = 125 , ydata = 125 , button = 1 )
326
+ do_event (tool , 'release' , xdata = 125 , ydata = 125 , button = 1 )
327
+ assert ax ._got_onselect
328
+ assert ax ._got_on_move
329
+ assert tool .extents == (100 , 125 )
330
+
331
+ # Reset
332
+ ax ._got_onselect = False
333
+ ax ._got_on_move = False
334
+ # Trigger event outside of span
335
+ do_event (tool , 'press' , xdata = 150 , ydata = 150 , button = 1 )
336
+ do_event (tool , 'onmove' , xdata = 160 , ydata = 160 , button = 1 )
337
+ do_event (tool , 'release' , xdata = 160 , ydata = 160 , button = 1 )
338
+ if ignore_event_outside :
339
+ # event have been ignored and span haven't changed.
340
+ assert not ax ._got_onselect
341
+ assert not ax ._got_on_move
342
+ assert tool .extents == (100 , 125 )
343
+ else :
344
+ # A new shape is created
345
+ assert ax ._got_onselect
346
+ assert ax ._got_on_move
347
+ assert tool .extents == (150 , 160 )
225
348
226
349
227
350
@pytest .mark .parametrize ('drag_from_anywhere' , [True , False ])
228
351
def test_span_selector_drag (drag_from_anywhere ):
229
352
ax = get_ax ()
230
353
231
- def onselect (epress , erelease ):
354
+ def onselect (* args ):
232
355
pass
233
356
234
357
# Create span
@@ -263,7 +386,7 @@ def onselect(epress, erelease):
263
386
def test_span_selector_direction ():
264
387
ax = get_ax ()
265
388
266
- def onselect (epress , erelease ):
389
+ def onselect (* args ):
267
390
pass
268
391
269
392
tool = widgets .SpanSelector (ax , onselect , 'horizontal' , interactive = True )
@@ -702,7 +825,7 @@ def test_MultiCursor(horizOn, vertOn):
702
825
def test_rect_visibility (fig_test , fig_ref ):
703
826
# Check that requesting an invisible selector makes it invisible
704
827
ax_test = fig_test .subplots ()
705
- ax_ref = fig_ref .subplots ()
828
+ _ = fig_ref .subplots ()
706
829
707
830
def onselect (verts ):
708
831
pass
0 commit comments