diff options
author | Viktor Verebelyi <vviktor2@gmail.com> | 2021-06-17 17:09:01 +0100 |
---|---|---|
committer | Viktor Verebelyi <vviktor2@gmail.com> | 2021-06-17 17:09:01 +0100 |
commit | d89640d133f3146c4f1f370fb028c0eb820338fe (patch) | |
tree | 0d697bb292c1b824aa822144f26dc2b82978f30a | |
parent | 396239376eaa160d0038182dd05ecb2cf3cebea9 (diff) | |
download | navit-d89640d133f3146c4f1f370fb028c0eb820338fe.tar.gz |
add:graphics:qt5 Add handling of mouse events to QNavitQuick_2 QML item
-rw-r--r-- | navit/graphics/qt5/QNavitQuick_2.cpp | 73 | ||||
-rw-r--r-- | navit/graphics/qt5/QNavitQuick_2.h | 13 |
2 files changed, 81 insertions, 5 deletions
diff --git a/navit/graphics/qt5/QNavitQuick_2.cpp b/navit/graphics/qt5/QNavitQuick_2.cpp index f07836156..b820d51eb 100644 --- a/navit/graphics/qt5/QNavitQuick_2.cpp +++ b/navit/graphics/qt5/QNavitQuick_2.cpp @@ -51,7 +51,10 @@ extern "C" { #include <QOpenGLFramebufferObject> QNavitQuick_2::QNavitQuick_2(QQuickItem* parent) - : QQuickPaintedItem(parent) { + : QQuickPaintedItem(parent), + graphics_priv(nullptr), + m_moveX(0), + m_moveY(0) { setAcceptedMouseButtons(Qt::AllButtons); graphics_priv = nullptr; } @@ -83,12 +86,12 @@ void QNavitQuick_2::paint(QPainter* painter) { boundingRect().height()); /* color background if any */ - if (graphics_priv->background_graphics_gc_priv != NULL) { + if (graphics_priv->background_graphics_gc_priv != nullptr) { painter->setPen(*graphics_priv->background_graphics_gc_priv->pen); painter->fillRect(boundingRect(), *graphics_priv->background_graphics_gc_priv->brush); } - painter->drawPixmap(graphics_priv->scroll_x, graphics_priv->scroll_y, *graphics_priv->pixmap, + painter->drawPixmap(m_moveX, m_moveY, *graphics_priv->pixmap, boundingRect().x(), boundingRect().y(), boundingRect().width(), boundingRect().height()); @@ -129,6 +132,70 @@ void QNavitQuick_2::geometryChanged(const QRectF& newGeometry, const QRectF& old resize_callback(graphics_priv, width(), height()); } +void QNavitQuick_2::mousePressEvent(QMouseEvent* event) { + QPoint loc; + loc.setX(event->x()); + loc.setY(event->y()); + if(event->button() == Qt::LeftButton){ + m_originX = event->x(); + m_originY = event->y(); + emit leftButtonClicked(loc); + } else if (event->button() == Qt::RightButton) { + emit rightButtonClicked(loc); + } +} + +void QNavitQuick_2::mouseReleaseEvent(QMouseEvent* event) { + if(event->button() == Qt::LeftButton){ + if(m_navitInstance){ + struct point origin; + origin.x = m_originX; + origin.y = m_originY; + struct point destination; + destination.x = event->x(); + destination.y = event->y(); + + navit_drag_map(m_navitInstance->getNavit(), &origin, &destination); + } + m_moveX = 0; + m_moveY = 0; + } +} + +void QNavitQuick_2::mouseMoveEvent(QMouseEvent* event) { + if(event->buttons() == Qt::LeftButton){ + setFollowVehicle(false); + if(event->modifiers() & Qt::ShiftModifier){ + int pitch = qFloor((m_originY - event->y()) / 10); + int orientation = m_orientation + ( qFloor((event->x() - m_originX)) / 10 ); + + if(m_pitch + pitch < 0 ) { + setPitch(0); + } else if(m_pitch + pitch > 60 ) { + setPitch(60); + } else { + setPitch(m_pitch + pitch); + } + + setOrientation(orientation % 360); + + } else { + m_moveX = event->x() - m_originX; + m_moveY = event->y() - m_originY; + update(); + } + emit positionChanged(event); + } +} + +void QNavitQuick_2::wheelEvent(QWheelEvent* event) { + if (event->delta() > 0){ + zoomInToPoint(2, event->x(), event->y()); + } else { + zoomOutFromPoint(2, event->x(), event->y()); + } +} + void QNavitQuick_2::mapMove(int originX, int originY, int destinationX, int destinationY) { if(m_navitInstance){ struct point origin; diff --git a/navit/graphics/qt5/QNavitQuick_2.h b/navit/graphics/qt5/QNavitQuick_2.h index fb46cc581..896695b9c 100644 --- a/navit/graphics/qt5/QNavitQuick_2.h +++ b/navit/graphics/qt5/QNavitQuick_2.h @@ -73,6 +73,10 @@ public: } protected: virtual void geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry); + virtual void mousePressEvent(QMouseEvent* event); + virtual void mouseReleaseEvent(QMouseEvent* event); + virtual void mouseMoveEvent(QMouseEvent* event); + virtual void wheelEvent(QWheelEvent* event); private: struct graphics_priv* graphics_priv; @@ -85,11 +89,16 @@ private: int getNavitNumProperty(enum attr_type type); NavitInstance *m_navitInstance; long m_zoomLevel = 0; + int m_moveX; + int m_moveY; + int m_originX; + int m_originY; void updateZoomLevel(); signals: - void mouseLeftButtonClicked(); - void mouseRightButtonClicked(); + void leftButtonClicked(QPoint position); + void rightButtonClicked(QPoint position); + void positionChanged(QMouseEvent* mouse); void pressAndHold(QMouseEvent* mouse); void propertiesChanged(); void zoomLevelChanged(); |