summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViktor Verebelyi <vviktor2@gmail.com>2021-06-17 17:09:01 +0100
committerViktor Verebelyi <vviktor2@gmail.com>2021-06-17 17:09:01 +0100
commitd89640d133f3146c4f1f370fb028c0eb820338fe (patch)
tree0d697bb292c1b824aa822144f26dc2b82978f30a
parent396239376eaa160d0038182dd05ecb2cf3cebea9 (diff)
downloadnavit-d89640d133f3146c4f1f370fb028c0eb820338fe.tar.gz
add:graphics:qt5 Add handling of mouse events to QNavitQuick_2 QML item
-rw-r--r--navit/graphics/qt5/QNavitQuick_2.cpp73
-rw-r--r--navit/graphics/qt5/QNavitQuick_2.h13
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();