summaryrefslogtreecommitdiffstats
path: root/qdeclarativegesturerecognizers.cpp
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@nokia.com>2010-09-08 07:19:25 -0400
committerZeno Albisser <zeno.albisser@nokia.com>2010-09-08 10:14:31 -0400
commit43248255eaafe4f974409628cbaaff5966b3c109 (patch)
treee5f3b35663933fb190c7dd55d62ecd5064ca4068 /qdeclarativegesturerecognizers.cpp
parentea62344a43431aa8d243642b180d27b5e3db3b9a (diff)
avoid using private headers in QSwipeGestureRecognizer
Reviewed-by: Denis Dzyubenko
Diffstat (limited to 'qdeclarativegesturerecognizers.cpp')
-rw-r--r--qdeclarativegesturerecognizers.cpp140
1 files changed, 82 insertions, 58 deletions
diff --git a/qdeclarativegesturerecognizers.cpp b/qdeclarativegesturerecognizers.cpp
index a89bc0b..d82fbf5 100644
--- a/qdeclarativegesturerecognizers.cpp
+++ b/qdeclarativegesturerecognizers.cpp
@@ -471,7 +471,7 @@ void QPinchGestureRecognizer::reset(QGesture *state)
}
QGestureRecognizer::reset(state);
}
-/*
+
//
// QSwipeGestureRecognizer
//
@@ -496,16 +496,20 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
QEvent *event)
{
QSwipeGesture *q = static_cast<QSwipeGesture *>(state);
- QSwipeGesturePrivate *d = q->d_func();
QGestureRecognizer::Result result;
switch (event->type()) {
case QEvent::TouchBegin: {
- d->gotTouched = true;
- d->velocityValue = 1;
- d->time.start();
- d->started = true;
+ q->setProperty("gotTouched", true);
+ q->setProperty("velocityValue", qreal(1));
+ q->setProperty("d_verticalDirection", QSwipeGesture::NoDirection);
+ q->setProperty("d_horizontalDirection", QSwipeGesture::NoDirection);
+
+ QElapsedTimer time;
+ time.start();
+ q->setProperty("time",QVariant::fromValue(time));
+ q->setProperty("started", true);
result = QGestureRecognizer::MayBeGesture;
break;
}
@@ -519,47 +523,52 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
}
case QEvent::TouchUpdate: {
const QTouchEvent *ev = static_cast<const QTouchEvent *>(event);
- if (!d->started)
+ if (!q->property("started").toBool())
result = QGestureRecognizer::CancelGesture;
else if (ev->touchPoints().size() == 2) {
QTouchEvent::TouchPoint p1 = ev->touchPoints().at(0);
QTouchEvent::TouchPoint p2 = ev->touchPoints().at(1);
- if (d->lastPositions[0].isNull()) {
- d->lastPositions[0] = p1.startScreenPos().toPoint();
- d->lastPositions[1] = p2.startScreenPos().toPoint();
+ if (q->property("lastPositions0").toPoint().isNull()) {
+ q->setProperty("lastPositions0", p1.startScreenPos().toPoint());
+ q->setProperty("lastPositions1", p2.startScreenPos().toPoint());
}
- d->hotSpot = p1.screenPos();
- d->isHotSpotSet = true;
+ q->setHotSpot(p1.screenPos());
- int xDistance = (p1.screenPos().x() - d->lastPositions[0].x() +
- p2.screenPos().x() - d->lastPositions[1].x()) / 2;
- int yDistance = (p1.screenPos().y() - d->lastPositions[0].y() +
- p2.screenPos().y() - d->lastPositions[1].y()) / 2;
+ QPoint lastPositions0 = q->property("lastPositions0").toPoint();
+ QPoint lastPositions1 = q->property("lastPositions1").toPoint();
+
+ int xDistance = (p1.screenPos().x() - lastPositions0.x() +
+ p2.screenPos().x() - lastPositions1.x()) / 2;
+ int yDistance = (p1.screenPos().y() - lastPositions0.y() +
+ p2.screenPos().y() - lastPositions1.y()) / 2;
int absXDistance = qAbs(xDistance);
int absYDistance = qAbs(yDistance);
const int distance = absXDistance >= absYDistance ? absXDistance : absYDistance;
- int elapsedTime = d->time.restart();
+
+ QElapsedTimer time = q->property("time").value<QElapsedTimer>();
+ int elapsedTime = time.restart();
+ q->setProperty("time", QVariant::fromValue(time));
if (!elapsedTime)
elapsedTime = 1;
- d->velocityValue = 0.9 * d->velocityValue + distance / elapsedTime;
- d->swipeAngle = QLineF(p1.startScreenPos(), p1.screenPos()).angle();
+ q->setProperty("velocityValue", 0.9 * q->property("velocityValue").toReal() + distance / elapsedTime);
+ q->setSwipeAngle(QLineF(p1.startScreenPos(), p1.screenPos()).angle());
static const int MoveThreshold = 50;
if (absXDistance > MoveThreshold || absYDistance > MoveThreshold) {
// measure the distance to check if the direction changed
- d->lastPositions[0] = p1.screenPos().toPoint();
- d->lastPositions[1] = p2.screenPos().toPoint();
+ q->setProperty("lastPositions0", p1.screenPos().toPoint());
+ q->setProperty("lastPositions1", p2.screenPos().toPoint());
QSwipeGesture::SwipeDirection horizontal =
xDistance > 0 ? QSwipeGesture::Right : QSwipeGesture::Left;
QSwipeGesture::SwipeDirection vertical =
yDistance > 0 ? QSwipeGesture::Down : QSwipeGesture::Up;
- if (d->verticalDirection == QSwipeGesture::NoDirection)
- d->verticalDirection = vertical;
- if (d->horizontalDirection == QSwipeGesture::NoDirection)
- d->horizontalDirection = horizontal;
- if (d->verticalDirection != vertical || d->horizontalDirection != horizontal) {
+ if (q->property("d_verticalDirection").toInt() == QSwipeGesture::NoDirection)
+ q->setProperty("d_verticalDirection", vertical);
+ if (q->property("d_horizontalDirection").toInt() == QSwipeGesture::NoDirection)
+ q->setProperty("d_horizontalDirection", horizontal);
+ if (q->property("d_verticalDirection").toInt() != vertical || q->property("d_horizontalDirection").toInt() != horizontal) {
// the user has changed the direction!
result = QGestureRecognizer::CancelGesture;
}
@@ -573,9 +582,10 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
} else if (ev->touchPoints().size() > 2) {
result = QGestureRecognizer::CancelGesture;
} else { // less than 2 touch points
- if (d->started && (ev->touchPointStates() & Qt::TouchPointPressed))
+ bool started = q->property("started").toBool();
+ if (started && (ev->touchPointStates() & Qt::TouchPointPressed))
result = QGestureRecognizer::CancelGesture;
- else if (d->started)
+ else if (started)
result = QGestureRecognizer::Ignore;
else
result = QGestureRecognizer::MayBeGesture;
@@ -584,18 +594,25 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
}
case QEvent::MouseButtonPress: {
- if(!d->gotTouched) {
+ if(!q->property("gotTouched").toBool()) {
const QMouseEvent *ev = static_cast<const QMouseEvent *>(event);
- d->velocityValue = 1;
- d->time.start();
- d->started = true;
+
+ q->setProperty("velocityValue", qreal(1));
+ q->setProperty("d_verticalDirection", QSwipeGesture::NoDirection);
+ q->setProperty("d_horizontalDirection", QSwipeGesture::NoDirection);
+
+ QElapsedTimer time;
+ time.start();
+ q->setProperty("time",QVariant::fromValue(time));
+ q->setProperty("started", true);
+
state->setHotSpot(ev->globalPos());
return QGestureRecognizer::MayBeGesture;
}
return QGestureRecognizer::Ignore;
}
case QEvent::MouseButtonRelease: {
- if(!d->gotTouched) {
+ if(!q->property("gotTouched").toBool()) {
if (q->state() != Qt::NoGesture) {
result = QGestureRecognizer::FinishGesture;
} else {
@@ -607,40 +624,44 @@ QGestureRecognizer::Result QSwipeGestureRecognizer::recognize(QGesture *state,
}
case QEvent::MouseMove: {
- if(!d->gotTouched) {
+ if(!q->property("gotTouched").toBool()) {
const QMouseEvent *ev = static_cast<const QMouseEvent *>(event);
- if (!d->started)
+ if (!q->property("started").toBool())
result = QGestureRecognizer::CancelGesture;
else {
- if (d->lastPositions[0].isNull()) {
- d->lastPositions[0] = ev->pos();
+ QPoint lastPositions0 = q->property("lastPositions0").toPoint();
+ if (lastPositions0.isNull()) {
+ lastPositions0 = ev->pos();
+ q->setProperty("lastPositions0", lastPositions0);
}
- int xDistance = (ev->x() - d->lastPositions[0].x());
- int yDistance = (ev->y() - d->lastPositions[0].y());
+ int xDistance = (ev->x() - lastPositions0.x());
+ int yDistance = (ev->y() - lastPositions0.y());
int absXDistance = qAbs(xDistance);
int absYDistance = qAbs(yDistance);
const int distance = absXDistance >= absYDistance ? absXDistance : absYDistance;
- int elapsedTime = d->time.restart();
+ QElapsedTimer time = q->property("time").value<QElapsedTimer>();
+ int elapsedTime = time.restart();
+ q->setProperty("time", QVariant::fromValue(time));
if (!elapsedTime)
elapsedTime = 1;
- d->velocityValue = 0.9 * d->velocityValue + distance / elapsedTime;
- d->swipeAngle = QLineF(d->lastPositions[0], ev->pos()).angle();
+ q->setProperty("velocityValue", 0.9 * q->property("velocityValue").toReal() + distance / elapsedTime);
+ q->setSwipeAngle(QLineF(q->property("lastPositions0").toPoint(), ev->pos()).angle());
static const int MoveThreshold = 50;
if (absXDistance > MoveThreshold || absYDistance > MoveThreshold) {
// measure the distance to check if the direction changed
- d->lastPositions[0] = ev->pos();
+ q->setProperty("lastPositions0", ev->pos());
QSwipeGesture::SwipeDirection horizontal =
xDistance > 0 ? QSwipeGesture::Right : QSwipeGesture::Left;
QSwipeGesture::SwipeDirection vertical =
yDistance > 0 ? QSwipeGesture::Down : QSwipeGesture::Up;
- if (d->verticalDirection == QSwipeGesture::NoDirection)
- d->verticalDirection = vertical;
- if (d->horizontalDirection == QSwipeGesture::NoDirection)
- d->horizontalDirection = horizontal;
- if (d->verticalDirection != vertical || d->horizontalDirection != horizontal) {
+ if (q->property("d_verticalDirection").toInt() == QSwipeGesture::NoDirection)
+ q->setProperty("d_verticalDirection", vertical);
+ if (q->property("d_horizontalDirection").toInt() == QSwipeGesture::NoDirection)
+ q->setProperty("d_horizontalDirection", horizontal);
+ if (q->property("d_verticalDirection").toInt() != vertical || q->property("d_horizontalDirection").toInt() != horizontal) {
// the user has changed the direction!
result = QGestureRecognizer::CancelGesture;
}
@@ -668,20 +689,23 @@ void QSwipeGestureRecognizer::reset(QGesture *state)
if (!state)
return;
QSwipeGesture *q = static_cast<QSwipeGesture *>(state);
- QSwipeGesturePrivate *d = q->d_func();
- d->verticalDirection = d->horizontalDirection = QSwipeGesture::NoDirection;
- d->swipeAngle = 0;
- d->gotTouched = false;
+ q->setProperty("d_verticalDirection", QSwipeGesture::NoDirection);
+ q->setProperty("d_horizontalDirection", QSwipeGesture::NoDirection);
+ q->setSwipeAngle(0);
+ q->setProperty("gotTouched", false);
- d->lastPositions[0] = d->lastPositions[1] = d->lastPositions[2] = QPoint();
- d->started = false;
- d->velocityValue = 0;
- d->time.invalidate();
+ q->setProperty("lastPositions0", QPoint());
+ q->setProperty("lastPositions1", QPoint());
+ q->setProperty("started", false);
+ q->setProperty("velocityValue", 0);
+ QElapsedTimer time = q->property("time").value<QElapsedTimer>();
+ time.invalidate();
+ q->setProperty("time", QVariant::fromValue(time));
QGestureRecognizer::reset(state);
}
-*/
+
//
// QTapGestureRecognizer
//
@@ -783,6 +807,7 @@ void QTapGestureRecognizer::reset(QGesture *state)
return;
QTapGesture *q = static_cast<QTapGesture *>(state);
q->setPosition(QPointF());
+ q->setProperty("gotTouched", false);
QGestureRecognizer::reset(state);
}
@@ -888,7 +913,6 @@ void QTapAndHoldGestureRecognizer::reset(QGesture *state)
if (!state)
return;
QTapAndHoldGesture *q = static_cast<QTapAndHoldGesture *>(state);
- QTapAndHoldGesturePrivate *d = q->d_func();
q->setPosition(QPointF());
if (q->property("timerId").toInt())