Use QMouseEvent instead of QGraphicsSceneMouseEvent
authorLars Knoll <lars.knoll@nokia.com>
Tue, 30 Aug 2011 14:48:57 +0000 (16:48 +0200)
committerLars Knoll <lars.knoll@nokia.com>
Thu, 1 Sep 2011 11:27:55 +0000 (13:27 +0200)
QMouseEvent now supports floating point coordinates, and
the graphics scene event is not be available in QtGui
anymore.

Change-Id: I28ab428a2d00fc1deef55b05c1c545e74838e105
Reviewed-on: http://codereview.qt.nokia.com/3991
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>

25 files changed:
examples/declarative/text/textselection/textselection.qml
src/declarative/declarative.pro
src/declarative/items/qsgcanvas.cpp
src/declarative/items/qsgcanvas_p.h
src/declarative/items/qsgflickable.cpp
src/declarative/items/qsgflickable_p.h
src/declarative/items/qsgflickable_p_p.h
src/declarative/items/qsgitem.cpp
src/declarative/items/qsgitem.h
src/declarative/items/qsgitem_p.h
src/declarative/items/qsgmousearea.cpp
src/declarative/items/qsgmousearea_p.h
src/declarative/items/qsgmousearea_p_p.h
src/declarative/items/qsgpathview.cpp
src/declarative/items/qsgpathview_p.h
src/declarative/items/qsgpathview_p_p.h
src/declarative/items/qsgpincharea.cpp
src/declarative/items/qsgpincharea_p.h
src/declarative/items/qsgtext.cpp
src/declarative/items/qsgtext_p.h
src/declarative/items/qsgtextedit.cpp
src/declarative/items/qsgtextedit_p.h
src/declarative/items/qsgtextinput.cpp
src/declarative/items/qsgtextinput_p.h
src/declarative/items/qsgtextinput_p_p.h

index 4b51f4e..a25d0df 100644 (file)
@@ -37,7 +37,7 @@
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
-import QtQuick 1.0
+import QtQuick 2.0
 
 Rectangle {
     id: editor
@@ -105,85 +105,6 @@ Rectangle {
                     +"<p><b>Click inside the selection</b> to cut/copy/paste/cancel selection."
                     +"<p>It's too whacky to let you paste if there is no current selection."
 
-                MouseArea {
-                    property string drag: ""
-                    property int pressPos
-
-                    x: -startHandle.width
-                    y: 0
-                    width: parent.width+startHandle.width+endHandle.width
-                    height: parent.height
-
-                    onPressAndHold: {
-                        if (editor.state == "") {
-                            edit.cursorPosition = edit.positionAt(mouse.x+x,mouse.y+y);
-                            edit.selectWord();
-                            editor.state = "selection"
-                        }
-                    }
-
-                    onClicked: {
-                        if (editor.state == "") {
-                            edit.cursorPosition = edit.positionAt(mouse.x+x,mouse.y+y);
-                            if (!edit.focus)
-                                edit.focus = true;
-                            edit.openSoftwareInputPanel();
-                        }
-                    }
-
-                    function hitHandle(h,x,y) { 
-                        return x>=h.x+flick.contentX && x<h.x+flick.contentX+h.width && y>=h.y+flick.contentY && y<h.y+flick.contentY+h.height 
-                    }
-
-                    onPressed: {
-                        if (editor.state == "selection") {
-                            if (hitHandle(startHandle,mouse.x+x,mouse.y+y)) {
-                                drag = "start"
-                                flick.interactive = false
-                            } else if (hitHandle(endHandle,mouse.x+x,mouse.y+y)) {
-                                drag = "end"
-                                flick.interactive = false
-                            } else {
-                                var pos = edit.positionAt(mouse.x+x,mouse.y+y);
-                                if (pos >= edit.selectionStart && pos <= edit.selectionEnd) {
-                                    drag = "selection"
-                                    flick.interactive = false
-                                } else {
-                                    drag = ""
-                                    flick.interactive = true
-                                }
-                            }
-                        }
-                    }
-
-                    onReleased: {
-                        if (editor.state == "selection") {
-                            if (drag == "selection") {
-                                editor.state = "menu"
-                            }
-                            drag = ""
-                        }
-                        flick.interactive = true
-                    }
-
-                    onPositionChanged: {
-                        if (editor.state == "selection" && drag != "") {
-                            if (drag == "start") {
-                                var pos = edit.positionAt(mouse.x+x+startHandle.width/2,mouse.y+y);
-                                var e = edit.selectionEnd;
-                                if (e < pos)
-                                    e = pos;
-                                edit.select(pos,e);
-                            } else if (drag == "end") {
-                                var pos = edit.positionAt(mouse.x+x-endHandle.width/2,mouse.y+y);
-                                var s = edit.selectionStart;
-                                if (s > pos)
-                                    s = pos;
-                                edit.select(s,pos);
-                            }
-                        }
-                    }
-                }
             }
         }
 
index d0a3f01..78717c9 100644 (file)
@@ -8,7 +8,7 @@ MODULE_PRI += ../../modules/qt_declarative.pri
 
 QT = core-private gui gui-private network widgets-private sql v8-private
 
-DEFINES   += QT_BUILD_DECLARATIVE_LIB QT_NO_URL_CAST_FROM_STRING
+DEFINES   += QT_BUILD_DECLARATIVE_LIB QT_NO_URL_CAST_FROM_STRING QT_NO_INTEGER_EVENT_COORDINATES
 win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x66000000
 solaris-cc*:QMAKE_CXXFLAGS_RELEASE -= -O2
 
index 9f55c40..f97028a 100644 (file)
@@ -56,7 +56,7 @@
 #include <private/qabstractanimation_p.h>
 
 #include <QtGui/qpainter.h>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtGui/qmatrix4x4.h>
 #include <QtCore/qvarlengtharray.h>
 #include <QtCore/qabstractanimation.h>
@@ -471,19 +471,6 @@ void QSGCanvasPrivate::init(QSGCanvas *c)
     thread->moveContextToThread(context);
 }
 
