diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index fb2e905eda46fbc037edfa32baa8b633353b006c..3956b9340b7cd168b88257e4ec7ae0129302398e 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 2e79f656a47fccd37e965247df4bf03d4a511190..1caf1ac24bbf249cac1136da6a873b3f09d743a0 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