summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/multitouch/knobs/knob.cpp14
-rw-r--r--src/corelib/kernel/qcoreevent.cpp3
-rw-r--r--src/corelib/kernel/qcoreevent.h7
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp5
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp45
-rw-r--r--src/gui/graphicsview/qgraphicsscene_p.h10
-rw-r--r--src/gui/graphicsview/qgraphicssceneevent.cpp402
-rw-r--r--src/gui/graphicsview/qgraphicssceneevent.h83
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp77
-rw-r--r--src/gui/graphicsview/qgraphicsview_p.h5
-rw-r--r--src/gui/kernel/qapplication.cpp36
-rw-r--r--src/gui/kernel/qapplication_win.cpp22
-rw-r--r--src/gui/kernel/qevent.cpp242
-rw-r--r--src/gui/kernel/qevent.h73
-rw-r--r--src/gui/kernel/qevent_p.h7
-rw-r--r--src/testlib/qtesttouch.h6
-rw-r--r--tests/auto/qtouchevent/tst_qtouchevent.cpp35
17 files changed, 340 insertions, 732 deletions
diff --git a/examples/multitouch/knobs/knob.cpp b/examples/multitouch/knobs/knob.cpp
index d568167..b62d5b8 100644
--- a/examples/multitouch/knobs/knob.cpp
+++ b/examples/multitouch/knobs/knob.cpp
@@ -42,7 +42,7 @@
#include "knob.h"
#include <QBrush>
-#include <QGraphicsSceneTouchEvent>
+#include <QTouchEvent>
Knob::Knob()
: QGraphicsEllipseItem(-50, -50, 100, 100)
@@ -62,15 +62,15 @@ Knob::Knob()
bool Knob::sceneEvent(QEvent *event)
{
switch (event->type()) {
- case QEvent::GraphicsSceneTouchBegin:
- case QEvent::GraphicsSceneTouchUpdate:
- case QEvent::GraphicsSceneTouchEnd:
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
{
- QGraphicsSceneTouchEvent *touchEvent = static_cast<QGraphicsSceneTouchEvent *>(event);
+ QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
if (touchEvent->touchPoints().count() == 2) {
- const QGraphicsSceneTouchEvent::TouchPoint &touchPoint1 = touchEvent->touchPoints().first();
- const QGraphicsSceneTouchEvent::TouchPoint &touchPoint2 = touchEvent->touchPoints().last();
+ const QTouchEvent::TouchPoint &touchPoint1 = touchEvent->touchPoints().first();
+ const QTouchEvent::TouchPoint &touchPoint2 = touchEvent->touchPoints().last();
QLineF line1(touchPoint1.lastScenePos(), touchPoint2.lastScenePos());
QLineF line2(touchPoint1.scenePos(), touchPoint2.scenePos());
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index d28d34e..68d05ea 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -226,9 +226,6 @@ QT_BEGIN_NAMESPACE
\value TouchBegin Beginning of a sequence of touch-screen and/or track-pad events (QTouchEvent)
\value TouchUpdate Touch-screen event (QTouchEvent)
\value TouchEnd End of touch-event sequence (QTouchEvent)
- \value GraphicsSceneTouchBegin Beginning of a sequence of touch-screen and/or track-pad events in a graphics scene (QGraphicsSceneTouchEvent)
- \value GraphicsSceneTouchUpdate Touch-screen event in a graphics scene (QGraphicsSceneTouchEvent)
- \value GraphicsSceneTouchEnd End of touch-event sequence in a graphics scene (QGraphicsSceneTouchEvent)
\value Gesture A gesture has occured.
\value GraphicsSceneGesture A gesture has occured on a graphics scene.
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index feefd08..2f80db6 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -275,12 +275,9 @@ public:
TouchBegin = 194,
TouchUpdate = 195,
TouchEnd = 196,
- GraphicsSceneTouchBegin = 197,
- GraphicsSceneTouchUpdate = 198,
- GraphicsSceneTouchEnd = 199,
- Gesture = 200,
- GraphicsSceneGesture = 201,
+ Gesture = 197,
+ GraphicsSceneGesture = 198,
// 512 reserved for Qt Jambi's MetaCall event
// 513 reserved for Qt Jambi's DeleteOnMainThread event
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 97ca88e..97e2ac8 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -2232,9 +2232,8 @@ void QGraphicsItem::setAcceptsHoverEvents(bool enabled)
/*! \since 4.6
- Returns true if an item accepts touch events
- (QGraphicsSceneTouchEvent); otherwise, returns false. By default,
- items do not accept touch events.
+ Returns true if an item accepts touch events (QTouchEvent); otherwise, returns false. By
+ default, items do not accept touch events.
\sa setAcceptTouchEvents()
*/
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 291b3af..f881965 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -3796,9 +3796,9 @@ bool QGraphicsScene::event(QEvent *event)
case QEvent::GraphicsSceneHoverEnter:
case QEvent::GraphicsSceneHoverLeave:
case QEvent::GraphicsSceneHoverMove:
- case QEvent::GraphicsSceneTouchBegin:
- case QEvent::GraphicsSceneTouchUpdate:
- case QEvent::GraphicsSceneTouchEnd:
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
// Reset the under-mouse list to ensure that this event gets fresh
// item-under-mouse data. Be careful about this list; if people delete
// items from inside event handlers, this list can quickly end up
@@ -3993,10 +3993,10 @@ bool QGraphicsScene::event(QEvent *event)
d->sendGestureEvent(ev->gestures().toSet(), ev->cancelledGestures());
}
break;
- case QEvent::GraphicsSceneTouchBegin:
- case QEvent::GraphicsSceneTouchUpdate:
- case QEvent::GraphicsSceneTouchEnd:
- d->touchEventHandler(static_cast<QGraphicsSceneTouchEvent *>(event));
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
+ d->touchEventHandler(static_cast<QTouchEvent *>(event));
break;
case QEvent::Timer:
if (d->indexTimerId && static_cast<QTimerEvent *>(event)->timerId() == d->indexTimerId) {
@@ -5954,12 +5954,11 @@ void QGraphicsScenePrivate::releaseGesture(QGraphicsItem *item, int gestureId)
//###
}
-void QGraphicsScenePrivate::updateTouchPointsForItem(QGraphicsItem *item,
- QGraphicsSceneTouchEvent *touchEvent)
+void QGraphicsScenePrivate::updateTouchPointsForItem(QGraphicsItem *item, QTouchEvent *touchEvent)
{
- QList<QGraphicsSceneTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
+ QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
for (int i = 0; i < touchPoints.count(); ++i) {
- QGraphicsSceneTouchEvent::TouchPoint &touchPoint = touchPoints[i];
+ QTouchEvent::TouchPoint &touchPoint = touchPoints[i];
touchPoint.setPos(item->d_ptr->genericMapFromScene(touchPoint.scenePos(), touchEvent->widget()));
touchPoint.setStartPos(item->d_ptr->genericMapFromScene(touchPoint.startScenePos(), touchEvent->widget()));
touchPoint.setLastPos(item->d_ptr->genericMapFromScene(touchPoint.lastScenePos(), touchEvent->widget()));
@@ -5975,7 +5974,7 @@ int QGraphicsScenePrivate::findClosestTouchPointId(const QPointF &scenePos)
{
int closestTouchPointId = -1;
qreal closestDistance = qreal(0.);
- foreach (const QGraphicsSceneTouchEvent::TouchPoint &touchPoint, sceneCurrentTouchPoints) {
+ foreach (const QTouchEvent::TouchPoint &touchPoint, sceneCurrentTouchPoints) {
qreal distance = QLineF(scenePos, touchPoint.scenePos()).length();
if (closestTouchPointId == -1|| distance < closestDistance) {
closestTouchPointId = touchPoint.id();
@@ -5985,13 +5984,13 @@ int QGraphicsScenePrivate::findClosestTouchPointId(const QPointF &scenePos)
return closestTouchPointId;
}
-void QGraphicsScenePrivate::touchEventHandler(QGraphicsSceneTouchEvent *sceneTouchEvent)
+void QGraphicsScenePrivate::touchEventHandler(QTouchEvent *sceneTouchEvent)
{
- typedef QPair<Qt::TouchPointStates, QList<QGraphicsSceneTouchEvent::TouchPoint> > StatesAndTouchPoints;
+ typedef QPair<Qt::TouchPointStates, QList<QTouchEvent::TouchPoint> > StatesAndTouchPoints;
QHash<QGraphicsItem *, StatesAndTouchPoints> itemsNeedingEvents;
for (int i = 0; i < sceneTouchEvent->touchPoints().count(); ++i) {
- const QGraphicsSceneTouchEvent::TouchPoint &touchPoint = sceneTouchEvent->touchPoints().at(i);
+ const QTouchEvent::TouchPoint &touchPoint = sceneTouchEvent->touchPoints().at(i);
// update state
QGraphicsItem *item = 0;
@@ -6049,29 +6048,29 @@ void QGraphicsScenePrivate::touchEventHandler(QGraphicsSceneTouchEvent *sceneTou
switch (it.value().first) {
case Qt::TouchPointPressed:
// all touch points have pressed state
- eventType = QEvent::GraphicsSceneTouchBegin;
+ eventType = QEvent::TouchBegin;
break;
case Qt::TouchPointReleased:
// all touch points have released state
- eventType = QEvent::GraphicsSceneTouchEnd;
+ eventType = QEvent::TouchEnd;
break;
case Qt::TouchPointStationary:
// don't send the event if nothing changed
continue;
default:
// all other combinations
- eventType = QEvent::GraphicsSceneTouchUpdate;
+ eventType = QEvent::TouchUpdate;
break;
}
- QGraphicsSceneTouchEvent touchEvent(eventType);
+ QTouchEvent touchEvent(eventType);
touchEvent.setWidget(sceneTouchEvent->widget());
touchEvent.setModifiers(sceneTouchEvent->modifiers());
touchEvent.setTouchPointStates(it.value().first);
touchEvent.setTouchPoints(it.value().second);
switch (touchEvent.type()) {
- case QEvent::GraphicsSceneTouchBegin:
+ case QEvent::TouchBegin:
{
// if the TouchBegin handler recurses, we assume that means the event
// has been implicitly accepted and continue to send touch events
@@ -6093,12 +6092,12 @@ void QGraphicsScenePrivate::touchEventHandler(QGraphicsSceneTouchEvent *sceneTou
sceneTouchEvent->setAccepted(acceptSceneTouchEvent);
}
-bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QGraphicsSceneTouchEvent *touchEvent)
+bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEvent *touchEvent)
{
Q_Q(QGraphicsScene);
if (cachedItemsUnderMouse.isEmpty() || cachedItemsUnderMouse.first() != origin) {
- const QGraphicsSceneTouchEvent::TouchPoint &firstTouchPoint = touchEvent->touchPoints().first();
+ const QTouchEvent::TouchPoint &firstTouchPoint = touchEvent->touchPoints().first();
cachedItemsUnderMouse = itemsAtPosition(firstTouchPoint.screenPos().toPoint(),
firstTouchPoint.scenePos(),
touchEvent->widget());
@@ -6136,7 +6135,7 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QGraphics
if (res && eventAccepted) {
// the first item to accept the TouchBegin gets an implicit grab.
for (int i = 0; i < touchEvent->touchPoints().count(); ++i) {
- const QGraphicsSceneTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().at(i);
+ const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().at(i);
itemForTouchPointId[touchPoint.id()] = item;
}
break;
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index bd312a1..6983d12 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -35,7 +35,7 @@
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
+** $QT_END_LICENSE$'
**
****************************************************************************/
@@ -304,12 +304,12 @@ public:
void releaseGesture(QGraphicsItem *item, int gestureId);
void sendGestureEvent(const QSet<QGesture*> &gestures, const QSet<QString> &cancelled);
- QMap<int, QGraphicsSceneTouchEvent::TouchPoint> sceneCurrentTouchPoints;
+ QMap<int, QTouchEvent::TouchPoint> sceneCurrentTouchPoints;
QHash<int, QGraphicsItem *> itemForTouchPointId;
- static void updateTouchPointsForItem(QGraphicsItem *item, QGraphicsSceneTouchEvent *touchEvent);
+ static void updateTouchPointsForItem(QGraphicsItem *item, QTouchEvent *touchEvent);
int findClosestTouchPointId(const QPointF &scenePos);
- void touchEventHandler(QGraphicsSceneTouchEvent *touchEvent);
- bool sendTouchBeginEvent(QGraphicsItem *item, QGraphicsSceneTouchEvent *touchEvent);
+ void touchEventHandler(QTouchEvent *touchEvent);
+ bool sendTouchBeginEvent(QGraphicsItem *item, QTouchEvent *touchEvent);
};
QT_END_NAMESPACE
diff --git a/src/gui/graphicsview/qgraphicssceneevent.cpp b/src/gui/graphicsview/qgraphicssceneevent.cpp
index 1be8d0d..bf82dd4 100644
--- a/src/gui/graphicsview/qgraphicssceneevent.cpp
+++ b/src/gui/graphicsview/qgraphicssceneevent.cpp
@@ -257,37 +257,6 @@
QGraphicsItem::ItemPositionHasChanged
*/
-/*!
- \class QGraphicsSceneTouchEvent
- \brief The QGraphicsSceneTouchEvent class provides touch events in the graphics view framework.
- \since 4.6
- \ingroup multimedia
- \ingroup graphicsview-api
-
- When a QGraphicsView receives a QTouchEvent, it translates it to a
- QGraphicsSceneTouchEvent. The event is then forwarded to the
- QGraphicsScene associated with the view.
-
- The touchPoints() function returns a list of touch points for the
- event. In addition to containing the item, scene, and screen
- coordinates, each touch point also contains its starting and
- previous coordinates.
-
- \sa QTouchEvent
-*/
-
-/*!
- \class QGraphicsSceneTouchEvent::TouchPoint
- \brief The QGraphicsSceneTouchEvent::TouchPoint class represents a single touch point in a QGraphicsSceneTouchEvent.
- \since 4.6
- \ingroup multimedia
- \ingroup graphicsview-api
-
- Each touch point in a QGraphicsSceneTouchEvent has an id() and
- state() in addition to current, starting, and previous coordinates
- for the touch point in item, scene, and screen coordinates.
-*/
-
#include "qgraphicssceneevent.h"
#ifndef QT_NO_GRAPHICSVIEW
@@ -1952,377 +1921,6 @@ void QGraphicsSceneGestureEvent::accept(const QString &type)
g->accept();
}
-class QGraphicsSceneTouchEventPrivate : public QGraphicsSceneEventPrivate
-{
- Q_DECLARE_PUBLIC(QGraphicsSceneTouchEvent)
-public:
- inline QGraphicsSceneTouchEventPrivate()
- : modifiers(Qt::NoModifier), touchPointStates()
- { }
-
- Qt::KeyboardModifiers modifiers;
- Qt::TouchPointStates touchPointStates;
- QList<QGraphicsSceneTouchEvent::TouchPoint> touchPoints;
-};
-
-/*!
- \internal
-
- Constructs a generic QGraphicsSceneTouchEvent of type \a type.
-*/
-QGraphicsSceneTouchEvent::QGraphicsSceneTouchEvent(Type type)
- : QGraphicsSceneEvent(*new QGraphicsSceneTouchEventPrivate, type)
-{ }
-
-/*!
- Destroys the QGraphicsSceneTouchEvent.
-*/
-QGraphicsSceneTouchEvent::~QGraphicsSceneTouchEvent()
-{ }
-
-/*!
- Returns the keyboard modifiers in use at the time the event was
- sent.
-*/
-Qt::KeyboardModifiers QGraphicsSceneTouchEvent::modifiers() const
-{
- Q_D(const QGraphicsSceneTouchEvent);
- return d->modifiers;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::setModifiers(Qt::KeyboardModifiers modifiers)
-{
- Q_D(QGraphicsSceneTouchEvent);
- d->modifiers = modifiers;
-}
-
-/*!
- Returns a bitwise OR of all of the touch point states at the time
- the event was sent.
-*/
-Qt::TouchPointStates QGraphicsSceneTouchEvent::touchPointStates() const
-{
- Q_D(const QGraphicsSceneTouchEvent);
- return d->touchPointStates;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::setTouchPointStates(Qt::TouchPointStates touchPointStates)
-{
- Q_D(QGraphicsSceneTouchEvent);
- d->touchPointStates = touchPointStates;
-}
-
-/*!
- Returns the list of touch points for this event.
-
- \sa QGraphicsSceneTouchEvent::TouchPoint
-*/
-const QList<QGraphicsSceneTouchEvent::TouchPoint> &QGraphicsSceneTouchEvent::touchPoints() const
-{
- Q_D(const QGraphicsSceneTouchEvent);
- return d->touchPoints;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::setTouchPoints(const QList<QGraphicsSceneTouchEvent::TouchPoint> &touchPoints)
-{
- Q_D(QGraphicsSceneTouchEvent);
- d->touchPoints = touchPoints;
-}
-
-/*! \internal */
-QGraphicsSceneTouchEvent::TouchPoint::TouchPoint(int id)
- : d(new QTouchEventTouchPointPrivate(id))
-{ }
-
-/*! \internal */
-QGraphicsSceneTouchEvent::TouchPoint::TouchPoint(const QGraphicsSceneTouchEvent::TouchPoint &other)
- : d(other.d)
-{
- d->ref.ref();
-}
-
-/*! \internal */
-QGraphicsSceneTouchEvent::TouchPoint::TouchPoint(QTouchEventTouchPointPrivate *dd)
- : d(dd)
-{
- d->ref.ref();
-}
-
-/*! \internal */
-QGraphicsSceneTouchEvent::TouchPoint::~TouchPoint()
-{
- if (!d->ref.deref())
- delete d;
-}
-
-/*!
- Returns the id number of this touch point.
-
- Id numbers are globally sequential, starting at zero, meaning the
- first touch point in the application has id 0, the second has id 1,
- and so on.
-*/
-int QGraphicsSceneTouchEvent::TouchPoint::id() const
-{
- return d->id;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setId(int id)
-{
- if (!d->ref == 1)
- d = d->detach();
- d->id = id;
-}
-
-/*!
- Returns the current state of this touch point.
-*/
-Qt::TouchPointState QGraphicsSceneTouchEvent::TouchPoint::state() const
-{
- return d->state;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setState(Qt::TouchPointState state)
-{
- if (d->ref != 1)
- d = d->detach();
- d->state = state;
-}
-
-/*!
- Returns the position of this touch point, relative to the widget
- or item that received the event.
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::pos() const
-{
- return d->pos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setPos(const QPointF &pos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->pos = pos;
-}
-
-/*!
- Returns the starting position of this touch point, relative to the
- widget that received the event.
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::startPos() const
-{
- return d->startPos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setStartPos(const QPointF &startPos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->startPos = startPos;
-}
-
-/*!
- Returns the position of this touch point from the previous touch
- event, relative to the widget that received the event.
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::lastPos() const
-{
- return d->lastPos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setLastPos(const QPointF &lastPos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->lastPos = lastPos;
-}
-
-/*!
- Returns the current position of this touch point in scene coordinates.
-
- \sa pos(), screenPos()
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::scenePos() const
-{
- return d->scenePos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setScenePos(const QPointF &scenePos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->scenePos = scenePos;
-}
-
-/*!
- Returns the starting position of this touch point in scene coordinates.
-
- \sa startPos(), startScreenPos()
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::startScenePos() const
-{
- return d->startScenePos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setStartScenePos(const QPointF &startScenePos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->startScenePos = startScenePos;
-}
-
-/*!
- Returns the previous position of this touch point in scene coordinates.
-
- \sa lastPos(), lastScreenPos()
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::lastScenePos() const
-{
- return d->lastScenePos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setLastScenePos(const QPointF &lastScenePos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->lastScenePos = lastScenePos;
-}
-
-/*!
- Returns the screen position of this touch point.
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::screenPos() const
-{
- return d->screenPos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setScreenPos(const QPointF &screenPos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->screenPos = screenPos;
-}
-
-/*!
- Returns the starting screen position of this touch point.
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::startScreenPos() const
-{
- return d->startScreenPos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setStartScreenPos(const QPointF &startScreenPos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->startScreenPos = startScreenPos;
-}
-
-/*!
- Returns the screen position of this touch point from the previous
- touch event.
-*/
-QPointF QGraphicsSceneTouchEvent::TouchPoint::lastScreenPos() const
-{
- return d->lastScreenPos;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setLastScreenPos(const QPointF &lastScreenPos)
-{
- if (d->ref != 1)
- d = d->detach();
- d->lastScreenPos = lastScreenPos;
-}
-
-/*!
- Returns the rect for this touch point.
-*/
-QRectF QGraphicsSceneTouchEvent::TouchPoint::rect() const
-{
- return d->rect;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setRect(const QRectF &rect)
-{
- if (d->ref != 1)
- d = d->detach();
- d->rect = rect;
-}
-
-/*!
- Returns the rect of this touch point in scene coordinates.
-*/
-QRectF QGraphicsSceneTouchEvent::TouchPoint::sceneRect() const
-{
- return d->sceneRect;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setSceneRect(const QRectF &sceneRect)
-{
- if (d->ref != 1)
- d = d->detach();
- d->sceneRect = sceneRect;
-}
-
-/*!
- Returns the rect of this touch point in screen coordinates.
-*/
-QRectF QGraphicsSceneTouchEvent::TouchPoint::screenRect() const
-{
- return d->screenRect;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setScreenRect(const QRectF &screenRect)
-{
- if (d->ref != 1)
- d = d->detach();
- d->screenRect = screenRect;
-}
-
-/*!
- Returns the pressure of this touch point. The return value is in
- the range 0.0 to 1.0.
-*/
-qreal QGraphicsSceneTouchEvent::TouchPoint::pressure() const
-{
- return d->pressure;
-}
-
-/*! \internal */
-void QGraphicsSceneTouchEvent::TouchPoint::setPressure(qreal pressure)
-{
- if (d->ref != 1)
- d = d->detach();
- d->pressure = pressure;
-}
-
-/*! \internal */
-QGraphicsSceneTouchEvent::TouchPoint &QGraphicsSceneTouchEvent::TouchPoint::operator=(const QGraphicsSceneTouchEvent::TouchPoint &other)
-{
- other.d->ref.ref();
- if (!d->ref.deref())
- delete d;
- d = other.d;
- return *this;
-}
-
QT_END_NAMESPACE
#endif // QT_NO_GRAPHICSVIEW
diff --git a/src/gui/graphicsview/qgraphicssceneevent.h b/src/gui/graphicsview/qgraphicssceneevent.h
index 3eb5cce..93a7177 100644
--- a/src/gui/graphicsview/qgraphicssceneevent.h
+++ b/src/gui/graphicsview/qgraphicssceneevent.h
@@ -42,7 +42,7 @@
#ifndef QGRAPHICSSCENEEVENT_H
#define QGRAPHICSSCENEEVENT_H
-#include <QtGui/qevent.h>
+#include <QtCore/qcoreevent.h>
#include <QtCore/qpoint.h>
#include <QtCore/qrect.h>
#include <QtGui/qpolygon.h>
@@ -60,7 +60,6 @@ QT_MODULE(Gui)
class QMimeData;
class QPointF;
class QSizeF;
-class QRectF;
class QWidget;
class QGraphicsSceneEventPrivate;
@@ -350,86 +349,6 @@ protected:
QSet<QString> m_cancelledGestures;
};
-class QGraphicsSceneTouchEventPrivate;
-class Q_GUI_EXPORT QGraphicsSceneTouchEvent : public QGraphicsSceneEvent
-{
-public:
- class Q_GUI_EXPORT TouchPoint
- {
- public:
- TouchPoint(int id = -1);
- TouchPoint(const TouchPoint &other);
- ~TouchPoint();
-
- int id() const;
- void setId(int id);
-
- Qt::TouchPointState state() const;
- void setState(Qt::TouchPointState state);
-
- QPointF pos() const;
- void setPos(const QPointF &pos);
-
- QPointF startPos() const;
- void setStartPos(const QPointF &startPos);
-
- QPointF lastPos() const;
- void setLastPos(const QPointF &lastPos);
-
- QPointF scenePos() const;
- void setScenePos(const QPointF &scenePos);
-
- QPointF startScenePos() const;
- void setStartScenePos(const QPointF &startScenePos);
-
- QPointF lastScenePos() const;
- void setLastScenePos(const QPointF &lastScenePos);
-
- QPointF screenPos() const;
- void setScreenPos(const QPointF &screenPos);
-
- QPointF startScreenPos() const;
- void setStartScreenPos(const QPointF &startScreenPos);
-
- QPointF lastScreenPos() const;
- void setLastScreenPos(const QPointF &lastScreenPos);
-
- QRectF rect() const;
- void setRect(const QRectF &rect);
-
- QRectF sceneRect() const;
- void setSceneRect(const QRectF &sceneRect);
-
- QRectF screenRect() const;
- void setScreenRect(const QRectF &screenRect);
-
- qreal pressure() const;
- void setPressure(qreal pressure);
-
- TouchPoint &operator=(const TouchPoint &other);
-
- private:
- TouchPoint(QTouchEventTouchPointPrivate *dd);
- QTouchEventTouchPointPrivate *d;
- friend class QGraphicsViewPrivate;
- };
-
- QGraphicsSceneTouchEvent(Type type = None);
- ~QGraphicsSceneTouchEvent();
-
- Qt::KeyboardModifiers modifiers() const;
- void setModifiers(Qt::KeyboardModifiers modifiers);
-
- Qt::TouchPointStates touchPointStates() const;
- void setTouchPointStates(Qt::TouchPointStates touchPointStates);
-
- const QList<QGraphicsSceneTouchEvent::TouchPoint> &touchPoints() const;
- void setTouchPoints(const QList<QGraphicsSceneTouchEvent::TouchPoint> &touchPoints);
-
-private:
- Q_DECLARE_PRIVATE(QGraphicsSceneTouchEvent);
-};
-
#endif // QT_NO_GRAPHICSVIEW
QT_END_NAMESPACE
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 521ef7f..ab7d7ab 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -297,34 +297,21 @@ inline int q_round_bound(qreal d) //### (int)(qreal) INT_MAX != INT_MAX for sing
return d >= 0.0 ? int(d + 0.5) : int(d - int(d-1) + 0.5) + int(d-1);
}
-void QGraphicsViewPrivate::convertTouchEventToGraphicsSceneTouchEvent(QGraphicsViewPrivate *d,
- QTouchEvent *originalEvent,
- QGraphicsSceneTouchEvent *touchEvent)
-{
- QList<QTouchEvent::TouchPoint> originalTouchPoints = originalEvent->touchPoints();
- QList<QGraphicsSceneTouchEvent::TouchPoint> touchPoints;
- for (int i = 0; i < originalTouchPoints.count(); ++i) {
- QGraphicsSceneTouchEvent::TouchPoint touchPoint =
- QTouchEventTouchPointPrivate::get(originalTouchPoints.at(i));
- // the scene will set the item local pos, startPos, lastPos, and size before delivering to
- // an item, but for now those functions are returning the view's local coordinates (since
- // we're reusing the d-pointer from the orignalTouchPoint)
- touchPoint.setScenePos(d->mapToScene(touchPoint.pos()));
+void QGraphicsViewPrivate::translateTouchEvent(QGraphicsViewPrivate *d, QTouchEvent *touchEvent)
+{
+ QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
+ for (int i = 0; i < touchPoints.count(); ++i) {
+ QTouchEvent::TouchPoint &touchPoint = touchPoints[i];
+ // the scene will set the item local pos, startPos, lastPos, and rect before delivering to
+ // an item, but for now those functions are returning the view's local coordinates
+ touchPoint.setSceneRect(d->mapToScene(touchPoint.rect()));
touchPoint.setStartScenePos(d->mapToScene(touchPoint.startPos()));
touchPoint.setLastScenePos(d->mapToScene(touchPoint.lastPos()));
-#ifdef Q_CC_GNU
-# warning FIXME
-#endif
- // ### touchPoint.setSceneSize(d->mapToScene(touchPoint.screenSize()));
-
- // screenPos, startScreenPos, lastScreenPos, and screenSize are already set from the
- // originalTouchPoint
- touchPoints.append(touchPoint);
+ // screenPos, startScreenPos, lastScreenPos, and screenRect are already set
}
touchEvent->setTouchPoints(touchPoints);
- touchEvent->setModifiers(originalEvent->modifiers());
}
/*!
@@ -2768,23 +2755,10 @@ bool QGraphicsView::viewportEvent(QEvent *event)
if (d->scene && d->sceneInteractionAllowed) {
// Convert and deliver the touch event to the scene.
- QEvent::Type eventType;
- switch(event->type()) {
- case QEvent::TouchUpdate:
- eventType = QEvent::GraphicsSceneTouchUpdate;
- break;
- case QEvent::TouchBegin:
- eventType = QEvent::GraphicsSceneTouchBegin;
- break;
- default:
- eventType = QEvent::GraphicsSceneTouchEnd;
- }
- QGraphicsSceneTouchEvent touchEvent(eventType);
- touchEvent.setWidget(viewport());
- QGraphicsViewPrivate::convertTouchEventToGraphicsSceneTouchEvent(d, static_cast<QTouchEvent *>(event), &touchEvent);
- touchEvent.setAccepted(false);
- QApplication::sendEvent(d->scene, &touchEvent);
- event->setAccepted(touchEvent.isAccepted());
+ QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
+ touchEvent->setWidget(viewport());
+ QGraphicsViewPrivate::translateTouchEvent(d, touchEvent);
+ (void) QApplication::sendEvent(d->scene, touchEvent);
}
return true;
@@ -3719,6 +3693,31 @@ QPointF QGraphicsViewPrivate::mapToScene(const QPointF &point) const
return identityMatrix ? p : matrix.inverted().map(p);
}
+QRectF QGraphicsViewPrivate::mapToScene(const QRectF &rect) const
+{
+ QPointF scrollOffset(horizontalScroll(), verticalScroll());
+ QPointF tl = scrollOffset + rect.topLeft();
+ QPointF tr = scrollOffset + rect.topRight();
+ QPointF br = scrollOffset + rect.bottomRight();
+ QPointF bl = scrollOffset + rect.bottomLeft();
+
+ QPolygonF poly;
+ poly.resize(4);
+ if (!identityMatrix) {
+ QTransform x = matrix.inverted();
+ poly[0] = x.map(tl);
+ poly[1] = x.map(tr);
+ poly[2] = x.map(br);
+ poly[3] = x.map(bl);
+ } else {
+ poly[0] = tl;
+ poly[1] = tr;
+ poly[2] = br;
+ poly[3] = bl;
+ }
+ return poly.boundingRect();
+}
+
QT_END_NAMESPACE
#include "moc_qgraphicsview.cpp"
diff --git a/src/gui/graphicsview/qgraphicsview_p.h b/src/gui/graphicsview/qgraphicsview_p.h
index a54ccf0..6138d0a 100644
--- a/src/gui/graphicsview/qgraphicsview_p.h
+++ b/src/gui/graphicsview/qgraphicsview_p.h
@@ -179,9 +179,8 @@ public:
const QRegion &exposedRegion) const;
QPointF mapToScene(const QPointF &point) const;
- static void convertTouchEventToGraphicsSceneTouchEvent(QGraphicsViewPrivate *d,
- QTouchEvent *originalEvent,
- QGraphicsSceneTouchEvent *touchEvent);
+ QRectF mapToScene(const QRectF &rect) const;
+ static void translateTouchEvent(QGraphicsViewPrivate *d, QTouchEvent *touchEvent);
};
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 7cb1ac1..c072c4a 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -4052,6 +4052,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
while (widget) {
// first, try to deliver the touch event
bool acceptTouchEvents = widget->testAttribute(Qt::WA_AcceptTouchEvents);
+ touchEvent->setWidget(widget);
touchEvent->setAccepted(acceptTouchEvents);
res = acceptTouchEvents && d->notify_helper(widget, touchEvent);
eventAccepted = touchEvent->isAccepted();
@@ -5258,10 +5259,15 @@ void QApplicationPrivate::updateTouchPointsForWidget(QWidget *widget, QTouchEven
QTouchEvent::TouchPoint &touchPoint = touchEvent->_touchPoints[i];
// preserve the sub-pixel resolution
- const QPointF delta = touchPoint.globalPos() - touchPoint.globalPos().toPoint();
- touchPoint.setPos(widget->mapFromGlobal(touchPoint.globalPos().toPoint()) + delta);
- touchPoint.setStartPos(widget->mapFromGlobal(touchPoint.startGlobalPos().toPoint()) + delta);
- touchPoint.setLastPos(widget->mapFromGlobal(touchPoint.lastGlobalPos().toPoint()) + delta);
+ QRectF rect = touchPoint.screenRect();
+ const QPointF screenPos = rect.center();
+ const QPointF delta = screenPos - screenPos.toPoint();
+
+ rect.moveCenter(widget->mapFromGlobal(screenPos.toPoint()) + delta);
+ touchPoint.setRect(rect);
+
+ touchPoint.setStartPos(widget->mapFromGlobal(touchPoint.startScreenPos().toPoint()) + delta);
+ touchPoint.setLastPos(widget->mapFromGlobal(touchPoint.lastScreenPos().toPoint()) + delta);
}
}
@@ -5281,12 +5287,12 @@ void QApplicationPrivate::cleanupMultitouch()
appCurrentTouchPoints.clear();
}
-int QApplicationPrivate::findClosestTouchPointId(const QPointF &globalPos)
+int QApplicationPrivate::findClosestTouchPointId(const QPointF &screenPos)
{
int closestTouchPointId = -1;
qreal closestDistance = qreal(0.);
foreach (const QTouchEvent::TouchPoint &touchPoint, appCurrentTouchPoints) {
- qreal distance = QLineF(globalPos, touchPoint.globalPos()).length();
+ qreal distance = QLineF(screenPos, touchPoint.screenPos()).length();
if (closestTouchPointId == -1 || distance < closestDistance) {
closestTouchPointId = touchPoint.id();
closestDistance = distance;
@@ -5314,22 +5320,22 @@ bool QApplicationPrivate::translateRawTouchEvent(QWidget *window,
{
// determine which widget this event will go to
if (!window)
- window = q->topLevelAt(touchPoint.globalPos().toPoint());
+ window = q->topLevelAt(touchPoint.screenPos().toPoint());
if (!window)
continue;
- widget = window->childAt(window->mapFromGlobal(touchPoint.globalPos().toPoint()));
+ widget = window->childAt(window->mapFromGlobal(touchPoint.screenPos().toPoint()));
if (!widget)
widget = window;
- int closestTouchPointId = d->findClosestTouchPointId(touchPoint.globalPos());
+ int closestTouchPointId = d->findClosestTouchPointId(touchPoint.screenPos());
QWidget *closestWidget = d->widgetForTouchPointId.value(closestTouchPointId);
if (closestWidget
&& (widget->isAncestorOf(closestWidget) || closestWidget->isAncestorOf(widget))) {
widget = closestWidget;
}
d->widgetForTouchPointId[touchPoint.id()] = widget;
- touchPoint.setStartGlobalPos(touchPoint.globalPos());
- touchPoint.setLastGlobalPos(touchPoint.globalPos());
+ touchPoint.setStartScreenPos(touchPoint.screenPos());
+ touchPoint.setLastScreenPos(touchPoint.screenPos());
d->appCurrentTouchPoints.insert(touchPoint.id(), touchPoint);
break;
}
@@ -5340,8 +5346,8 @@ bool QApplicationPrivate::translateRawTouchEvent(QWidget *window,
continue;
QTouchEvent::TouchPoint previousTouchPoint = d->appCurrentTouchPoints.take(touchPoint.id());
- touchPoint.setStartGlobalPos(previousTouchPoint.startGlobalPos());
- touchPoint.setLastGlobalPos(previousTouchPoint.globalPos());
+ touchPoint.setStartScreenPos(previousTouchPoint.startScreenPos());
+ touchPoint.setLastScreenPos(previousTouchPoint.screenPos());
break;
}
default:
@@ -5350,8 +5356,8 @@ bool QApplicationPrivate::translateRawTouchEvent(QWidget *window,
continue;
Q_ASSERT(d->appCurrentTouchPoints.contains(touchPoint.id()));
QTouchEvent::TouchPoint previousTouchPoint = d->appCurrentTouchPoints.value(touchPoint.id());
- touchPoint.setStartGlobalPos(previousTouchPoint.startGlobalPos());
- touchPoint.setLastGlobalPos(previousTouchPoint.globalPos());
+ touchPoint.setStartScreenPos(previousTouchPoint.startScreenPos());
+ touchPoint.setLastScreenPos(previousTouchPoint.screenPos());
d->appCurrentTouchPoints[touchPoint.id()] = touchPoint;
break;
}
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 0c5945d..4ecf299 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -4040,27 +4040,27 @@ bool QApplicationPrivate::translateTouchEvent(const MSG &msg)
QTouchEvent::TouchPoint touchPoint(touchPointID);
// update state
- QPointF globalPos(qreal(touchInput.x) / qreal(100.), qreal(touchInput.y) / qreal(100.));
- QRectF globalRect;
+ QPointF screenPos(qreal(touchInput.x) / qreal(100.), qreal(touchInput.y) / qreal(100.));
+ QRectF screenRect;
if (touchInput.dwMask & TOUCHINPUTMASKF_CONTACTAREA)
- globalRect.setSize(QSizeF(qreal(touchInput.cxContact) / qreal(100.),
+ screenRect.setSize(QSizeF(qreal(touchInput.cxContact) / qreal(100.),
qreal(touchInput.cyContact) / qreal(100.)));
- globalRect.moveCenter(globalPos);
+ screenRect.moveCenter(screenPos);
if (touchInput.dwFlags & TOUCHEVENTF_DOWN) {
touchPoint.setState(Qt::TouchPointPressed);
- touchPoint.setGlobalPos(globalPos);
- touchPoint.setRect(globalRect);
+ touchPoint.setScreenPos(screenPos);
+ touchPoint.setRect(screenRect);
} else if (touchInput.dwFlags & TOUCHEVENTF_UP) {
touchPoint.setState(Qt::TouchPointReleased);
- touchPoint.setGlobalPos(globalPos);
- touchPoint.setRect(globalRect);
+ touchPoint.setScreenPos(screenPos);
+ touchPoint.setRect(screenRect);
} else {
- touchPoint.setState(globalPos == touchPoint.globalPos()
+ touchPoint.setState(screenPos == touchPoint.screenPos()
? Qt::TouchPointStationary
: Qt::TouchPointMoved);
- touchPoint.setGlobalPos(globalPos);
- touchPoint.setRect(globalRect);
+ touchPoint.setScreenPos(screenPos);
+ touchPoint.setRect(screenRect);
}
touchPoints.append(touchPoint);
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 7a86dbf..a55d7e2 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -85,6 +85,13 @@ QInputEvent::~QInputEvent()
\sa QApplication::keyboardModifiers()
*/
+/*! \fn void QInputEvent::setModifiers(Qt::KeyboardModifiers modifiers)
+
+ \internal
+
+ Sets the keyboard modifiers flags for this event.
+*/
+
/*!
\class QMouseEvent
\ingroup events
@@ -3744,21 +3751,34 @@ QTouchEvent::QTouchEvent(QEvent::Type type,
QTouchEvent::~QTouchEvent()
{ }
+/*! \fn QWidget *QTouchEvent::widget() const
+
+ Returns the widget on which the event occurred.
+*/
+
+
/*! \fn Qt::TouchPointStates QTouchEvent::touchPointStates() const
Returns a bitwise OR of all the touch point states for this event.
*/
-/*! \fn void QTouchEvent::setTouchPointStates(Qt::TouchPointStates touchPointStates)
+/*! \fn const QList<QTouchEvent::TouchPoint> &QTouchEvent::touchPoints() const
+
+ Returns the list of touch points contained in the touch event.
+*/
+
+/*! \fn void QTouchEvent::setWidget(QWidget *widget)
\internal
- Sets a bitwise OR of all the touch point states for this event.
+ Sets the widget for this event.
*/
-/*! \fn const QList<QTouchEvent::TouchPoint> &QTouchEvent::TouchPoints() const
+/*! \fn void QTouchEvent::setTouchPointStates(Qt::TouchPointStates touchPointStates)
- Returns the list of touch points contained in the touch event.
+ \internal
+
+ Sets a bitwise OR of all the touch point states for this event.
*/
/*! \fn void QTouchEvent::setTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints)
@@ -3808,14 +3828,6 @@ int QTouchEvent::TouchPoint::id() const
return d->id;
}
-/*! \internal */
-void QTouchEvent::TouchPoint::setId(int id)
-{
- if (d->ref != 1)
- d = d->detach();
- d->id = id;
-}
-
/*!
Returns the current state of this touch point.
*/
@@ -3824,29 +3836,29 @@ Qt::TouchPointState QTouchEvent::TouchPoint::state() const
return d->state;
}
-/*! \internal */
-void QTouchEvent::TouchPoint::setState(Qt::TouchPointState state)
-{
- if (d->ref != 1)
- d = d->detach();
- d->state = state;
-}
-
/*!
Returns the position of this touch point, relative to the widget
or item that received the event.
*/
QPointF QTouchEvent::TouchPoint::pos() const
{
- return d->pos;
+ return d->rect.center();
}
-/*! \internal */
-void QTouchEvent::TouchPoint::setPos(const QPointF &pos)
+/*!
+ Returns the scene position of this touch point.
+*/
+QPointF QTouchEvent::TouchPoint::scenePos() const
{
- if (d->ref != 1)
- d = d->detach();
- d->pos = pos;
+ return d->sceneRect.center();
+}
+
+/*!
+ Returns the screen position of this touch point.
+*/
+QPointF QTouchEvent::TouchPoint::screenPos() const
+{
+ return d->screenRect.center();
}
/*!
@@ -3858,12 +3870,20 @@ QPointF QTouchEvent::TouchPoint::startPos() const
return d->startPos;
}
-/*! \internal */
-void QTouchEvent::TouchPoint::setStartPos(const QPointF &startPos)
+/*!
+ Returns the starting scene position of this touch point.
+*/
+QPointF QTouchEvent::TouchPoint::startScenePos() const
{
- if (d->ref != 1)
- d = d->detach();
- d->startPos = startPos;
+ return d->startScenePos;
+}
+
+/*!
+ Returns the starting screen position of this touch point.
+*/
+QPointF QTouchEvent::TouchPoint::startScreenPos() const
+{
+ return d->startScreenPos;
}
/*!
@@ -3875,70 +3895,144 @@ QPointF QTouchEvent::TouchPoint::lastPos() const
return d->lastPos;
}
+/*!
+ Returns the scene position of this touch point from the previous
+ touch event.
+*/
+QPointF QTouchEvent::TouchPoint::lastScenePos() const
+{
+ return d->lastScenePos;
+}
+
+/*!
+ Returns the screen position of this touch point from the previous
+ touch event.
+*/
+QPointF QTouchEvent::TouchPoint::lastScreenPos() const
+{
+ return d->lastScreenPos;
+}
+
+/*!
+ Returns the rect for this touch point. The rect is centered around the point returned by pos().
+ Note this function returns an empty rect if the device does not report touch point sizes.
+*/
+QRectF QTouchEvent::TouchPoint::rect() const
+{
+ return d->screenRect;
+}
+
+/*!
+ Returns the rect for this touch point in scene coordinates.
+*/
+QRectF QTouchEvent::TouchPoint::sceneRect() const
+{
+ return d->sceneRect;
+}
+
+/*!
+ Returns the rect for this touch point in screen coordinates.
+*/
+QRectF QTouchEvent::TouchPoint::screenRect() const
+{
+ return d->screenRect;
+}
+
+/*!
+ Returns the pressure of this touch point. The return value is in
+ the range 0.0 to 1.0.
+*/
+qreal QTouchEvent::TouchPoint::pressure() const
+{
+ return d->pressure;
+}
+
/*! \internal */
-void QTouchEvent::TouchPoint::setLastPos(const QPointF &lastPos)
+void QTouchEvent::TouchPoint::setId(int id)
{
if (d->ref != 1)
d = d->detach();
- d->lastPos = lastPos;
+ d->id = id;
}
-/*!
- Returns the screen position of this touch point.
-*/
-QPointF QTouchEvent::TouchPoint::globalPos() const
+/*! \internal */
+void QTouchEvent::TouchPoint::setState(Qt::TouchPointState state)
{
- return d->screenPos;
+ if (d->ref != 1)
+ d = d->detach();
+ d->state = state;
}
/*! \internal */
-void QTouchEvent::TouchPoint::setGlobalPos(const QPointF &globalPos)
+void QTouchEvent::TouchPoint::setPos(const QPointF &pos)
{
if (d->ref != 1)
d = d->detach();
- d->screenPos = globalPos;
+ d->rect.moveCenter(pos);
}
-/*!
- Returns the starting screen position of this touch point.
-*/
-QPointF QTouchEvent::TouchPoint::startGlobalPos() const
+/*! \internal */
+void QTouchEvent::TouchPoint::setScenePos(const QPointF &scenePos)
{
- return d->startScreenPos;
+ if (d->ref != 1)
+ d = d->detach();
+ d->sceneRect.moveCenter(scenePos);
}
/*! \internal */
-void QTouchEvent::TouchPoint::setStartGlobalPos(const QPointF &startGlobalPos)
+void QTouchEvent::TouchPoint::setScreenPos(const QPointF &screenPos)
{
if (d->ref != 1)
d = d->detach();
- d->startScreenPos = startGlobalPos;
+ d->screenRect.moveCenter(screenPos);
}
-/*!
- Returns the screen position of this touch point from the previous
- touch event.
-*/
-QPointF QTouchEvent::TouchPoint::lastGlobalPos() const
+/*! \internal */
+void QTouchEvent::TouchPoint::setStartPos(const QPointF &startPos)
{
- return d->lastScreenPos;
+ if (d->ref != 1)
+ d = d->detach();
+ d->startPos = startPos;
}
/*! \internal */
-void QTouchEvent::TouchPoint::setLastGlobalPos(const QPointF &lastGlobalPos)
+void QTouchEvent::TouchPoint::setStartScenePos(const QPointF &startScenePos)
{
if (d->ref != 1)
d = d->detach();
- d->lastScreenPos = lastGlobalPos;
+ d->startScenePos = startScenePos;
}
-/*!
- Returns the rect for this touch point. The rect is centered around the point returned by pos().
- Note this function returns an empty rect if the device does not report touch point sizes.
-*/
-QRectF QTouchEvent::TouchPoint::rect() const
+/*! \internal */
+void QTouchEvent::TouchPoint::setStartScreenPos(const QPointF &startScreenPos)
{
- return d->screenRect;
+ if (d->ref != 1)
+ d = d->detach();
+ d->startScreenPos = startScreenPos;
+}
+
+/*! \internal */
+void QTouchEvent::TouchPoint::setLastPos(const QPointF &lastPos)
+{
+ if (d->ref != 1)
+ d = d->detach();
+ d->lastPos = lastPos;
+}
+
+/*! \internal */
+void QTouchEvent::TouchPoint::setLastScenePos(const QPointF &lastScenePos)
+{
+ if (d->ref != 1)
+ d = d->detach();
+ d->lastScenePos = lastScenePos;
+}
+
+/*! \internal */
+void QTouchEvent::TouchPoint::setLastScreenPos(const QPointF &lastScreenPos)
+{
+ if (d->ref != 1)
+ d = d->detach();
+ d->lastScreenPos = lastScreenPos;
}
/*! \internal */
@@ -3946,16 +4040,23 @@ void QTouchEvent::TouchPoint::setRect(const QRectF &rect)
{
if (d->ref != 1)
d = d->detach();
- d->screenRect = rect;
+ d->rect = rect;
}
-/*!
- Returns the pressure of this touch point. The return value is in
- the range 0.0 to 1.0.
-*/
-qreal QTouchEvent::TouchPoint::pressure() const
+/*! \internal */
+void QTouchEvent::TouchPoint::setSceneRect(const QRectF &sceneRect)
{
- return d->pressure;
+ if (d->ref != 1)
+ d = d->detach();
+ d->sceneRect = sceneRect;
+}
+
+/*! \internal */
+void QTouchEvent::TouchPoint::setScreenRect(const QRectF &screenRect)
+{
+ if (d->ref != 1)
+ d = d->detach();
+ d->screenRect = screenRect;
}
/*! \internal */
@@ -3976,9 +4077,4 @@ QTouchEvent::TouchPoint &QTouchEvent::TouchPoint::operator=(const QTouchEvent::T
return *this;
}
-QTouchEventTouchPointPrivate *QTouchEventTouchPointPrivate::get(const QTouchEvent::TouchPoint &tp)
-{
- return tp.d;
-}
-
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h
index 4d62958..2f735ac 100644
--- a/src/gui/kernel/qevent.h
+++ b/src/gui/kernel/qevent.h
@@ -70,6 +70,7 @@ public:
QInputEvent(Type type, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
~QInputEvent();
inline Qt::KeyboardModifiers modifiers() const { return modState; }
+ inline void setModifiers(Qt::KeyboardModifiers modifiers) { modState = modifiers; }
protected:
Qt::KeyboardModifiers modState;
};
@@ -769,68 +770,66 @@ public:
~TouchPoint();
int id() const;
- void setId(int id);
Qt::TouchPointState state() const;
- void setState(Qt::TouchPointState state);
QPointF pos() const;
- void setPos(const QPointF &pos);
-
QPointF startPos() const;
- void setStartPos(const QPointF &startPos);
-
QPointF lastPos() const;
- void setLastPos(const QPointF &lastPos);
- QPointF globalPos() const;
- void setGlobalPos(const QPointF &globalPos);
+ QPointF scenePos() const;
+ QPointF startScenePos() const;
+ QPointF lastScenePos() const;
- QPointF startGlobalPos() const;
- void setStartGlobalPos(const QPointF &startGlobalPos);
-
- QPointF lastGlobalPos() const;
- void setLastGlobalPos(const QPointF &lastGlobalPos);
+ QPointF screenPos() const;
+ QPointF startScreenPos() const;
+ QPointF lastScreenPos() const;
QRectF rect() const;
- void setRect(const QRectF &rect);
+ QRectF sceneRect() const;
+ QRectF screenRect() const;
qreal pressure() const;
- void setPressure(qreal pressure);
+ // internal
+ void setId(int id);
+ void setState(Qt::TouchPointState state);
+ void setPos(const QPointF &pos);
+ void setScenePos(const QPointF &scenePos);
+ void setScreenPos(const QPointF &screenPos);
+ void setStartPos(const QPointF &startPos);
+ void setStartScenePos(const QPointF &startScenePos);
+ void setStartScreenPos(const QPointF &startScreenPos);
+ void setLastPos(const QPointF &lastPos);
+ void setLastScenePos(const QPointF &lastScenePos);
+ void setLastScreenPos(const QPointF &lastScreenPos);
+ void setRect(const QRectF &rect);
+ void setSceneRect(const QRectF &sceneRect);
+ void setScreenRect(const QRectF &screenRect);
+ void setPressure(qreal pressure);
TouchPoint &operator=(const TouchPoint &other);
private:
QTouchEventTouchPointPrivate *d;
-
- friend class QTouchEventTouchPointPrivate;
};
QTouchEvent(QEvent::Type type,
- Qt::KeyboardModifiers modifiers,
- Qt::TouchPointStates touchPointStates,
- const QList<QTouchEvent::TouchPoint> &touchPoints);
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier,
+ Qt::TouchPointStates touchPointStates = 0,
+ const QList<QTouchEvent::TouchPoint> &touchPoints = QList<QTouchEvent::TouchPoint>());
~QTouchEvent();
- inline Qt::TouchPointStates touchPointStates() const
- {
- return _touchPointStates;
- }
- inline void setTouchPointStates(Qt::TouchPointStates touchPointStates)
- {
- _touchPointStates = touchPointStates;
- }
+ inline QWidget *widget() const { return _widget; }
+ inline Qt::TouchPointStates touchPointStates() const { return _touchPointStates; }
+ inline const QList<QTouchEvent::TouchPoint> &touchPoints() const { return _touchPoints; }
- inline const QList<QTouchEvent::TouchPoint> &touchPoints() const
- {
- return _touchPoints;
- }
- inline void setTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints)
- {
- _touchPoints = touchPoints;
- }
+ // internal
+ inline void setWidget(QWidget *widget) { _widget = widget; }
+ inline void setTouchPointStates(Qt::TouchPointStates touchPointStates) { _touchPointStates = touchPointStates; }
+ inline void setTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints) { _touchPoints = touchPoints; }
protected:
+ QWidget *_widget;
Qt::TouchPointStates _touchPointStates;
QList<QTouchEvent::TouchPoint> _touchPoints;
diff --git a/src/gui/kernel/qevent_p.h b/src/gui/kernel/qevent_p.h
index 3475d0d..2a481fb 100644
--- a/src/gui/kernel/qevent_p.h
+++ b/src/gui/kernel/qevent_p.h
@@ -109,13 +109,10 @@ public:
QAtomicInt ref;
int id;
Qt::TouchPointState state;
- QPointF pos, startPos, lastPos;
- QPointF scenePos, startScenePos, lastScenePos;
- QPointF screenPos, startScreenPos, lastScreenPos;
QRectF rect, sceneRect, screenRect;
+ QPointF startPos, startScenePos, startScreenPos;
+ QPointF lastPos, lastScenePos, lastScreenPos;
qreal pressure;
-
- static QTouchEventTouchPointPrivate *get(const QTouchEvent::TouchPoint &tp);
};
QT_END_NAMESPACE
diff --git a/src/testlib/qtesttouch.h b/src/testlib/qtesttouch.h
index 2db015a..141cb4d 100644
--- a/src/testlib/qtesttouch.h
+++ b/src/testlib/qtesttouch.h
@@ -78,21 +78,21 @@ namespace QTest
QTouchEventSequence& press(int touchId, const QPoint &pt, QWidget *widget = 0)
{
QTouchEvent::TouchPoint &p = point(touchId);
- p.setGlobalPos(mapToScreen(widget, pt));
+ p.setScreenPos(mapToScreen(widget, pt));
p.setState(Qt::TouchPointPressed);
return *this;
}
QTouchEventSequence& move(int touchId, const QPoint &pt, QWidget *widget = 0)
{
QTouchEvent::TouchPoint &p = point(touchId);
- p.setGlobalPos(mapToScreen(widget, pt));
+ p.setScreenPos(mapToScreen(widget, pt));
p.setState(Qt::TouchPointMoved);
return *this;
}
QTouchEventSequence& release(int touchId, const QPoint &pt, QWidget *widget = 0)
{
QTouchEvent::TouchPoint &p = point(touchId);
- p.setGlobalPos(mapToScreen(widget, pt));
+ p.setScreenPos(mapToScreen(widget, pt));
p.setState(Qt::TouchPointReleased);
return *this;
}
diff --git a/tests/auto/qtouchevent/tst_qtouchevent.cpp b/tests/auto/qtouchevent/tst_qtouchevent.cpp
index ae6e217..336ab33 100644
--- a/tests/auto/qtouchevent/tst_qtouchevent.cpp
+++ b/tests/auto/qtouchevent/tst_qtouchevent.cpp
@@ -250,7 +250,7 @@ void tst_QTouchEvent::basicRawEventTranslation()
touchWidget.setAttribute(Qt::WA_AcceptTouchEvents);
QPointF pos = touchWidget.rect().center();
- QPointF globalPos = touchWidget.mapToGlobal(pos.toPoint());
+ QPointF screenPos = touchWidget.mapToGlobal(pos.toPoint());
QPointF delta(10, 10);
QTouchEvent::TouchPoint rawTouchPoint;
@@ -258,7 +258,7 @@ void tst_QTouchEvent::basicRawEventTranslation()
// this should be translated to a TouchBegin
rawTouchPoint.setState(Qt::TouchPointPressed);
- rawTouchPoint.setGlobalPos(globalPos);
+ rawTouchPoint.setScreenPos(screenPos);
bool res = qt_translateRawTouchEvent(QList<QTouchEvent::TouchPoint>() << rawTouchPoint, &touchWidget);
QVERIFY(res);
QVERIFY(touchWidget.seenTouchBegin);
@@ -271,15 +271,16 @@ void tst_QTouchEvent::basicRawEventTranslation()
QCOMPARE(touchBeginPoint.pos(), pos);
QCOMPARE(touchBeginPoint.startPos(), pos);
QCOMPARE(touchBeginPoint.lastPos(), pos);
- QCOMPARE(touchBeginPoint.globalPos(), rawTouchPoint.globalPos());
- QCOMPARE(touchBeginPoint.startGlobalPos(), rawTouchPoint.globalPos());
- QCOMPARE(touchBeginPoint.lastGlobalPos(), rawTouchPoint.globalPos());
- QCOMPARE(touchBeginPoint.size(), QSizeF());
+ QCOMPARE(touchBeginPoint.screenPos(), rawTouchPoint.screenPos());
+ QCOMPARE(touchBeginPoint.startScreenPos(), rawTouchPoint.screenPos());
+ QCOMPARE(touchBeginPoint.lastScreenPos(), rawTouchPoint.screenPos());
+ QCOMPARE(touchBeginPoint.rect(), QRectF(pos, QSizeF(0, 0)));
+ QCOMPARE(touchBeginPoint.screenRect(), QRectF(rawTouchPoint.screenPos(), QSizeF(0, 0)));
QCOMPARE(touchBeginPoint.pressure(), qreal(-1.));
// moving the point should translate to TouchUpdate
rawTouchPoint.setState(Qt::TouchPointMoved);
- rawTouchPoint.setGlobalPos(globalPos + delta);
+ rawTouchPoint.setScreenPos(screenPos + delta);
res = qt_translateRawTouchEvent(QList<QTouchEvent::TouchPoint>() << rawTouchPoint, &touchWidget);
QVERIFY(res);
QVERIFY(touchWidget.seenTouchBegin);
@@ -292,15 +293,16 @@ void tst_QTouchEvent::basicRawEventTranslation()
QCOMPARE(touchUpdatePoint.pos(), pos + delta);
QCOMPARE(touchUpdatePoint.startPos(), pos);
QCOMPARE(touchUpdatePoint.lastPos(), pos);
- QCOMPARE(touchUpdatePoint.globalPos(), rawTouchPoint.globalPos());
- QCOMPARE(touchUpdatePoint.startGlobalPos(), globalPos);
- QCOMPARE(touchUpdatePoint.lastGlobalPos(), globalPos);
- QCOMPARE(touchUpdatePoint.size(), QSizeF());
+ QCOMPARE(touchUpdatePoint.screenPos(), rawTouchPoint.screenPos());
+ QCOMPARE(touchUpdatePoint.startScreenPos(), screenPos);
+ QCOMPARE(touchUpdatePoint.lastScreenPos(), screenPos);
+ QCOMPARE(touchUpdatePoint.rect(), QRectF(pos + delta, QSizeF(0, 0)));
+ QCOMPARE(touchUpdatePoint.screenRect(), QRectF(rawTouchPoint.screenPos(), QSizeF(0, 0)));
QCOMPARE(touchUpdatePoint.pressure(), qreal(-1.));
// releasing the point translates to TouchEnd
rawTouchPoint.setState(Qt::TouchPointReleased);
- rawTouchPoint.setGlobalPos(globalPos + delta + delta);
+ rawTouchPoint.setScreenPos(screenPos + delta + delta);
res = qt_translateRawTouchEvent(QList<QTouchEvent::TouchPoint>() << rawTouchPoint, &touchWidget);
QVERIFY(res);
QVERIFY(touchWidget.seenTouchBegin);
@@ -313,10 +315,11 @@ void tst_QTouchEvent::basicRawEventTranslation()
QCOMPARE(touchEndPoint.pos(), pos + delta + delta);
QCOMPARE(touchEndPoint.startPos(), pos);
QCOMPARE(touchEndPoint.lastPos(), pos + delta);
- QCOMPARE(touchEndPoint.globalPos(), rawTouchPoint.globalPos());
- QCOMPARE(touchEndPoint.startGlobalPos(), globalPos);
- QCOMPARE(touchEndPoint.lastGlobalPos(), globalPos + delta);
- QCOMPARE(touchEndPoint.size(), QSizeF());
+ QCOMPARE(touchEndPoint.screenPos(), rawTouchPoint.screenPos());
+ QCOMPARE(touchEndPoint.startScreenPos(), screenPos);
+ QCOMPARE(touchEndPoint.lastScreenPos(), screenPos + delta);
+ QCOMPARE(touchEndPoint.rect(), QRectF(pos + delta + delta, QSizeF(0, 0)));
+ QCOMPARE(touchEndPoint.screenRect(), QRectF(rawTouchPoint.screenPos(), QSizeF(0, 0)));
QCOMPARE(touchEndPoint.pressure(), qreal(-1.));
}