# HG changeset patch # User John W. Eaton # Date 1425347280 18000 # Node ID 966a1933f3fa0489b7184674859c53ba26ef3316 # Parent 17d21d68888d087c1c9a75831228edb75ec51728 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. diff -r 17d21d68888d -r 966a1933f3fa libgui/graphics/Canvas.cc --- 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 (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 (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)