diff options
author | Zeno Albisser <zeno.albisser@nokia.com> | 2010-09-08 07:19:25 -0400 |
---|---|---|
committer | Zeno Albisser <zeno.albisser@nokia.com> | 2010-09-08 10:14:31 -0400 |
commit | 43248255eaafe4f974409628cbaaff5966b3c109 (patch) | |
tree | e5f3b35663933fb190c7dd55d62ecd5064ca4068 | |
parent | ea62344a43431aa8d243642b180d27b5e3db3b9a (diff) |
avoid using private headers in QSwipeGestureRecognizer
Reviewed-by: Denis Dzyubenko
-rw-r--r-- | plugin.cpp | 2 | ||||
-rw-r--r-- | qdeclarativegesturerecognizers.cpp | 140 |
2 files changed, 83 insertions, 59 deletions
@@ -79,7 +79,7 @@ void GestureAreaQmlPlugin::registerTypes(const char *uri) QGestureRecognizer::registerRecognizer(new QTapAndHoldGestureRecognizer()); QGestureRecognizer::registerRecognizer(new QPanGestureRecognizer()); QGestureRecognizer::registerRecognizer(new QPinchGestureRecognizer()); -// QGestureRecognizer::registerRecognizer(new QSwipeGestureRecognizer()); + QGestureRecognizer::registerRecognizer(new QSwipeGestureRecognizer()); #endif } 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()) |