-void QSGCanvasPrivate::sceneMouseEventForTransform(QGraphicsSceneMouseEvent &sceneEvent,
-                                                   const QTransform &transform)
-{
-    sceneEvent.setPos(transform.map(sceneEvent.scenePos()));
-    sceneEvent.setLastPos(transform.map(sceneEvent.lastScenePos()));
-    for (int ii = 0; ii < 5; ++ii) {
-        if (sceneEvent.buttons() & (1 << ii)) {
-            sceneEvent.setButtonDownPos((Qt::MouseButton)(1 << ii),
-                                        transform.map(sceneEvent.buttonDownScenePos((Qt::MouseButton)(1 << ii))));
-        }
-    }
-}
-
 void QSGCanvasPrivate::transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform)
 {
     for (int i=0; i<touchPoints.count(); i++) {
@@ -494,74 +481,6 @@ void QSGCanvasPrivate::transformTouchPoints(QList<QTouchEvent::TouchPoint> &touc
     }
 }
 
-QEvent::Type QSGCanvasPrivate::sceneMouseEventTypeFromMouseEvent(QMouseEvent *event)
-{
-    switch(event->type()) {
-    default:
-        Q_ASSERT(!"Unknown event type");
-    case QEvent::MouseButtonPress:
-        return QEvent::GraphicsSceneMousePress;
-    case QEvent::MouseButtonRelease:
-        return QEvent::GraphicsSceneMouseRelease;
-    case QEvent::MouseButtonDblClick:
-        return QEvent::GraphicsSceneMouseDoubleClick;
-    case QEvent::MouseMove:
-        return QEvent::GraphicsSceneMouseMove;
-    }
-}
-
-/*!
-Fill in the data in \a sceneEvent based on \a event.  This method leaves the item local positions in
-\a sceneEvent untouched.  Use sceneMouseEventForTransform() to fill in those details.
-*/
-void QSGCanvasPrivate::sceneMouseEventFromMouseEvent(QGraphicsSceneMouseEvent &sceneEvent, QMouseEvent *event)
-{
-    Q_ASSERT(event);
-
-    if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick) {
-        if ((event->button() & event->buttons()) == event->buttons()) {
-            lastMousePosition = event->pos();
-        }
-
-        switch (event->button()) {
-        default:
-            Q_ASSERT(!"Unknown button");
-        case Qt::LeftButton:
-            buttonDownPositions[0] = event->pos();
-            break;
-        case Qt::RightButton:
-            buttonDownPositions[1] = event->pos();
-            break;
-        case Qt::MiddleButton:
-            buttonDownPositions[2] = event->pos();
-            break;
-        case Qt::XButton1:
-            buttonDownPositions[3] = event->pos();
-            break;
-        case Qt::XButton2:
-            buttonDownPositions[4] = event->pos();
-            break;
-        }
-    }
-
-    sceneEvent.setScenePos(event->pos());
-    sceneEvent.setScreenPos(event->globalPos());
-    sceneEvent.setLastScenePos(lastMousePosition);
-    sceneEvent.setLastScreenPos(lastMousePosition); // ### refactor: should do mapToGlobal
-    sceneEvent.setButtons(event->buttons());
-    sceneEvent.setButton(event->button());
-    sceneEvent.setModifiers(event->modifiers());
-//    sceneEvent.setWidget(q); // ### refactor:
-
-    for (int ii = 0; ii < 5; ++ii) {
-        if (sceneEvent.buttons() & (1 << ii)) {
-            sceneEvent.setButtonDownScenePos((Qt::MouseButton)(1 << ii), buttonDownPositions[ii]);
-            sceneEvent.setButtonDownScreenPos((Qt::MouseButton)(1 << ii), buttonDownPositions[ii]); // ### refactor: should do mapToGlobal
-        }
-    }
-
-    lastMousePosition = event->pos();
-}
 
 /*!
 Translates the data in \a touchEvent to this canvas.  This method leaves the item local positions in
@@ -986,7 +905,7 @@ void QSGCanvas::inputMethodEvent(QInputMethodEvent *e)
         sendEvent(d->activeFocusItem, e);
 }
 
-bool QSGCanvasPrivate::deliverInitialMousePressEvent(QSGItem *item, QGraphicsSceneMouseEvent *event)
+bool QSGCanvasPrivate::deliverInitialMousePressEvent(QSGItem *item, QMouseEvent *event)
 {
     Q_Q(QSGCanvas);
 
@@ -995,7 +914,7 @@ bool QSGCanvasPrivate::deliverInitialMousePressEvent(QSGItem *item, QGraphicsSce
         return false;
 
     if (itemPrivate->flags & QSGItem::ItemClipsChildrenToShape) {
-        QPointF p = item->mapFromScene(event->scenePos());
+        QPointF p = item->mapFromScene(event->windowPos());
         if (!QRectF(0, 0, item->width(), item->height()).contains(p))
             return false;
     }
@@ -1010,13 +929,15 @@ bool QSGCanvasPrivate::deliverInitialMousePressEvent(QSGItem *item, QGraphicsSce
     }
 
     if (itemPrivate->acceptedMouseButtons & event->button()) {
-        QPointF p = item->mapFromScene(event->scenePos());
+        QPointF p = item->mapFromScene(event->windowPos());
         if (QRectF(0, 0, item->width(), item->height()).contains(p)) {
-            sceneMouseEventForTransform(*event, itemPrivate->canvasToItemTransform());
-            event->accept();
+            QMouseEvent me(event->type(), p, event->windowPos(), event->screenPos(),
+                           event->button(), event->buttons(), event->modifiers());
+            me.accept();
             mouseGrabberItem = item;
-            q->sendEvent(item, event);
-            if (event->isAccepted())
+            q->sendEvent(item, &me);
+            event->setAccepted(me.isAccepted());
+            if (me.isAccepted())
                 return true;
             mouseGrabberItem->ungrabMouse();
             mouseGrabberItem = 0;
@@ -1026,24 +947,28 @@ bool QSGCanvasPrivate::deliverInitialMousePressEvent(QSGItem *item, QGraphicsSce
     return false;
 }
 
-bool QSGCanvasPrivate::deliverMouseEvent(QGraphicsSceneMouseEvent *sceneEvent)
+bool QSGCanvasPrivate::deliverMouseEvent(QMouseEvent *event)
 {
     Q_Q(QSGCanvas);
 
-    if (!mouseGrabberItem &&
-         sceneEvent->type() == QEvent::GraphicsSceneMousePress &&
-         (sceneEvent->button() & sceneEvent->buttons()) == sceneEvent->buttons()) {
+    lastMousePosition = event->windowPos();
 
-        return deliverInitialMousePressEvent(rootItem, sceneEvent);
+    if (!mouseGrabberItem && 
+         event->type() == QEvent::MouseButtonPress &&
+         (event->button() & event->buttons()) == event->buttons()) {
+        
+        return deliverInitialMousePressEvent(rootItem, event);
     }
 
     if (mouseGrabberItem) {
         QSGItemPrivate *mgPrivate = QSGItemPrivate::get(mouseGrabberItem);
-        sceneMouseEventForTransform(*sceneEvent, mgPrivate->canvasToItemTransform());
-
-        sceneEvent->accept();
-        q->sendEvent(mouseGrabberItem, sceneEvent);
-        if (sceneEvent->isAccepted())
+        const QTransform &transform = mgPrivate->canvasToItemTransform();
+        QMouseEvent me(event->type(), transform.map(event->windowPos()), event->windowPos(), event->screenPos(),
+                       event->button(), event->buttons(), event->modifiers());
+        me.accept();
+        q->sendEvent(mouseGrabberItem, &me);
+        event->setAccepted(me.isAccepted());
+        if (me.isAccepted())
             return true;
     }
 
@@ -1058,11 +983,7 @@ void QSGCanvas::mousePressEvent(QMouseEvent *event)
     qWarning() << "QSGCanvas::mousePressEvent()" << event->pos() << event->button() << event->buttons();
 #endif
 
-    QGraphicsSceneMouseEvent sceneEvent(d->sceneMouseEventTypeFromMouseEvent(event));
-    d->sceneMouseEventFromMouseEvent(sceneEvent, event);
-
-    d->deliverMouseEvent(&sceneEvent);
-    event->setAccepted(sceneEvent.isAccepted());
+    d->deliverMouseEvent(event);
 }
 
 void QSGCanvas::mouseReleaseEvent(QMouseEvent *event)
@@ -1078,12 +999,7 @@ void QSGCanvas::mouseReleaseEvent(QMouseEvent *event)
         return;
     }
 
-    QGraphicsSceneMouseEvent sceneEvent(d->sceneMouseEventTypeFromMouseEvent(event));
-    d->sceneMouseEventFromMouseEvent(sceneEvent, event);
-
-    d->deliverMouseEvent(&sceneEvent);
-    event->setAccepted(sceneEvent.isAccepted());
-
+    d->deliverMouseEvent(event);
     d->mouseGrabberItem = 0;
 }
 
@@ -1095,19 +1011,15 @@ void QSGCanvas::mouseDoubleClickEvent(QMouseEvent *event)
     qWarning() << "QSGCanvas::mouseDoubleClickEvent()" << event->pos() << event->button() << event->buttons();
 #endif
 
-    QGraphicsSceneMouseEvent sceneEvent(d->sceneMouseEventTypeFromMouseEvent(event));
-    d->sceneMouseEventFromMouseEvent(sceneEvent, event);
-
     if (!d->mouseGrabberItem && (event->button() & event->buttons()) == event->buttons()) {
-        if (d->deliverInitialMousePressEvent(d->rootItem, &sceneEvent))
+        if (d->deliverInitialMousePressEvent(d->rootItem, event))
             event->accept();
         else
             event->ignore();
         return;
     }
 
-    d->deliverMouseEvent(&sceneEvent);
-    event->setAccepted(sceneEvent.isAccepted());
+    d->deliverMouseEvent(event);
 }
 
 bool QSGCanvasPrivate::sendHoverEvent(QEvent::Type type, QSGItem *item,
@@ -1136,12 +1048,12 @@ void QSGCanvas::mouseMoveEvent(QMouseEvent *event)
 
     if (!d->mouseGrabberItem) {
         if (d->lastMousePosition.isNull())
-            d->lastMousePosition = event->pos();
+            d->lastMousePosition = event->windowPos();
         QPointF last = d->lastMousePosition;
-        d->lastMousePosition = event->pos();
+        d->lastMousePosition = event->windowPos();
 
         bool accepted = event->isAccepted();
-        bool delivered = d->deliverHoverEvent(d->rootItem, event->pos(), last, event->modifiers(), accepted);
+        bool delivered = d->deliverHoverEvent(d->rootItem, event->windowPos(), last, event->modifiers(), accepted);
         if (!delivered) {
             //take care of any exits
             accepted = d->clearHover();
@@ -1150,11 +1062,7 @@ void QSGCanvas::mouseMoveEvent(QMouseEvent *event)
         return;
     }
 
-    QGraphicsSceneMouseEvent sceneEvent(d->sceneMouseEventTypeFromMouseEvent(event));
-    d->sceneMouseEventFromMouseEvent(sceneEvent, event);
-
-    d->deliverMouseEvent(&sceneEvent);
-    event->setAccepted(sceneEvent.isAccepted());
+    d->deliverMouseEvent(event);
 }
 
 bool QSGCanvasPrivate::deliverHoverEvent(QSGItem *item, const QPointF &scenePos, const QPointF &lastScenePos,
@@ -1233,7 +1141,7 @@ bool QSGCanvasPrivate::deliverWheelEvent(QSGItem *item, QWheelEvent *event)
         return false;
 
     if (itemPrivate->flags & QSGItem::ItemClipsChildrenToShape) {
-        QPointF p = item->mapFromScene(event->pos());
+        QPointF p = item->mapFromScene(event->posF());
         if (!QRectF(0, 0, item->width(), item->height()).contains(p))
             return false;
     }
@@ -1247,7 +1155,7 @@ bool QSGCanvasPrivate::deliverWheelEvent(QSGItem *item, QWheelEvent *event)
             return true;
     }
 
-    QPointF p = item->mapFromScene(event->pos());
+    QPointF p = item->mapFromScene(event->posF());
     if (QRectF(0, 0, item->width(), item->height()).contains(p)) {
         QWheelEvent wheel(p, event->delta(), event->buttons(), event->modifiers(), event->orientation());
         wheel.accept();
@@ -1494,7 +1402,7 @@ bool QSGCanvasPrivate::deliverDragEvent(QSGItem *item, QSGDragEvent *event)
     return false;
 }
 
-bool QSGCanvasPrivate::sendFilteredMouseEvent(QSGItem *target, QSGItem *item, QGraphicsSceneMouseEvent *event)
+bool QSGCanvasPrivate::sendFilteredMouseEvent(QSGItem *target, QSGItem *item, QMouseEvent *event)
 {
     if (!target)
         return false;
@@ -1543,13 +1451,13 @@ bool QSGCanvas::sendEvent(QSGItem *item, QEvent *e)
     case QEvent::FocusOut:
         QSGItemPrivate::get(item)->deliverFocusEvent(static_cast<QFocusEvent *>(e));
         break;
-    case QEvent::GraphicsSceneMousePress:
-    case QEvent::GraphicsSceneMouseRelease:
-    case QEvent::GraphicsSceneMouseDoubleClick:
-    case QEvent::GraphicsSceneMouseMove:
-        // XXX todo - should sendEvent be doing this?  how does it relate to forwarded events?
+    case QEvent::MouseButtonPress:
+    case QEvent::MouseButtonRelease:
+    case QEvent::MouseButtonDblClick:
+    case QEvent::MouseMove:
+        // XXX todo - should sendEvent be doing this?  how does it relate to forwarded events? 
         {
-            QGraphicsSceneMouseEvent *se = static_cast<QGraphicsSceneMouseEvent *>(e);
+            QMouseEvent *se = static_cast<QMouseEvent *>(e);
             if (!d->sendFilteredMouseEvent(item->parentItem(), item, se)) {
                 se->accept();
                 QSGItemPrivate::get(item)->deliverMouseEvent(se);
index e5347f5..6915bff 100644 (file)
@@ -102,16 +102,12 @@ public:
     QSGItem *mouseGrabberItem;
 
     // Mouse positions are saved in widget coordinates
-    QPoint lastMousePosition;
-    QPoint buttonDownPositions[5]; // Left, Right, Middle, XButton1, XButton2
-    void sceneMouseEventFromMouseEvent(QGraphicsSceneMouseEvent &, QMouseEvent *);
+    QPointF lastMousePosition;
     void translateTouchEvent(QTouchEvent *touchEvent);
-    static QEvent::Type sceneMouseEventTypeFromMouseEvent(QMouseEvent *);
-    static void sceneMouseEventForTransform(QGraphicsSceneMouseEvent &, const QTransform &);
     static void transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform);
-    bool deliverInitialMousePressEvent(QSGItem *, QGraphicsSceneMouseEvent *);
-    bool deliverMouseEvent(QGraphicsSceneMouseEvent *);
-    bool sendFilteredMouseEvent(QSGItem *, QSGItem *, QGraphicsSceneMouseEvent *);
+    bool deliverInitialMousePressEvent(QSGItem *, QMouseEvent *);
+    bool deliverMouseEvent(QMouseEvent *);
+    bool sendFilteredMouseEvent(QSGItem *, QSGItem *, QMouseEvent *);
     bool deliverWheelEvent(QSGItem *, QWheelEvent *);
     bool deliverTouchPoints(QSGItem *, QTouchEvent *, const QList<QTouchEvent::TouchPoint> &, QSet<int> *,
             QHash<QSGItem *, QList<QTouchEvent::TouchPoint> > *);
index e63698e..92554f8 100644 (file)
@@ -45,7 +45,7 @@
 #include "qsgcanvas_p.h"
 
 #include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtWidgets/qapplication.h>
 #include "qplatformdefs.h"
 
@@ -777,7 +777,7 @@ void QSGFlickable::setFlickableDirection(FlickableDirection direction)
     }
 }
 
-void QSGFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGFlickablePrivate::handleMousePressEvent(QMouseEvent *event)
 {
     Q_Q(QSGFlickable);
     if (interactive && timeline.isActive()
@@ -799,7 +799,7 @@ void QSGFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
     fixupMode = Normal;
     lastPos = QPoint();
     QSGItemPrivate::start(lastPosTime);
-    pressPos = event->pos();
+    pressPos = event->localPos();
     hData.pressPos = hData.move.value();
     vData.pressPos = vData.move.value();
     flickingHorizontally = false;
@@ -808,7 +808,7 @@ void QSGFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
     QSGItemPrivate::start(velocityTime);
 }
 
-void QSGFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGFlickablePrivate::handleMouseMoveEvent(QMouseEvent *event)
 {
     Q_Q(QSGFlickable);
     if (!interactive || !lastPosTime.isValid())
@@ -820,7 +820,7 @@ void QSGFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
     bool stealX = stealMouse;
 
     if (q->yflick()) {
-        int dy = int(event->pos().y() - pressPos.y());
+        int dy = int(event->localPos().y() - pressPos.y());
         if (qAbs(dy) > QApplication::startDragDistance() || QSGItemPrivate::elapsed(pressTime) > 200) {
             if (!vMoved)
                 vData.dragStartOffset = dy;
@@ -852,7 +852,7 @@ void QSGFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
     }
 
     if (q->xflick()) {
-        int dx = int(event->pos().x() - pressPos.x());
+        int dx = int(event->localPos().x() - pressPos.x());
         if (qAbs(dx) > QApplication::startDragDistance() || QSGItemPrivate::elapsed(pressTime) > 200) {
             if (!hMoved)
                 hData.dragStartOffset = dx;
@@ -908,18 +908,18 @@ void QSGFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
         if (elapsed <= 0)
             return;
         QSGItemPrivate::restart(lastPosTime);
-        qreal dy = event->pos().y()-lastPos.y();
+        qreal dy = event->localPos().y()-lastPos.y();
         if (q->yflick() && !rejectY)
             vData.addVelocitySample(dy/elapsed, maxVelocity);
-        qreal dx = event->pos().x()-lastPos.x();
+        qreal dx = event->localPos().x()-lastPos.x();
         if (q->xflick() && !rejectX)
             hData.addVelocitySample(dx/elapsed, maxVelocity);
     }
 
-    lastPos = event->pos();
+    lastPos = event->localPos();
 }
 
-void QSGFlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGFlickablePrivate::handleMouseReleaseEvent(QMouseEvent *event)
 {
     Q_Q(QSGFlickable);
     stealMouse = false;
@@ -945,7 +945,7 @@ void QSGFlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *even
     qreal velocity = vData.velocity;
     if (vData.atBeginning || vData.atEnd)
         velocity /= 2;
-    if (qAbs(velocity) > MinimumFlickVelocity && qAbs(event->pos().y() - pressPos.y()) > FlickThreshold)
+    if (qAbs(velocity) > MinimumFlickVelocity && qAbs(event->localPos().y() - pressPos.y()) > FlickThreshold)
         flickY(velocity);
     else
         fixupY();
@@ -953,7 +953,7 @@ void QSGFlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *even
     velocity = hData.velocity;
     if (hData.atBeginning || hData.atEnd)
         velocity /= 2;
-    if (qAbs(velocity) > MinimumFlickVelocity && qAbs(event->pos().x() - pressPos.x()) > FlickThreshold)
+    if (qAbs(velocity) > MinimumFlickVelocity && qAbs(event->localPos().x() - pressPos.x()) > FlickThreshold)
         flickX(velocity);
     else
         fixupX();
@@ -962,7 +962,7 @@ void QSGFlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *even
         q->movementEnding();
 }
 
-void QSGFlickable::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGFlickable::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGFlickable);
     if (d->interactive) {
@@ -974,7 +974,7 @@ void QSGFlickable::mousePressEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGFlickable::mouseMoveEvent(QMouseEvent *event)
 {
     Q_D(QSGFlickable);
     if (d->interactive) {
@@ -985,7 +985,7 @@ void QSGFlickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGFlickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGFlickable::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGFlickable);
     if (d->interactive) {
@@ -1058,7 +1058,7 @@ bool QSGFlickablePrivate::isOutermostPressDelay() const
     return true;
 }
 
-void QSGFlickablePrivate::captureDelayedPress(QGraphicsSceneMouseEvent *event)
+void QSGFlickablePrivate::captureDelayedPress(QMouseEvent *event)
 {
     Q_Q(QSGFlickable);
     if (!q->canvas() || pressDelay <= 0)
@@ -1066,25 +1066,8 @@ void QSGFlickablePrivate::captureDelayedPress(QGraphicsSceneMouseEvent *event)
     if (!isOutermostPressDelay())
         return;
     delayedPressTarget = q->canvas()->mouseGrabberItem();
-    delayedPressEvent = new QGraphicsSceneMouseEvent(event->type());
+    delayedPressEvent = new QMouseEvent(*event);
     delayedPressEvent->setAccepted(false);
-    for (int i = 0x1; i <= 0x10; i <<= 1) {
-        if (event->buttons() & i) {
-            Qt::MouseButton button = Qt::MouseButton(i);
-            delayedPressEvent->setButtonDownPos(button, event->buttonDownPos(button));
-            delayedPressEvent->setButtonDownScenePos(button, event->buttonDownScenePos(button));
-            delayedPressEvent->setButtonDownScreenPos(button, event->buttonDownScreenPos(button));
-        }
-    }
-    delayedPressEvent->setButtons(event->buttons());
-    delayedPressEvent->setButton(event->button());
-    delayedPressEvent->setPos(event->pos());
-    delayedPressEvent->setScenePos(event->scenePos());
-    delayedPressEvent->setScreenPos(event->screenPos());
-    delayedPressEvent->setLastPos(event->lastPos());
-    delayedPressEvent->setLastScenePos(event->lastScenePos());
-    delayedPressEvent->setLastScreenPos(event->lastScreenPos());
-    delayedPressEvent->setModifiers(event->modifiers());
     delayedPressTimer.start(pressDelay, q);
 }
 
@@ -1501,34 +1484,26 @@ void QSGFlickable::mouseUngrabEvent()
     }
 }
 
-bool QSGFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event)
+bool QSGFlickable::sendMouseEvent(QMouseEvent *event)
 {
     Q_D(QSGFlickable);
-    QGraphicsSceneMouseEvent mouseEvent(event->type());
     QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height()));
 
     QSGCanvas *c = canvas();
     QSGItem *grabber = c ? c->mouseGrabberItem() : 0;
     bool disabledItem = grabber && !grabber->isEnabled();
     bool stealThisEvent = d->stealMouse;
-    if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) {
+    if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) {
+        QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(),
+                               event->button(), event->buttons(), event->modifiers());
+
         mouseEvent.setAccepted(false);
-        for (int i = 0x1; i <= 0x10; i <<= 1) {
-            if (event->buttons() & i) {
-                Qt::MouseButton button = Qt::MouseButton(i);
-                mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
-            }
-        }
-        mouseEvent.setScenePos(event->scenePos());
-        mouseEvent.setLastScenePos(event->lastScenePos());
-        mouseEvent.setPos(mapFromScene(event->scenePos()));
-        mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
 
         switch(mouseEvent.type()) {
-        case QEvent::GraphicsSceneMouseMove:
+        case QEvent::MouseMove:
             d->handleMouseMoveEvent(&mouseEvent);
             break;
-        case QEvent::GraphicsSceneMousePress:
+        case QEvent::MouseButtonPress:
             if (d->pressed) // we are already pressed - this is a delayed replay
                 return false;
 
@@ -1536,7 +1511,7 @@ bool QSGFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event)
             d->captureDelayedPress(event);
             stealThisEvent = d->stealMouse;   // Update stealThisEvent in case changed by function call above
             break;
-        case QEvent::GraphicsSceneMouseRelease:
+        case QEvent::MouseButtonRelease:
             if (d->delayedPressEvent) {
                 // We replay the mouse press but the grabber we had might not be interessted by the event (e.g. overlay)
                 // so we reset the grabber
@@ -1568,7 +1543,7 @@ bool QSGFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event)
         d->lastPosTime.invalidate();
         returnToBounds();
     }
-    if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) {
+    if (event->type() == QEvent::MouseButtonRelease) {
         d->lastPosTime.invalidate();
         d->clearDelayedPress();
         d->stealMouse = false;
@@ -1584,10 +1559,10 @@ bool QSGFlickable::childMouseEventFilter(QSGItem *i, QEvent *e)
     if (!isVisible() || !d->interactive || !isEnabled())
         return QSGItem::childMouseEventFilter(i, e);
     switch (e->type()) {
-    case QEvent::GraphicsSceneMousePress:
-    case QEvent::GraphicsSceneMouseMove:
-    case QEvent::GraphicsSceneMouseRelease:
-        return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
+    case QEvent::MouseButtonPress:
+    case QEvent::MouseMove:
+    case QEvent::MouseButtonRelease:
+        return sendMouseEvent(static_cast<QMouseEvent *>(e));
     default:
         break;
     }
index 7f12e8a..14f5232 100644 (file)
@@ -191,9 +191,9 @@ Q_SIGNALS:
 
 protected:
     virtual bool childMouseEventFilter(QSGItem *, QEvent *);
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
     virtual void wheelEvent(QWheelEvent *event);
     virtual void timerEvent(QTimerEvent *event);
 
@@ -217,7 +217,7 @@ protected:
     virtual void geometryChanged(const QRectF &newGeometry,
                                  const QRectF &oldGeometry);
     void mouseUngrabEvent();
-    bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
+    bool sendMouseEvent(QMouseEvent *event);
 
     bool xflick() const;
     bool yflick() const;
index 9e854af..3ac6d87 100644 (file)
@@ -138,7 +138,7 @@ public:
     void updateBeginningEnd();
 
     bool isOutermostPressDelay() const;
-    void captureDelayedPress(QGraphicsSceneMouseEvent *event);
+    void captureDelayedPress(QMouseEvent *event);
     void clearDelayedPress();
 
     void setViewportX(qreal x);
@@ -177,7 +177,7 @@ public:
     QElapsedTimer velocityTime;
     QPointF lastFlickablePosition;
     qreal reportedVelocitySmoothing;
-    QGraphicsSceneMouseEvent *delayedPressEvent;
+    QMouseEvent *delayedPressEvent;
     QSGItem *delayedPressTarget;
     QBasicTimer delayedPressTimer;
     int pressDelay;
@@ -196,9 +196,9 @@ public:
     QSGFlickable::FlickableDirection flickableDirection;
     QSGFlickable::BoundsBehavior boundsBehavior;
 
-    void handleMousePressEvent(QGraphicsSceneMouseEvent *);
-    void handleMouseMoveEvent(QGraphicsSceneMouseEvent *);
-    void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
+    void handleMousePressEvent(QMouseEvent *);
+    void handleMouseMoveEvent(QMouseEvent *);
+    void handleMouseReleaseEvent(QMouseEvent *);
 
     // flickableData property
     static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
index a779763..c7df26d 100644 (file)
@@ -2829,22 +2829,22 @@ void QSGItem::focusOutEvent(QFocusEvent *)
 {
 }
 
-void QSGItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGItem::mousePressEvent(QMouseEvent *event)
 {
     event->ignore();
 }
 
-void QSGItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGItem::mouseMoveEvent(QMouseEvent *event)
 {
     event->ignore();
 }
 
-void QSGItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGItem::mouseReleaseEvent(QMouseEvent *event)
 {
     event->ignore();
 }
 
-void QSGItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+void QSGItem::mouseDoubleClickEvent(QMouseEvent *event)
 {
     mousePressEvent(event);
 }
@@ -3341,7 +3341,7 @@ void QSGItemPrivate::deliverFocusEvent(QFocusEvent *e)
     }
 }
 
-void QSGItemPrivate::deliverMouseEvent(QGraphicsSceneMouseEvent *e)
+void QSGItemPrivate::deliverMouseEvent(QMouseEvent *e)
 {
     Q_Q(QSGItem);
 
@@ -3350,16 +3350,16 @@ void QSGItemPrivate::deliverMouseEvent(QGraphicsSceneMouseEvent *e)
     switch(e->type()) {
     default:
         Q_ASSERT(!"Unknown event type");
-    case QEvent::GraphicsSceneMouseMove:
+    case QEvent::MouseMove:
         q->mouseMoveEvent(e);
         break;
-    case QEvent::GraphicsSceneMousePress:
+    case QEvent::MouseButtonPress:
         q->mousePressEvent(e);
         break;
-    case QEvent::GraphicsSceneMouseRelease:
+    case QEvent::MouseButtonRelease:
         q->mouseReleaseEvent(e);
         break;
-    case QEvent::GraphicsSceneMouseDoubleClick:
+    case QEvent::MouseButtonDblClick:
         q->mouseDoubleClickEvent(e);
         break;
     }
index 02a7a33..bff32e3 100644 (file)
@@ -48,7 +48,7 @@
 
 #include <QtCore/QObject>
 #include <QtCore/QList>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtGui/qfont.h>
 #include <QtWidgets/qaction.h>
 
@@ -360,10 +360,10 @@ protected:
     virtual void inputMethodEvent(QInputMethodEvent *);
     virtual void focusInEvent(QFocusEvent *);
     virtual void focusOutEvent(QFocusEvent *);
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QMouseEvent *event);
     virtual void mouseUngrabEvent(); // XXX todo - params?
     virtual void wheelEvent(QWheelEvent *event);
     virtual void touchEvent(QTouchEvent *event);
index a3acb97..294edc0 100644 (file)
@@ -320,7 +320,7 @@ public:
     void deliverKeyEvent(QKeyEvent *);
     void deliverInputMethodEvent(QInputMethodEvent *);
     void deliverFocusEvent(QFocusEvent *);
-    void deliverMouseEvent(QGraphicsSceneMouseEvent *);
+    void deliverMouseEvent(QMouseEvent *);
     void deliverWheelEvent(QWheelEvent *);
     void deliverTouchEvent(QTouchEvent *);
     void deliverHoverEvent(QHoverEvent *);
index 7d86d2e..547df31 100644 (file)
@@ -45,8 +45,8 @@
 #include "qsgevent.h"
 #include "qsgevents_p_p.h"
 
-#include <QtWidgets/qgraphicssceneevent.h>
-#include <QtWidgets/qapplication.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qguiapplication.h>
 
 #include <float.h>
 
@@ -272,21 +272,15 @@ void QSGMouseAreaPrivate::init()
     q->setFiltersChildMouseEvents(true);
 }
 
-void QSGMouseAreaPrivate::saveEvent(QGraphicsSceneMouseEvent *event)
+void QSGMouseAreaPrivate::saveEvent(QMouseEvent *event)
 {
-    lastPos = event->pos();
-    lastScenePos = event->scenePos();
+    lastPos = event->localPos();
+    lastScenePos = event->windowPos();
     lastButton = event->button();
     lastButtons = event->buttons();
     lastModifiers = event->modifiers();
 }
 
-void QSGMouseAreaPrivate::forwardEvent(QGraphicsSceneMouseEvent* event)
-{
-    Q_Q(QSGMouseArea);
-    event->setPos(q->mapFromScene(event->scenePos()));
-}
-
 bool QSGMouseAreaPrivate::isPressAndHoldConnected()
 {
     Q_Q(QSGMouseArea);
@@ -704,7 +698,7 @@ Qt::MouseButtons QSGMouseArea::pressedButtons() const
     return d->lastButtons;
 }
 
-void QSGMouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGMouseArea::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGMouseArea);
     d->moved = false;
@@ -722,7 +716,7 @@ void QSGMouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
         if (d->drag)
             d->drag->setActive(false);
         setHovered(true);
-        d->startScene = event->scenePos();
+        d->startScene = event->windowPos();
         d->pressAndHoldTimer.start(PressAndHoldDelay, this);
         setKeepMouseGrab(d->stealMouse);
         event->setAccepted(setPressed(true));
@@ -730,7 +724,7 @@ void QSGMouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGMouseArea::mouseMoveEvent(QMouseEvent *event)
 {
     Q_D(QSGMouseArea);
     if (!d->absorb) {
@@ -760,13 +754,13 @@ void QSGMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
         QPointF curLocalPos;
         if (drag()->target()->parentItem()) {
             startLocalPos = drag()->target()->parentItem()->mapFromScene(d->startScene);
-            curLocalPos = drag()->target()->parentItem()->mapFromScene(event->scenePos());
+            curLocalPos = drag()->target()->parentItem()->mapFromScene(event->windowPos());
         } else {
             startLocalPos = d->startScene;
-            curLocalPos = event->scenePos();
+            curLocalPos = event->windowPos();
         }
 
-        const int dragThreshold = QApplication::startDragDistance();
+        const int dragThreshold = 20; // ### refactor: QGuiApplication::startDragDistance();
         qreal dx = qAbs(curLocalPos.x() - startLocalPos.x());
         qreal dy = qAbs(curLocalPos.y() - startLocalPos.y());
 
@@ -824,7 +818,7 @@ void QSGMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
         if (d->drag->active()) {
             QSGDragEvent dragEvent(
                     QSGEvent::SGDragMove,
-                    event->scenePos(),
+                    event->windowPos(),
                     d->drag->data(),
                     d->drag->keys(),
                     d->drag->grabItem());
@@ -841,7 +835,7 @@ void QSGMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
     emit positionChanged(&me);
 }
 
-void QSGMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGMouseArea::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGMouseArea);
     d->stealMouse = false;
@@ -853,7 +847,7 @@ void QSGMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
         if (d->drag && d->drag->active()) {
             QSGDragEvent dragEvent(
                     QSGEvent::SGDragDrop,
-                    event->scenePos(),
+                    event->windowPos(),
                     d->drag->data(),
                     d->drag->keys(),
                     d->drag->grabItem());
@@ -880,12 +874,10 @@ void QSGMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
     d->doubleClick = false;
 }
 
-void QSGMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+void QSGMouseArea::mouseDoubleClickEvent(QMouseEvent *event)
 {
     Q_D(QSGMouseArea);
-    if (!d->absorb) {
-        QSGItem::mouseDoubleClickEvent(event);
-    } else {
+    if (d->absorb) {
         d->saveEvent(event);
         QSGMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
         me.setAccepted(d->isDoubleClickConnected());
@@ -893,8 +885,8 @@ void QSGMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
         if (!me.isAccepted())
             d->propagate(&me, QSGMouseAreaPrivate::DoubleClick);
         d->doubleClick = d->isDoubleClickConnected() || me.isAccepted();
-        QSGItem::mouseDoubleClickEvent(event);
     }
+    QSGItem::mouseDoubleClickEvent(event);
 }
 
 void QSGMouseArea::hoverEnterEvent(QHoverEvent *event)
@@ -963,36 +955,27 @@ void QSGMouseArea::mouseUngrabEvent()
     ungrabMouse();
 }
 
-bool QSGMouseArea::sendMouseEvent(QGraphicsSceneMouseEvent *event)
+bool QSGMouseArea::sendMouseEvent(QMouseEvent *event)
 {
     Q_D(QSGMouseArea);
-    QGraphicsSceneMouseEvent mouseEvent(event->type());
     QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height()));
 
     QSGCanvas *c = canvas();
     QSGItem *grabber = c ? c->mouseGrabberItem() : 0;
     bool stealThisEvent = d->stealMouse;
-    if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
+    if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) {
+        QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(),
+                               event->button(), event->buttons(), event->modifiers());
         mouseEvent.setAccepted(false);
-        for (int i = 0x1; i <= 0x10; i <<= 1) {
-            if (event->buttons() & i) {
-                Qt::MouseButton button = Qt::MouseButton(i);
-                mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
-            }
-        }
-        mouseEvent.setScenePos(event->scenePos());
-        mouseEvent.setLastScenePos(event->lastScenePos());
-        mouseEvent.setPos(mapFromScene(event->scenePos()));
-        mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
 
-        switch(mouseEvent.type()) {
-        case QEvent::GraphicsSceneMouseMove:
+        switch (event->type()) {
+        case QEvent::MouseMove:
             mouseMoveEvent(&mouseEvent);
             break;
-        case QEvent::GraphicsSceneMousePress:
+        case QEvent::MouseButtonPress:
             mousePressEvent(&mouseEvent);
             break;
-        case QEvent::GraphicsSceneMouseRelease:
+        case QEvent::MouseButtonRelease:
             mouseReleaseEvent(&mouseEvent);
             break;
         default:
@@ -1004,7 +987,7 @@ bool QSGMouseArea::sendMouseEvent(QGraphicsSceneMouseEvent *event)
 
         return stealThisEvent;
     }
-    if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) {
+    if (event->type() == QEvent::MouseButtonRelease) {
         if (d->pressed) {
             d->pressed = false;
             d->stealMouse = false;
@@ -1027,10 +1010,10 @@ bool QSGMouseArea::childMouseEventFilter(QSGItem *i, QEvent *e)
     if (!d->absorb || !isVisible() || !d->drag || !d->drag->filterChildren())
         return QSGItem::childMouseEventFilter(i, e);
     switch (e->type()) {
-    case QEvent::GraphicsSceneMousePress:
-    case QEvent::GraphicsSceneMouseMove:
-    case QEvent::GraphicsSceneMouseRelease:
-        return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
+    case QEvent::MouseButtonPress:
+    case QEvent::MouseMove:
+    case QEvent::MouseButtonRelease:
+        return sendMouseEvent(static_cast<QMouseEvent *>(e));
     default:
         break;
     }
@@ -1108,7 +1091,6 @@ bool QSGMouseArea::hoverEnabled() const
 
 void QSGMouseArea::setHoverEnabled(bool h)
 {
-    Q_D(QSGMouseArea);
     if (h == acceptHoverEvents())
         return;
 
index ff3863c..c7d3cb7 100644 (file)
@@ -211,12 +211,12 @@ Q_SIGNALS:
 protected:
     void setHovered(bool);
     bool setPressed(bool);
-    bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
+    bool sendMouseEvent(QMouseEvent *event);
 
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
     virtual void mouseUngrabEvent();
     virtual void hoverEnterEvent(QHoverEvent *event);
     virtual void hoverMoveEvent(QHoverEvent *event);
index ff531c6..2ec1eda 100644 (file)
@@ -56,7 +56,7 @@
 
 #include "qsgitem_p.h"
 
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtCore/qbasictimer.h>
 
 QT_BEGIN_NAMESPACE
@@ -72,7 +72,7 @@ public:
     ~QSGMouseAreaPrivate();
     void init();
 
-    void saveEvent(QGraphicsSceneMouseEvent *event);
+    void saveEvent(QMouseEvent *event);
     enum PropagateType{
         Click,
         DoubleClick,
@@ -80,7 +80,6 @@ public:
     };
     void propagate(QSGMouseEvent* event, PropagateType);
     bool propagateHelper(QSGMouseEvent*, QSGItem*,const QPointF &, PropagateType);
-    void forwardEvent(QGraphicsSceneMouseEvent* event);
 
     bool isPressAndHoldConnected();
     bool isDoubleClickConnected();
index 2c3e3ce..d37f710 100644 (file)
@@ -48,7 +48,7 @@
 #include <private/qlistmodelinterface_p.h>
 
 #include <QtGui/qevent.h>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtWidgets/qapplication.h>
 #include <QtCore/qmath.h>
 #include <math.h>
@@ -1095,7 +1095,7 @@ QPointF QSGPathViewPrivate::pointNear(const QPointF &point, qreal *nearPercent)
     return nearPoint;
 }
 
-void QSGPathView::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGPathView::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGPathView);
     if (d->interactive) {
@@ -1106,12 +1106,12 @@ void QSGPathView::mousePressEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGPathViewPrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGPathViewPrivate::handleMousePressEvent(QMouseEvent *event)
 {
     Q_Q(QSGPathView);
     if (!interactive || !items.count())
         return;
-    QPointF scenePoint = q->mapToScene(event->pos());
+    QPointF scenePoint = q->mapToScene(event->localPos());
     int idx = 0;
     for (; idx < items.count(); ++idx) {
         QRectF rect = items.at(idx)->boundingRect();
@@ -1122,9 +1122,9 @@ void QSGPathViewPrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
     if (idx == items.count() && dragMargin == 0.)  // didn't click on an item
         return;
 
-    startPoint = pointNear(event->pos(), &startPc);
+    startPoint = pointNear(event->localPos(), &startPc);
     if (idx == items.count()) {
-        qreal distance = qAbs(event->pos().x() - startPoint.x()) + qAbs(event->pos().y() - startPoint.y());
+        qreal distance = qAbs(event->localPos().x() - startPoint.x()) + qAbs(event->localPos().y() - startPoint.y());
         if (distance > dragMargin)
             return;
     }
@@ -1140,7 +1140,7 @@ void QSGPathViewPrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
     tl.clear();
 }
 
-void QSGPathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGPathView::mouseMoveEvent(QMouseEvent *event)
 {
     Q_D(QSGPathView);
     if (d->interactive) {
@@ -1153,14 +1153,14 @@ void QSGPathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGPathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGPathViewPrivate::handleMouseMoveEvent(QMouseEvent *event)
 {
     Q_Q(QSGPathView);
     if (!interactive || !lastPosTime.isValid())
         return;
 
     qreal newPc;
-    QPointF pathPoint = pointNear(event->pos(), &newPc);
+    QPointF pathPoint = pointNear(event->localPos(), &newPc);
     if (!stealMouse) {
         QPointF delta = pathPoint - startPoint;
         if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance()) {
@@ -1192,7 +1192,7 @@ void QSGPathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGPathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGPathView::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGPathView);
     if (d->interactive) {
@@ -1204,7 +1204,7 @@ void QSGPathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGPathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *)
+void QSGPathViewPrivate::handleMouseReleaseEvent(QMouseEvent *)
 {
     Q_Q(QSGPathView);
     stealMouse = false;
@@ -1255,36 +1255,27 @@ void QSGPathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *)
         q->movementEnding();
 }
 
-bool QSGPathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
+bool QSGPathView::sendMouseEvent(QMouseEvent *event)
 {
     Q_D(QSGPathView);
-    QGraphicsSceneMouseEvent mouseEvent(event->type());
     QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height()));
     QSGCanvas *c = canvas();
     QSGItem *grabber = c ? c->mouseGrabberItem() : 0;
     bool stealThisEvent = d->stealMouse;
-    if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
+    if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) {
+        QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(),
+                               event->button(), event->buttons(), event->modifiers());
         mouseEvent.setAccepted(false);
-        for (int i = 0x1; i <= 0x10; i <<= 1) {
-            if (event->buttons() & i) {
-                Qt::MouseButton button = Qt::MouseButton(i);
-                mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
-            }
-        }
-        mouseEvent.setScenePos(event->scenePos());
-        mouseEvent.setLastScenePos(event->lastScenePos());
-        mouseEvent.setPos(mapFromScene(event->scenePos()));
-        mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
 
         switch(mouseEvent.type()) {
-        case QEvent::GraphicsSceneMouseMove:
+        case QEvent::MouseMove:
             d->handleMouseMoveEvent(&mouseEvent);
             break;
-        case QEvent::GraphicsSceneMousePress:
+        case QEvent::MouseButtonPress:
             d->handleMousePressEvent(&mouseEvent);
             stealThisEvent = d->stealMouse;   // Update stealThisEvent in case changed by function call above
             break;
-        case QEvent::GraphicsSceneMouseRelease:
+        case QEvent::MouseButtonRelease:
             d->handleMouseReleaseEvent(&mouseEvent);
             break;
         default:
@@ -1299,7 +1290,7 @@ bool QSGPathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
         d->lastPosTime.invalidate();
         d->fixOffset();
     }
-    if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease)
+    if (event->type() == QEvent::MouseButtonRelease)
         d->stealMouse = false;
     return false;
 }
@@ -1311,10 +1302,10 @@ bool QSGPathView::childMouseEventFilter(QSGItem *i, QEvent *e)
         return QSGItem::childMouseEventFilter(i, e);
 
     switch (e->type()) {
-    case QEvent::GraphicsSceneMousePress:
-    case QEvent::GraphicsSceneMouseMove:
-    case QEvent::GraphicsSceneMouseRelease:
-        return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
+    case QEvent::MouseButtonPress:
+    case QEvent::MouseMove:
+    case QEvent::MouseButtonRelease:
+        return sendMouseEvent(static_cast<QMouseEvent *>(e));
     default:
         break;
     }
index a271e32..fa00294 100644 (file)
@@ -174,10 +174,10 @@ Q_SIGNALS:
 
 protected:
     virtual void updatePolish();
-    void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
-    bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *);
+    bool sendMouseEvent(QMouseEvent *event);
     bool childMouseEventFilter(QSGItem *, QEvent *);
     void mouseUngrabEvent();
     void componentComplete();
index 1575c6c..30bb74a 100644 (file)
@@ -124,9 +124,9 @@ public:
         return model && model->count() > 0 && model->isValid() && path;
     }
 
-    void handleMousePressEvent(QGraphicsSceneMouseEvent *event);
-    void handleMouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
+    void handleMousePressEvent(QMouseEvent *event);
+    void handleMouseMoveEvent(QMouseEvent *event);
+    void handleMouseReleaseEvent(QMouseEvent *);
 
     int calcCurrentIndex();
     void updateCurrent();
index 54c32e5..6d89414 100644 (file)
@@ -42,7 +42,7 @@
 #include "qsgpincharea_p_p.h"
 #include "qsgcanvas.h"
 
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtWidgets/qapplication.h>
 
 #include <float.h>
@@ -462,7 +462,7 @@ void QSGPinchArea::updatePinch()
     }
 }
 
-void QSGPinchArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGPinchArea::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGPinchArea);
     d->stealMouse = false;
@@ -474,7 +474,7 @@ void QSGPinchArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGPinchArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGPinchArea::mouseMoveEvent(QMouseEvent *event)
 {
     Q_D(QSGPinchArea);
     if (!d->absorb) {
@@ -483,7 +483,7 @@ void QSGPinchArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGPinchArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGPinchArea::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGPinchArea);
     d->stealMouse = false;
@@ -502,36 +502,27 @@ void QSGPinchArea::mouseUngrabEvent()
     setKeepMouseGrab(false);
 }
 
-bool QSGPinchArea::sendMouseEvent(QGraphicsSceneMouseEvent *event)
+bool QSGPinchArea::sendMouseEvent(QMouseEvent *event)
 {
     Q_D(QSGPinchArea);
-    QGraphicsSceneMouseEvent mouseEvent(event->type());
     QRectF myRect = mapRectToScene(QRectF(0, 0, width(), height()));
 
     QSGCanvas *c = canvas();
     QSGItem *grabber = c ? c->mouseGrabberItem() : 0;
     bool stealThisEvent = d->stealMouse;
-    if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
+    if ((stealThisEvent || myRect.contains(event->windowPos())) && (!grabber || !grabber->keepMouseGrab())) {
+        QMouseEvent mouseEvent(event->type(), mapFromScene(event->windowPos()), event->windowPos(), event->screenPos(),
+                               event->button(), event->buttons(), event->modifiers());
         mouseEvent.setAccepted(false);
-        for (int i = 0x1; i <= 0x10; i <<= 1) {
-            if (event->buttons() & i) {
-                Qt::MouseButton button = Qt::MouseButton(i);
-                mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
-            }
-        }
-        mouseEvent.setScenePos(event->scenePos());
-        mouseEvent.setLastScenePos(event->lastScenePos());
-        mouseEvent.setPos(mapFromScene(event->scenePos()));
-        mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
 
         switch(mouseEvent.type()) {
-        case QEvent::GraphicsSceneMouseMove:
+        case QEvent::MouseMove:
             mouseMoveEvent(&mouseEvent);
             break;
-        case QEvent::GraphicsSceneMousePress:
+        case QEvent::MouseButtonPress:
             mousePressEvent(&mouseEvent);
             break;
-        case QEvent::GraphicsSceneMouseRelease:
+        case QEvent::MouseButtonRelease:
             mouseReleaseEvent(&mouseEvent);
             break;
         default:
@@ -543,7 +534,7 @@ bool QSGPinchArea::sendMouseEvent(QGraphicsSceneMouseEvent *event)
 
         return stealThisEvent;
     }
-    if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) {
+    if (event->type() == QEvent::MouseButtonRelease) {
         d->stealMouse = false;
         if (c && c->mouseGrabberItem() == this)
             ungrabMouse();
@@ -558,10 +549,10 @@ bool QSGPinchArea::childMouseEventFilter(QSGItem *i, QEvent *e)
     if (!d->absorb || !isVisible())
         return QSGItem::childMouseEventFilter(i, e);
     switch (e->type()) {
-    case QEvent::GraphicsSceneMousePress:
-    case QEvent::GraphicsSceneMouseMove:
-    case QEvent::GraphicsSceneMouseRelease:
-        return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
+    case QEvent::MouseButtonPress:
+    case QEvent::MouseMove:
+    case QEvent::MouseButtonRelease:
+        return sendMouseEvent(static_cast<QMouseEvent *>(e));
         break;
     case QEvent::TouchBegin:
     case QEvent::TouchUpdate: {
index 95a1d7a..f27bddb 100644 (file)
@@ -281,11 +281,11 @@ Q_SIGNALS:
     void pinchFinished(QSGPinchEvent *pinch);
 
 protected:
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
     virtual void mouseUngrabEvent();
-    virtual bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
+    virtual bool sendMouseEvent(QMouseEvent *event);
     virtual bool childMouseEventFilter(QSGItem *i, QEvent *e);
     virtual void touchEvent(QTouchEvent *event);
 
index bac0be9..da34cc6 100644 (file)
@@ -50,7 +50,7 @@
 #include <private/qsgtexture_p.h>
 
 #include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtGui/qabstracttextdocumentlayout.h>
 #include <QtGui/qpainter.h>
 #include <QtGui/qtextdocument.h>
@@ -1679,15 +1679,15 @@ void QSGText::componentComplete()
 }
 
 /*!  \internal */
