Skip to content

Commit 9e02876

Browse files
committed
check for mouse movement
1 parent d21259d commit 9e02876

File tree

2 files changed

+30
-25
lines changed

2 files changed

+30
-25
lines changed

lib/matplotlib/backends/backend_qt.py

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -328,31 +328,10 @@ def leaveEvent(self, event):
328328
def mousePressEvent(self, event):
329329
button = self.buttond.get(event.button())
330330
if button is not None and self.figure is not None:
331-
mpl_event = MouseEvent("button_press_event", self,
332-
*self.mouseEventCoords(event), button,
333-
modifiers=self._mpl_modifiers(),
334-
guiEvent=event)
335-
if button == MouseButton.RIGHT:
336-
for ax in self.figure.get_axes():
337-
if ax.contains(mpl_event)[0] and ax.name == '3d':
338-
self.showContextMenu(event, ax)
339-
return
340-
341-
mpl_event._process()
342-
343-
def showContextMenu(self, event, ax):
344-
menu = QtWidgets.QMenu(self)
345-
menu.setTitle("3D View Options")
346-
347-
def set_view(elev, azim):
348-
ax.view_init(elev=elev, azim=azim, roll=0)
349-
self.draw_idle()
350-
351-
menu.addAction("Top View (XY)").triggered.connect(lambda: set_view(90, -90))
352-
menu.addAction("Side View (YZ)").triggered.connect(lambda: set_view(0, 0))
353-
menu.addAction("Front View (XZ)").triggered.connect(lambda: set_view(0, -90))
354-
355-
menu.exec(QtGui.QCursor.pos())
331+
MouseEvent("button_press_event", self,
332+
*self.mouseEventCoords(event), button,
333+
modifiers=self._mpl_modifiers(),
334+
guiEvent=event)._process()
356335

357336
def mouseDoubleClickEvent(self, event):
358337
button = self.buttond.get(event.button())
@@ -648,6 +627,14 @@ def full_screen_toggle(self):
648627
else:
649628
self.window.showFullScreen()
650629

630+
def context_menu(self, event, labels=None, actions=None):
631+
if labels is None or actions is None:
632+
return
633+
menu = QtWidgets.QMenu(self.window)
634+
for label, action in zip(labels, actions):
635+
menu.addAction(label).triggered.connect(action)
636+
menu.exec(QtGui.QCursor.pos())
637+
651638
def _widgetclosed(self):
652639
CloseEvent("close_event", self.canvas)._process()
653640
if self.window._destroying:

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import textwrap
1717
import warnings
1818

19+
import functools
1920
import numpy as np
2021

2122
import matplotlib as mpl
@@ -187,6 +188,8 @@ def __init__(
187188
pseudo_bbox = self.transLimits.inverted().transform([(0, 0), (1, 1)])
188189
self._pseudo_w, self._pseudo_h = pseudo_bbox[1] - pseudo_bbox[0]
189190

191+
self._right_click_moved = False
192+
190193
# mplot3d currently manages its own spines and needs these turned off
191194
# for bounding box calculations
192195
self.spines[:].set_visible(False)
@@ -1357,6 +1360,7 @@ def clear(self):
13571360

13581361
def _button_press(self, event):
13591362
if event.inaxes == self:
1363+
self._right_click_moved = False
13601364
self.button_pressed = event.button
13611365
self._sx, self._sy = event.xdata, event.ydata
13621366
toolbar = self.get_figure(root=True).canvas.toolbar
@@ -1367,6 +1371,19 @@ def _button_press(self, event):
13671371

13681372
def _button_release(self, event):
13691373
self.button_pressed = None
1374+
1375+
if event.button in self._zoom_btn and event.inaxes == self \
1376+
and not self._right_click_moved:
1377+
canvas = self.get_figure(root=True).canvas
1378+
canvas.manager.context_menu(
1379+
event,
1380+
labels=["XY", "YZ", "XZ"],
1381+
actions=[functools.partial(self.view_init, elev=90, azim=-90),
1382+
functools.partial(self.view_init, elev=0, azim=0),
1383+
functools.partial(self.view_init, elev=0, azim=-90)],
1384+
)
1385+
canvas.draw_idle()
1386+
13701387
toolbar = self.get_figure(root=True).canvas.toolbar
13711388
# backend_bases.release_zoom and backend_bases.release_pan call
13721389
# push_current, so check the navigation mode so we don't call it twice
@@ -1621,6 +1638,7 @@ def _on_move(self, event):
16211638
# Zoom
16221639
elif self.button_pressed in self._zoom_btn:
16231640
# zoom view (dragging down zooms in)
1641+
self._right_click_moved = True
16241642
scale = h/(h - dy)
16251643
self._scale_axis_limits(scale, scale, scale)
16261644

0 commit comments

Comments
 (0)