Skip to content

Commit b207a72

Browse files
committed
untoggle zoom and pan from keypress while toggled
1 parent c08fe56 commit b207a72

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

lib/matplotlib/backend_tools.py

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -370,30 +370,34 @@ def enable(self, event):
370370
'button_release_event', self._release)
371371

372372
def disable(self, event):
373+
self._cancel_zoom()
373374
self.figure.canvas.widgetlock.release(self)
374375
self.figure.canvas.mpl_disconnect(self._idPress)
375376
self.figure.canvas.mpl_disconnect(self._idRelease)
376377

378+
def _cancel_zoom(self):
379+
for zoom_id in self._ids_zoom:
380+
self.figure.canvas.mpl_disconnect(zoom_id)
381+
self.navigation.remove_rubberband(None, self)
382+
self.navigation.draw()
383+
self._xypress = None
384+
self._button_pressed = None
385+
self._ids_zoom = []
386+
return
387+
377388
def _press(self, event):
378389
"""the _press mouse button in zoom to rect mode callback"""
379390
# If we're already in the middle of a zoom, pressing another
380391
# button works to "cancel"
381392
if self._ids_zoom != []:
382-
for zoom_id in self._ids_zoom:
383-
self.figure.canvas.mpl_disconnect(zoom_id)
384-
self.navigation.remove_rubberband(event, self)
385-
self.navigation.draw()
386-
self._xypress = None
387-
self._button_pressed = None
388-
self._ids_zoom = []
389-
return
393+
self._cancel_zoom()
390394

391395
if event.button == 1:
392396
self._button_pressed = 1
393397
elif event.button == 3:
394398
self._button_pressed = 3
395399
else:
396-
self._button_pressed = None
400+
self._cancel_zoom()
397401
return
398402

399403
x, y = event.x, event.y
@@ -455,6 +459,7 @@ def _release(self, event):
455459
self._ids_zoom = []
456460

457461
if not self._xypress:
462+
self._cancel_zoom()
458463
return
459464

460465
last_a = []
@@ -464,9 +469,7 @@ def _release(self, event):
464469
lastx, lasty, a, _ind, lim, _trans = cur_xypress
465470
# ignore singular clicks - 5 pixels is a threshold
466471
if abs(x - lastx) < 5 or abs(y - lasty) < 5:
467-
self._xypress = None
468-
self.navigation.remove_rubberband(event, self)
469-
self.navigation.draw()
472+
self._cancel_zoom()
470473
return
471474

472475
x0, y0, x1, y1 = lim.extents
@@ -566,14 +569,9 @@ def _release(self, event):
566569
a.set_xlim((rx1, rx2))
567570
a.set_ylim((ry1, ry2))
568571

569-
self.navigation.draw()
570-
self._xypress = None
571-
self._button_pressed = None
572-
573572
self._zoom_mode = None
574-
575573
self.navigation.push_current()
576-
self.navigation.remove_rubberband(event, self)
574+
self._cancel_zoom()
577575

578576

579577
class ToolPan(ToolToggleBase):
@@ -601,17 +599,25 @@ def enable(self, event):
601599
'button_release_event', self._release)
602600

603601
def disable(self, event):
602+
self._cancel_pan()
604603
self.figure.canvas.widgetlock.release(self)
605604
self.figure.canvas.mpl_disconnect(self._idPress)
606605
self.figure.canvas.mpl_disconnect(self._idRelease)
607606

607+
def _cancel_pan(self):
608+
self._button_pressed = None
609+
self._xypress = []
610+
self.figure.canvas.mpl_disconnect(self._idDrag)
611+
self.navigation.messagelock.release(self)
612+
self.navigation.draw()
613+
608614
def _press(self, event):
609615
if event.button == 1:
610616
self._button_pressed = 1
611617
elif event.button == 3:
612618
self._button_pressed = 3
613619
else:
614-
self._button_pressed = None
620+
self._cancel_pan()
615621
return
616622

617623
x, y = event.x, event.y
@@ -633,6 +639,7 @@ def _press(self, event):
633639

634640
def _release(self, event):
635641
if self._button_pressed is None:
642+
self._cancel_pan()
636643
return
637644

638645
self.figure.canvas.mpl_disconnect(self._idDrag)
@@ -641,11 +648,11 @@ def _release(self, event):
641648
for a, _ind in self._xypress:
642649
a.end_pan()
643650
if not self._xypress:
651+
self._cancel_pan()
644652
return
645-
self._xypress = []
646-
self._button_pressed = None
653+
647654
self.navigation.push_current()
648-
self.navigation.draw()
655+
self._cancel_pan()
649656

650657
def _mouse_move(self, event):
651658
for a, _ind in self._xypress:

0 commit comments

Comments
 (0)