-void QSGText::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGText::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGText);
 
-    if (!d->richText || !d->doc || d->doc->documentLayout()->anchorAt(event->pos()).isEmpty()) {
+    if (!d->richText || !d->doc || d->doc->documentLayout()->anchorAt(event->localPos()).isEmpty()) {
         event->setAccepted(false);
         d->activeLink.clear();
     } else {
-        d->activeLink = d->doc->documentLayout()->anchorAt(event->pos());
+        d->activeLink = d->doc->documentLayout()->anchorAt(event->localPos());
     }
 
     // ### may malfunction if two of the same links are clicked & dragged onto each other)
@@ -1698,12 +1698,12 @@ void QSGText::mousePressEvent(QGraphicsSceneMouseEvent *event)
 }
 
 /*! \internal */
-void QSGText::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGText::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGText);
 
         // ### confirm the link, and send a signal out
-    if (d->richText && d->doc && d->activeLink == d->doc->documentLayout()->anchorAt(event->pos()))
+    if (d->richText && d->doc && d->activeLink == d->doc->documentLayout()->anchorAt(event->localPos()))
         emit linkActivated(d->activeLink);
     else
         event->setAccepted(false);
index 4a4b019..725eeb2 100644 (file)
@@ -194,8 +194,8 @@ Q_SIGNALS:
     void effectiveHorizontalAlignmentChanged();
 
 protected:
