@@ -732,6 +732,10 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False, rectpro
732732 self .useblit = useblit
733733 self .minspan = minspan
734734
735+ # Needed when dragging out of axes
736+ self .buttonDown = False
737+ self .prev = (0 , 0 )
738+
735739 if self .direction == 'horizontal' :
736740 trans = blend_xy_sep_transform (self .ax .transData , self .ax .transAxes )
737741 w ,h = 0 ,1
@@ -760,6 +764,7 @@ def ignore(self, event):
760764 def press (self , event ):
761765 'on button press event'
762766 if self .ignore (event ): return
767+ self .buttonDown = True
763768
764769 self .rect .set_visible (self .visible )
765770 if self .direction == 'horizontal' :
@@ -771,15 +776,17 @@ def press(self, event):
771776
772777 def release (self , event ):
773778 'on button release event'
774- if self .pressv is None or self .ignore (event ): return
779+ if self .pressv is None or (self .ignore (event ) and not self .buttonDown ): return
780+ self .buttonDown = False
775781
776782 self .rect .set_visible (False )
777783 self .canvas .draw ()
778784 vmin = self .pressv
779785 if self .direction == 'horizontal' :
780- vmax = event .xdata
786+ vmax = event .xdata or self . prev [ 0 ]
781787 else :
782- vmax = event .ydata
788+ vmax = event .ydata or self .prev [1 ]
789+
783790 if vmin > vmax : vmin , vmax = vmax , vmin
784791 span = vmax - vmin
785792 if self .minspan is not None and span < self .minspan : return
@@ -802,7 +809,8 @@ def update(self):
802809 def onmove (self , event ):
803810 'on motion notify event'
804811 if self .pressv is None or self .ignore (event ): return
805- x ,y = event .xdata , event .ydata
812+ x , y = event .xdata , event .ydata
813+ self .prev = x , y
806814 if self .direction == 'horizontal' :
807815 v = x
808816 else :
0 commit comments