From ad6cfe65c3e1f09a03f6fe5ec41eab9b2a3e3f2a 2012-10-17 07:46:29 From: sauimone Date: 2012-10-17 07:46:29 Subject: [PATCH] fixed mouse event delta handling --- diff --git a/src/legend/legendmarkeritem.cpp b/src/legend/legendmarkeritem.cpp index eaff20f..f59eeb3 100644 --- a/src/legend/legendmarkeritem.cpp +++ b/src/legend/legendmarkeritem.cpp @@ -182,12 +182,16 @@ void LegendMarkerItem::mouseClicked() void LegendMarkerItem::mouseMoved(QPointF delta) { - m_marker->m_legend->d_ptr->setOffset(-delta.x(), -delta.y()); + qreal dx = m_marker->m_legend->d_ptr->offset().x() - delta.x(); + qreal dy = m_marker->m_legend->d_ptr->offset().y() - delta.y(); + m_marker->m_legend->d_ptr->setOffset(dx, dy); } void LegendMarkerItem::mouseReleased(QPointF delta) { - m_marker->m_legend->d_ptr->setOffset(-delta.x(), -delta.y()); + qreal dx = m_marker->m_legend->d_ptr->offset().x() - delta.x(); + qreal dy = m_marker->m_legend->d_ptr->offset().y() - delta.y(); + m_marker->m_legend->d_ptr->setOffset(dx, dy); } #include "moc_legendmarkeritem_p.cpp" diff --git a/src/legend/mouseeventhandler.cpp b/src/legend/mouseeventhandler.cpp index f4b9407..06e6d8a 100644 --- a/src/legend/mouseeventhandler.cpp +++ b/src/legend/mouseeventhandler.cpp @@ -24,7 +24,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE MouseEventHandler::MouseEventHandler() : - m_pressedPos(0,0), + m_lastPos(0,0), m_state(Idle), m_treshold(10) { @@ -41,26 +41,28 @@ void MouseEventHandler::setMoveTreshold(qreal treshold) void MouseEventHandler::handleMousePressEvent(QGraphicsSceneMouseEvent* event) { - m_pressedPos = event->pos(); + m_lastPos = event->screenPos(); m_state = Pressed; event->accept(); } void MouseEventHandler::handleMouseMoveEvent(QGraphicsSceneMouseEvent* event) { - QPointF delta = event->pos() - m_pressedPos; + QPointF delta = event->screenPos() - m_lastPos; switch (m_state) { case Pressed: { // calculate treshold. If enough, change to move state and send out move deltas. if (qAbs(delta.x()) > m_treshold || qAbs(delta.y()) > m_treshold) { m_state = Moved; + m_lastPos = event->screenPos(); mouseMoved(delta); } event->accept(); break; } case Moved: { + m_lastPos = event->screenPos(); mouseMoved(delta); event->accept(); break; @@ -75,7 +77,8 @@ void MouseEventHandler::handleMouseMoveEvent(QGraphicsSceneMouseEvent* event) void MouseEventHandler::handleMouseReleaseEvent(QGraphicsSceneMouseEvent* event) { - QPointF delta = event->pos() - m_pressedPos; + QPointF delta = event->screenPos() - m_lastPos; + m_lastPos = event->screenPos(); switch (m_state) { case Pressed: diff --git a/src/legend/mouseeventhandler_p.h b/src/legend/mouseeventhandler_p.h index 0a52490..a29d92f 100644 --- a/src/legend/mouseeventhandler_p.h +++ b/src/legend/mouseeventhandler_p.h @@ -79,7 +79,7 @@ public: void handleMouseReleaseEvent(QGraphicsSceneMouseEvent* event); private: - QPointF m_pressedPos; + QPointF m_lastPos; State m_state; qreal m_treshold; };