From aec314b2763102fb0b9ea678e0540d38182e8d99 Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@nokia.com> Date: Mon, 25 Jan 2010 17:16:10 +0100 Subject: [PATCH] Mouse event positions are adjusted to the graphics view rect Task-number: BAUHAUS-120 --- .../formeditor/formeditorgraphicsview.cpp | 37 +++++++++++++++++++ .../formeditor/formeditorgraphicsview.h | 2 + 2 files changed, 39 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index fb2e905eda4..3956b9340b7 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp @@ -30,6 +30,8 @@ #include "formeditorgraphicsview.h" #include <QWheelEvent> +#include <QApplication> +#include <QtDebug> namespace QmlDesigner { @@ -73,6 +75,41 @@ void FormEditorGraphicsView::wheelEvent(QWheelEvent *event) } +void FormEditorGraphicsView::mouseMoveEvent(QMouseEvent *event) +{ + if (rect().contains(event->pos())) { + QGraphicsView::mouseMoveEvent(event); + } else { + QPoint position = event->pos(); + QPoint topLeft = rect().topLeft(); + QPoint bottomRight = rect().bottomRight(); + position.rx() = qMax(topLeft.x(), qMin(position.x(), bottomRight.x())); + position.ry() = qMax(topLeft.y(), qMin(position.y(), bottomRight.y())); + QMouseEvent *mouseEvent = QMouseEvent::createExtendedMouseEvent(event->type(), position, mapToGlobal(position), event->button(), event->buttons(), event->modifiers()); + + QGraphicsView::mouseMoveEvent(mouseEvent); + delete mouseEvent; + } +} + + +void FormEditorGraphicsView::mouseReleaseEvent(QMouseEvent *event) +{ + if (rect().contains(event->pos())) { + QGraphicsView::mouseReleaseEvent(event); + } else { + QPoint position = event->pos(); + QPoint topLeft = rect().topLeft(); + QPoint bottomRight = rect().bottomRight(); + position.rx() = qMax(topLeft.x(), qMin(position.x(), bottomRight.x())); + position.ry() = qMax(topLeft.y(), qMin(position.y(), bottomRight.y())); + QMouseEvent *mouseEvent = QMouseEvent::createExtendedMouseEvent(event->type(), position, mapToGlobal(position), event->button(), event->buttons(), event->modifiers()); + + QGraphicsView::mouseReleaseEvent(mouseEvent); + delete mouseEvent; + } +} + void FormEditorGraphicsView::drawBackground(QPainter *painter, const QRectF &rect) { painter->save(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h index 2e79f656a47..1caf1ac24bb 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.h @@ -44,6 +44,8 @@ public: protected: void drawBackground(QPainter *painter, const QRectF &rect); void wheelEvent(QWheelEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); }; } // namespace QmlDesigner -- GitLab