@@ -460,6 +460,82 @@ def onselect(epress, erelease):
460
460
assert artist .get_alpha () == 0.3
461
461
462
462
463
+ @pytest .mark .parametrize ('selector' , ['span' , 'rectangle' ])
464
+ def test_selector_clear (selector ):
465
+ ax = get_ax ()
466
+
467
+ def onselect (* args ):
468
+ pass
469
+
470
+ kwargs = dict (ax = ax , onselect = onselect , interactive = True )
471
+ if selector == 'span' :
472
+ Selector = widgets .SpanSelector
473
+ kwargs ['direction' ] = 'horizontal'
474
+ else :
475
+ Selector = widgets .RectangleSelector
476
+
477
+ tool = Selector (** kwargs )
478
+ do_event (tool , 'press' , xdata = 10 , ydata = 10 , button = 1 )
479
+ do_event (tool , 'onmove' , xdata = 100 , ydata = 120 , button = 1 )
480
+ do_event (tool , 'release' , xdata = 100 , ydata = 120 , button = 1 )
481
+
482
+ # press-release event outside the selector to clear the selector
483
+ do_event (tool , 'press' , xdata = 130 , ydata = 130 , button = 1 )
484
+ do_event (tool , 'release' , xdata = 130 , ydata = 130 , button = 1 )
485
+ assert not tool ._selection_completed
486
+
487
+ ax = get_ax ()
488
+ kwargs ['ignore_event_outside' ] = True
489
+ tool = Selector (** kwargs )
490
+ assert tool .ignore_event_outside
491
+ do_event (tool , 'press' , xdata = 10 , ydata = 10 , button = 1 )
492
+ do_event (tool , 'onmove' , xdata = 100 , ydata = 120 , button = 1 )
493
+ do_event (tool , 'release' , xdata = 100 , ydata = 120 , button = 1 )
494
+
495
+ # press-release event outside the selector ignored
496
+ do_event (tool , 'press' , xdata = 130 , ydata = 130 , button = 1 )
497
+ do_event (tool , 'release' , xdata = 130 , y
10000
data = 130 , button = 1 )
498
+ assert tool ._selection_completed
499
+
500
+ do_event (tool , 'on_key_press' , key = 'escape' )
501
+ assert not tool ._selection_completed
502
+
503
+
504
+ @pytest .mark .parametrize ('selector' , ['span' , 'rectangle' ])
505
+ def test_selector_clear_method (selector ):
506
+ ax = get_ax ()
507
+
508
+ def onselect (* args ):
509
+ pass
510
+
511
+ if selector == 'span' :
512
+ tool = widgets .SpanSelector (ax , onselect , 'horizontal' ,
513
+ interactive = True ,
514
+ ignore_event_outside = True )
515
+ else :
516
+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
517
+ do_event (tool , 'press' , xdata = 10 , ydata = 10 , button = 1 )
518
+ do_event (tool , 'onmove' , xdata = 100 , ydata = 120 , button = 1 )
519
+ do_event (tool , 'release' , xdata = 100 , ydata = 120 , button = 1 )
520
+ assert tool ._selection_completed
521
+ assert tool .visible
522
+ if selector == 'span' :
523
+ assert tool .extents == (10 , 100 )
524
+
525
+ tool .clear ()
526
+ assert not tool ._selection_completed
527
+ assert not tool .visible
528
+
529
+ # Do another cycle of events to make sure we can
530
+ do_event (tool , 'press' , xdata = 10 , ydata = 10 , button = 1 )
531
+ do_event (tool , 'onmove' , xdata = 50 , ydata = 120 , button = 1 )
532
+ do_event (tool , 'release' , xdata = 50 , ydata = 120 , button = 1 )
533
+ assert tool ._selection_completed
534
+ assert tool .visible
535
+ if selector == 'span' :
536
+ assert tool .extents == (10 , 50 )
537
+
538
+
463
539
def test_tool_line_handle ():
464
540
ax = get_ax ()
465
541
0 commit comments