-    void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
     virtual void geometryChanged(const QRectF &newGeometry,
                                  const QRectF &oldGeometry);
     virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
index cf86168..6b9e443 100644 (file)
@@ -48,7 +48,7 @@
 
 #include <QtDeclarative/qdeclarativeinfo.h>
 #include <QtWidgets/qapplication.h>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtGui/qpainter.h>
 #include <QtGui/qtextobject.h>
 #include <QtCore/qmath.h>
@@ -1328,7 +1328,7 @@ void QSGTextEdit::paste()
 \overload
 Handles the given mouse \a event.
 */
-void QSGTextEdit::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextEdit::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGTextEdit);
     if (d->focusOnPress){
@@ -1354,12 +1354,12 @@ void QSGTextEdit::mousePressEvent(QGraphicsSceneMouseEvent *event)
 \overload
 Handles the given mouse \a event.
 */
-void QSGTextEdit::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextEdit::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGTextEdit);
     d->control->processEvent(event, QPointF(0, -d->yoff));
     if (!d->showInputPanelOnFocus) { // input panel on click
-        if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) {
+        if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->localPos())) {
             // ### refactor: port properly
             qDebug("QSGTextEdit: virtual keyboard handling not implemented");
 //            if (canvas() && canvas() == qApp->focusWidget()) {
@@ -1377,7 +1377,7 @@ void QSGTextEdit::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 \overload
 Handles the given mouse \a event.
 */
-void QSGTextEdit::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextEdit::mouseDoubleClickEvent(QMouseEvent *event)
 {
     Q_D(QSGTextEdit);
     d->control->processEvent(event, QPointF(0, -d->yoff));
@@ -1389,7 +1389,7 @@ void QSGTextEdit::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
 \overload
 Handles the given mouse \a event.
 */
-void QSGTextEdit::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextEdit::mouseMoveEvent(QMouseEvent *event)
 {
     Q_D(QSGTextEdit);
     d->control->processEvent(event, QPointF(0, -d->yoff));
index fa61f03..b07292b 100644 (file)
@@ -283,10 +283,10 @@ protected:
     void focusInEvent(QFocusEvent *event);
 
     // mouse filter?
-    void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
-    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
+    void mouseDoubleClickEvent(QMouseEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
     void inputMethodEvent(QInputMethodEvent *e);
     virtual void itemChange(ItemChange, const ItemChangeData &);
 
index f6b8ecd..a7c1a12 100644 (file)
 #include <private/qsgdistancefieldglyphcache_p.h>
 
 #include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtWidgets/qgraphicssceneevent.h>
+#include <QtGui/qevent.h>
 #include <QtWidgets/qinputcontext.h>
 #include <QTextBoundaryFinder>
 #include <qstyle.h>
 #include <qsgtextnode_p.h>
 #include <qsgsimplerectnode.h>
 
+#include <QtGui/qplatforminputcontext_qpa.h>
+#include <private/qguiapplication_p.h>
+
 QT_BEGIN_NAMESPACE
 
 DEFINE_BOOL_CONFIG_OPTION(qmlDisableDistanceField, QML_DISABLE_DISTANCEFIELD)
@@ -1079,13 +1082,13 @@ void QSGTextInput::inputMethodEvent(QInputMethodEvent *ev)
         emit inputMethodComposingChanged();
 }
 
-void QSGTextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextInput::mouseDoubleClickEvent(QMouseEvent *event)
 {
     Q_D(QSGTextInput);
-    if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonDblClick))
+    if (d->sendMouseEventToInputContext(event))
         return;
     if (d->selectByMouse) {
-        int cursor = d->xToPos(event->pos().x());
+        int cursor = d->xToPos(event->localPos().x());
         d->control->selectWordAtPos(cursor);
         event->setAccepted(true);
     } else {
@@ -1093,10 +1096,10 @@ void QSGTextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
     }
 }
 
-void QSGTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextInput::mousePressEvent(QMouseEvent *event)
 {
     Q_D(QSGTextInput);
-    if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonPress))
+    if (d->sendMouseEventToInputContext(event))
         return;
     if(d->focusOnPress){
         bool hadActiveFocus = hasActiveFocus();
@@ -1115,40 +1118,40 @@ void QSGTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event)
     if (d->selectByMouse) {
         setKeepMouseGrab(false);
         d->selectPressed = true;
-        d->pressPos = event->pos();
+        d->pressPos = event->localPos();
     }
     bool mark = (event->modifiers() & Qt::ShiftModifier) && d->selectByMouse;
