Changeset 846 for trunk/src/gui/kernel/qstandardgestures.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/kernel/qstandardgestures.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 46 46 #include "qwidget.h" 47 47 #include "qabstractscrollarea.h" 48 #include <qgraphicssceneevent.h> 48 49 #include "qdebug.h" 50 51 #ifndef QT_NO_GESTURES 49 52 50 53 QT_BEGIN_NAMESPACE … … 111 114 if (d->offset.x() > 10 || d->offset.y() > 10 || 112 115 d->offset.x() < -10 || d->offset.y() < -10) { 116 q->setHotSpot(p1.startScreenPos()); 113 117 result = QGestureRecognizer::TriggerGesture; 114 118 } else { … … 191 195 d->isHotSpotSet = true; 192 196 197 QPointF centerPoint = (p1.screenPos() + p2.screenPos()) / 2.0; 193 198 if (d->isNewSequence) { 194 199 d->startPosition[0] = p1.screenPos(); 195 200 d->startPosition[1] = p2.screenPos(); 196 } 197 QLineF line(p1.screenPos(), p2.screenPos()); 198 QLineF tmp(line); 199 tmp.setLength(line.length() / 2.); 200 QPointF centerPoint = tmp.p2(); 201 202 d->lastCenterPoint = d->centerPoint; 201 d->lastCenterPoint = centerPoint; 202 } else { 203 d->lastCenterPoint = d->centerPoint; 204 } 203 205 d->centerPoint = centerPoint; 206 204 207 d->changeFlags |= QPinchGesture::CenterPointChanged; 205 208 206 const qreal scaleFactor =207 QLineF(p1.screenPos(), p2.screenPos()).length()208 / QLineF(d->startPosition[0], d->startPosition[1]).length();209 209 if (d->isNewSequence) { 210 d->lastScaleFactor = scaleFactor; 210 d->scaleFactor = 1.0; 211 d->lastScaleFactor = 1.0; 211 212 } else { 212 213 d->lastScaleFactor = d->scaleFactor; 213 } 214 d->scaleFactor = scaleFactor; 215 d->totalScaleFactor += d->scaleFactor - d->lastScaleFactor; 214 QLineF line(p1.screenPos(), p2.screenPos()); 215 QLineF lastLine(p1.lastScreenPos(), p2.lastScreenPos()); 216 d->scaleFactor = line.length() / lastLine.length(); 217 } 218 d->totalScaleFactor = d->totalScaleFactor * d->scaleFactor; 216 219 d->changeFlags |= QPinchGesture::ScaleFactorChanged; 217 220 … … 224 227 const qreal rotationAngle = startAngle - angle; 225 228 if (d->isNewSequence) 226 d->lastRotationAngle = rotationAngle;229 d->lastRotationAngle = 0.0; 227 230 else 228 231 d->lastRotationAngle = d->rotationAngle; … … 263 266 264 267 d->startCenterPoint = d->lastCenterPoint = d->centerPoint = QPointF(); 265 d->totalScaleFactor = d->lastScaleFactor = d->scaleFactor = 0;268 d->totalScaleFactor = d->lastScaleFactor = d->scaleFactor = 1; 266 269 d->totalRotationAngle = d->lastRotationAngle = d->rotationAngle = 0; 267 270 … … 301 304 switch (event->type()) { 302 305 case QEvent::TouchBegin: { 303 d-> speed= 1;304 d->time = QTime::currentTime();306 d->velocityValue = 1; 307 d->time.start(); 305 308 d->started = true; 306 309 result = QGestureRecognizer::MayBeGesture; … … 339 342 340 343 const int distance = xDistance >= yDistance ? xDistance : yDistance; 341 int elapsedTime = d->time. msecsTo(QTime::currentTime());344 int elapsedTime = d->time.restart(); 342 345 if (!elapsedTime) 343 346 elapsedTime = 1; 344 d->speed = 0.9 * d->speed + distance / elapsedTime; 345 d->time = QTime::currentTime(); 347 d->velocityValue = 0.9 * d->velocityValue + distance / elapsedTime; 346 348 d->swipeAngle = QLineF(p1.startScreenPos(), p1.screenPos()).angle(); 347 349 … … 405 407 d->lastPositions[0] = d->lastPositions[1] = d->lastPositions[2] = QPoint(); 406 408 d->started = false; 407 d-> speed= 0;408 d->time = QTime();409 d->velocityValue = 0; 410 d->time.invalidate(); 409 411 410 412 QGestureRecognizer::reset(state); … … 441 443 case QEvent::TouchBegin: { 442 444 d->position = ev->touchPoints().at(0).pos(); 445 q->setHotSpot(ev->touchPoints().at(0).screenPos()); 443 446 result = QGestureRecognizer::TriggerGesture; 444 447 break; … … 507 510 q->killTimer(d->timerId); 508 511 d->timerId = 0; 509 return QGestureRecognizer:: Ignore | QGestureRecognizer::ConsumeEventHint;512 return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint; 510 513 } 511 514 512 515 const QTouchEvent *ev = static_cast<const QTouchEvent *>(event); 513 514 QGestureRecognizer::Result result = QGestureRecognizer::CancelGesture; 515 516 enum { TimerInterval = 2000 }; 516 const QMouseEvent *me = static_cast<const QMouseEvent *>(event); 517 #ifndef QT_NO_GRAPHICSVIEW 518 const QGraphicsSceneMouseEvent *gsme = static_cast<const QGraphicsSceneMouseEvent *>(event); 519 #endif 520 517 521 enum { TapRadius = 40 }; 518 522 519 523 switch (event->type()) { 520 case QEvent::TouchBegin: 521 d->position = ev->touchPoints().at(0).pos(); 524 #ifndef QT_NO_GRAPHICSVIEW 525 case QEvent::GraphicsSceneMousePress: 526 d->position = gsme->screenPos(); 527 q->setHotSpot(d->position); 522 528 if (d->timerId) 523 529 q->killTimer(d->timerId); 524 d->timerId = q->startTimer(TimerInterval); 525 result = QGestureRecognizer::TriggerGesture; 526 break; 530 d->timerId = q->startTimer(QTapAndHoldGesturePrivate::Timeout); 531 return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout 532 #endif 533 case QEvent::MouseButtonPress: 534 d->position = me->globalPos(); 535 q->setHotSpot(d->position); 536 if (d->timerId) 537 q->killTimer(d->timerId); 538 d->timerId = q->startTimer(QTapAndHoldGesturePrivate::Timeout); 539 return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout 540 case QEvent::TouchBegin: 541 d->position = ev->touchPoints().at(0).startScreenPos(); 542 q->setHotSpot(d->position); 543 if (d->timerId) 544 q->killTimer(d->timerId); 545 d->timerId = q->startTimer(QTapAndHoldGesturePrivate::Timeout); 546 return QGestureRecognizer::MayBeGesture; // we don't show a sign of life until the timeout 547 #ifndef QT_NO_GRAPHICSVIEW 548 case QEvent::GraphicsSceneMouseRelease: 549 #endif 550 case QEvent::MouseButtonRelease: 527 551 case QEvent::TouchEnd: 528 if (d->timerId) 529 result = QGestureRecognizer::CancelGesture; 530 else 531 result = QGestureRecognizer::FinishGesture; 532 break; 552 return QGestureRecognizer::CancelGesture; // get out of the MayBeGesture state 533 553 case QEvent::TouchUpdate: 534 if ( q->state() != Qt::NoGesture&& ev->touchPoints().size() == 1) {554 if (d->timerId && ev->touchPoints().size() == 1) { 535 555 QTouchEvent::TouchPoint p = ev->touchPoints().at(0); 536 556 QPoint delta = p.pos().toPoint() - p.startPos().toPoint(); 537 557 if (delta.manhattanLength() <= TapRadius) 538 result = QGestureRecognizer::TriggerGesture; 539 } 540 break; 541 case QEvent::MouseButtonPress: 542 case QEvent::MouseMove: 543 case QEvent::MouseButtonRelease: 544 result = QGestureRecognizer::Ignore; 545 break; 558 return QGestureRecognizer::MayBeGesture; 559 } 560 return QGestureRecognizer::CancelGesture; 561 case QEvent::MouseMove: { 562 QPoint delta = me->globalPos() - d->position.toPoint(); 563 if (d->timerId && delta.manhattanLength() <= TapRadius) 564 return QGestureRecognizer::MayBeGesture; 565 return QGestureRecognizer::CancelGesture; 566 } 567 #ifndef QT_NO_GRAPHICSVIEW 568 case QEvent::GraphicsSceneMouseMove: { 569 QPoint delta = gsme->screenPos() - d->position.toPoint(); 570 if (d->timerId && delta.manhattanLength() <= TapRadius) 571 return QGestureRecognizer::MayBeGesture; 572 return QGestureRecognizer::CancelGesture; 573 } 574 #endif 546 575 default: 547 result = QGestureRecognizer::Ignore; 548 break; 549 } 550 return result; 576 return QGestureRecognizer::Ignore; 577 } 551 578 } 552 579 … … 565 592 566 593 QT_END_NAMESPACE 594 595 #endif // QT_NO_GESTURES
Note:
See TracChangeset
for help on using the changeset viewer.