@@ -460,6 +460,82 @@ def onselect(epress, erelease):
460460 assert artist .get_alpha () == 0.3
461461
462462
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 , ydata = 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+
463539def test_tool_line_handle ():
464540 ax = get_ax ()
465541
0 commit comments