-    int cursor = d->xToPos(event->pos().x());
+    int cursor = d->xToPos(event->localPos().x());
     d->control->moveCursor(cursor, mark);
     event->setAccepted(true);
 }
 
-void QSGTextInput::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextInput::mouseMoveEvent(QMouseEvent *event)
 {
     Q_D(QSGTextInput);
-    if (d->sendMouseEventToInputContext(event, QEvent::MouseMove))
+    if (d->sendMouseEventToInputContext(event))
         return;
     if (d->selectPressed) {
-        if (qAbs(int(event->pos().x() - d->pressPos.x())) > QApplication::startDragDistance())
+        if (qAbs(int(event->localPos().x() - d->pressPos.x())) > QApplication::startDragDistance())
             setKeepMouseGrab(true);
-        moveCursorSelection(d->xToPos(event->pos().x()), d->mouseSelectionMode);
+        moveCursorSelection(d->xToPos(event->localPos().x()), d->mouseSelectionMode);
         event->setAccepted(true);
     } else {
         QSGImplicitSizeItem::mouseMoveEvent(event);
     }
 }
 
-void QSGTextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void QSGTextInput::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_D(QSGTextInput);
-    if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonRelease))
+    if (d->sendMouseEventToInputContext(event))
         return;
     if (d->selectPressed) {
         d->selectPressed = false;
         setKeepMouseGrab(false);
     }
     if (!d->showInputPanelOnFocus) { // input panel on click
-        if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) {
+        if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->localPos())) {
             if (canvas() && canvas() == QGuiApplication::activeWindow()) {
                 // ### refactor: implement virtual keyboard properly..
                 qDebug("QSGTextInput: virtual keyboard no implemented...");
@@ -1162,33 +1165,23 @@ void QSGTextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
         QSGImplicitSizeItem::mouseReleaseEvent(event);
 }
 
-bool QSGTextInputPrivate::sendMouseEventToInputContext(
-        QGraphicsSceneMouseEvent *event, QEvent::Type eventType)
+bool QSGTextInputPrivate::sendMouseEventToInputContext(QMouseEvent *event)
 {
 #if !defined QT_NO_IM
-    if (event->widget() && control->composeMode()) {
-        int tmp_cursor = xToPos(event->pos().x());
+    if (control->composeMode()) {
+        int tmp_cursor = xToPos(event->localPos().x());
         int mousePos = tmp_cursor - control->cursor();
         if (mousePos < 0 || mousePos > control->preeditAreaText().length()) {
             mousePos = -1;
             // don't send move events outside the preedit area
-            if (eventType == QEvent::MouseMove)
+            if (event->type() == QEvent::MouseMove)
                 return true;
         }
 
-        QInputContext *qic = event->widget()->inputContext();
-        if (qic) {
-            QMouseEvent mouseEvent(
-                    eventType,
-                    event->widget()->mapFromGlobal(event->screenPos()),
-                    event->screenPos(),
-                    event->button(),
-                    event->buttons(),
-                    event->modifiers());
+        QPlatformInputContext *ic = QGuiApplicationPrivate::platformIntegration()->inputContext();
+        if (ic)
             // may be causing reset() in some input methods
-            qic->mouseHandler(mousePos, &mouseEvent);
-            event->setAccepted(mouseEvent.isAccepted());
-        }
+            ic->mouseHandler(mousePos, event);
         if (!control->preeditAreaText().isEmpty())
             return true;
     }
@@ -1216,10 +1209,10 @@ bool QSGTextInput::event(QEvent* ev)
         case QEvent::KeyPress:
         case QEvent::KeyRelease://###Should the control be doing anything with release?
         case QEvent::InputMethod:
-        case QEvent::GraphicsSceneMousePress:
-        case QEvent::GraphicsSceneMouseMove:
-        case QEvent::GraphicsSceneMouseRelease:
-        case QEvent::GraphicsSceneMouseDoubleClick:
+        case QEvent::MouseButtonPress:
+        case QEvent::MouseMove:
+        case QEvent::MouseButtonRelease:
+        case QEvent::MouseButtonDblClick:
             break;
         default:
             handled = d->control->processEvent(ev);
index f5ac50e..6addc94 100644 (file)
@@ -249,10 +249,10 @@ protected:
     virtual void geometryChanged(const QRectF &newGeometry,
                                  const QRectF &oldGeometry);
 
-    void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
+    void mouseDoubleClickEvent(QMouseEvent *event);
     bool sceneEvent(QEvent *event);
     void keyPressEvent(QKeyEvent* ev);
     void inputMethodEvent(QInputMethodEvent *);
index 0d1f21b..49680ce 100644 (file)
@@ -121,7 +121,7 @@ public:
     bool setHAlign(QSGTextInput::HAlignment, bool forceAlign = false);
     void mirrorChange();
     int calculateTextWidth();
-    bool sendMouseEventToInputContext(QGraphicsSceneMouseEvent *event, QEvent::Type eventType);
+    bool sendMouseEventToInputContext(QMouseEvent *event);
     void updateInputMethodHints();
     void hideCursor();
     void showCursor();