changeset 19922:966a1933f3fa

respect x- or y-only pan mode when clicking and dragging (bug #44408) * Canvas.cc (Canvas::canvasMouseMoveEvent): Get pan mode and pass it to translate_view function.
author John W. Eaton <jwe@octave.org>
date Mon, 02 Mar 2015 20:48:00 -0500
parents 17d21d68888d
children e1d7bd38b82b
files libgui/graphics/Canvas.cc
diffstat 1 files changed, 69 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/Canvas.cc	Mon Mar 02 13:07:31 2015 -0500
+++ b/libgui/graphics/Canvas.cc	Mon Mar 02 20:48:00 2015 -0500
@@ -250,71 +250,6 @@
     }
 }
 
-void Canvas::canvasMouseMoveEvent (QMouseEvent* event)
-{
-  gh_manager::auto_lock lock;
-  graphics_object ax = gh_manager::get_object (m_mouseAxes);
-
-  if (m_mouseMode != NoMode && ax.valid_object ())
-    {
-      axes::properties& ap = Utils::properties<axes> (ax);
-
-      switch (m_mouseMode)
-        {
-        case RotateMode:
-          {
-            ap.rotate3d (m_mouseCurrent.x (), event->x (),
-                         m_mouseCurrent.y (), event->y ());
-
-            // Update current mouse position
-            m_mouseCurrent = event->pos ();
-
-            // Force immediate redraw
-            redraw (true);
-          }
-          break;
-
-        case ZoomInMode:
-        case ZoomOutMode:
-          m_mouseCurrent = event->pos ();
-          redraw (true);
-          break;
-
-        case PanMode:
-          {
-            ColumnVector p0 = ap.pixel2coord (m_mouseCurrent.x (),
-                                              m_mouseCurrent.y ());
-            ColumnVector p1 = ap.pixel2coord (event->x (),
-                                              event->y ());
-
-            ap.translate_view ("both", p0(0), p1(0), p0(1), p1(1));
-
-            // Update current mouse position
-            m_mouseCurrent = event->pos ();
-
-            // Force immediate redraw
-            redraw (true);
-          }
-
-        default:
-          break;
-        }
-    }
-  else if (m_mouseMode == NoMode)
-    {
-      graphics_object obj = gh_manager::get_object (m_handle);
-
-      if (obj.valid_object ())
-        {
-          graphics_object figObj (obj.get_ancestor ("figure"));
-
-          updateCurrentPoint (figObj, obj, event);
-          gh_manager::post_callback (figObj.get_handle (),
-                                     "windowbuttonmotionfcn");
-        }
-    }
-}
-
 static bool
 pan_enabled (const graphics_object figObj)
 {
@@ -387,6 +322,75 @@
   return zm.contents ("Direction").string_value ();
 }
 
+void Canvas::canvasMouseMoveEvent (QMouseEvent* event)
+{
+  gh_manager::auto_lock lock;
+  graphics_object ax = gh_manager::get_object (m_mouseAxes);
+
+  if (m_mouseMode != NoMode && ax.valid_object ())
+    {
+      axes::properties& ap = Utils::properties<axes> (ax);
+
+      switch (m_mouseMode)
+        {
+        case RotateMode:
+          {
+            ap.rotate3d (m_mouseCurrent.x (), event->x (),
+                         m_mouseCurrent.y (), event->y ());
+
+            // Update current mouse position
+            m_mouseCurrent = event->pos ();
+
+            // Force immediate redraw
+            redraw (true);
+          }
+          break;
+
+        case ZoomInMode:
+        case ZoomOutMode:
+          m_mouseCurrent = event->pos ();
+          redraw (true);
+          break;
+
+        case PanMode:
+          {
+            graphics_object figObj (ax.get_ancestor ("figure"));
+
+            std::string mode = pan_mode (figObj);
+
+            ColumnVector p0 = ap.pixel2coord (m_mouseCurrent.x (),
+                                              m_mouseCurrent.y ());
+            ColumnVector p1 = ap.pixel2coord (event->x (),
+                                              event->y ());
+
+            ap.translate_view (mode, p0(0), p1(0), p0(1), p1(1));
+
+            // Update current mouse position
+            m_mouseCurrent = event->pos ();
+
+            // Force immediate redraw
+            redraw (true);
+          }
+
+        default:
+          break;
+        }
+    }
+  else if (m_mouseMode == NoMode)
+    {
+      graphics_object obj = gh_manager::get_object (m_handle);
+
+      if (obj.valid_object ())
+        {
+          graphics_object figObj (obj.get_ancestor ("figure"));
+
+          updateCurrentPoint (figObj, obj, event);
+          gh_manager::post_callback (figObj.get_handle (),
+                                     "windowbuttonmotionfcn");
+        }
+    }
+}
+
 void Canvas::canvasMouseDoubleClickEvent (QMouseEvent* event)
 {
   if (event->buttons () != Qt::LeftButton)