Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/kernel/qstandardgestures.cpp

    r651 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    4646#include "qwidget.h"
    4747#include "qabstractscrollarea.h"
     48#include <qgraphicssceneevent.h>
    4849#include "qdebug.h"
     50
     51#ifndef QT_NO_GESTURES
    4952
    5053QT_BEGIN_NAMESPACE
     
    111114            if (d->offset.x() > 10  || d->offset.y() > 10 ||
    112115                d->offset.x() < -10 || d->offset.y() < -10) {
     116                q->setHotSpot(p1.startScreenPos());
    113117                result = QGestureRecognizer::TriggerGesture;
    114118            } else {
     
    191195            d->isHotSpotSet = true;
    192196
     197            QPointF centerPoint = (p1.screenPos() + p2.screenPos()) / 2.0;
    193198            if (d->isNewSequence) {
    194199                d->startPosition[0] = p1.screenPos();
    195200                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            }
    203205            d->centerPoint = centerPoint;
     206
    204207            d->changeFlags |= QPinchGesture::CenterPointChanged;
    205208
    206             const qreal scaleFactor =
    207                     QLineF(p1.screenPos(), p2.screenPos()).length()
    208                     / QLineF(d->startPosition[0],  d->startPosition[1]).length();
    209209            if (d->isNewSequence) {
    210                 d->lastScaleFactor = scaleFactor;
     210                d->scaleFactor = 1.0;
     211                d->lastScaleFactor = 1.0;
    211212            } else {
    212213                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;
    216219            d->changeFlags |= QPinchGesture::ScaleFactorChanged;
    217220
     
    224227            const qreal rotationAngle = startAngle - angle;
    225228            if (d->isNewSequence)
    226                 d->lastRotationAngle = rotationAngle;
     229                d->lastRotationAngle = 0.0;
    227230            else
    228231                d->lastRotationAngle = d->rotationAngle;
     
    263266
    264267    d->startCenterPoint = d->lastCenterPoint = d->centerPoint = QPointF();
    265     d->totalScaleFactor = d->lastScaleFactor = d->scaleFactor = 0;
     268    d->totalScaleFactor = d->lastScaleFactor = d->scaleFactor = 1;
    266269    d->totalRotationAngle = d->lastRotationAngle = d->rotationAngle = 0;
    267270
     
    301304    switch (event->type()) {
    302305    case QEvent::TouchBegin: {
    303         d->speed = 1;
    304         d->time = QTime::currentTime();
     306        d->velocityValue = 1;
     307        d->time.start();
    305308        d->started = true;
    306309        result = QGestureRecognizer::MayBeGesture;
     
    339342
    340343            const int distance = xDistance >= yDistance ? xDistance : yDistance;
    341             int elapsedTime = d->time.msecsTo(QTime::currentTime());
     344            int elapsedTime = d->time.restart();
    342345            if (!elapsedTime)
    343346                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;
    346348            d->swipeAngle = QLineF(p1.startScreenPos(), p1.screenPos()).angle();
    347349
     
    405407    d->lastPositions[0] = d->lastPositions[1] = d->lastPositions[2] = QPoint();
    406408    d->started = false;
    407     d->speed = 0;
    408     d->time = QTime();
     409    d->velocityValue = 0;
     410    d->time.invalidate();
    409411
    410412    QGestureRecognizer::reset(state);
     
    441443    case QEvent::TouchBegin: {
    442444        d->position = ev->touchPoints().at(0).pos();
     445        q->setHotSpot(ev->touchPoints().at(0).screenPos());
    443446        result = QGestureRecognizer::TriggerGesture;
    444447        break;
     
    507510        q->killTimer(d->timerId);
    508511        d->timerId = 0;
    509         return QGestureRecognizer::Ignore | QGestureRecognizer::ConsumeEventHint;
     512        return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint;
    510513    }
    511514
    512515    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
    517521    enum { TapRadius = 40 };
    518522
    519523    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);
    522528        if (d->timerId)
    523529            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:
    527551    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
    533553    case QEvent::TouchUpdate:
    534         if (q->state() != Qt::NoGesture && ev->touchPoints().size() == 1) {
     554        if (d->timerId && ev->touchPoints().size() == 1) {
    535555            QTouchEvent::TouchPoint p = ev->touchPoints().at(0);
    536556            QPoint delta = p.pos().toPoint() - p.startPos().toPoint();
    537557            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
    546575    default:
    547         result = QGestureRecognizer::Ignore;
    548         break;
    549     }
    550     return result;
     576        return QGestureRecognizer::Ignore;
     577    }
    551578}
    552579
     
    565592
    566593QT_END_NAMESPACE
     594
     595#endif // QT_NO_GESTURES
Note: See TracChangeset for help on using the changeset viewer.