diff options
Diffstat (limited to 'src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp')
-rw-r--r-- | src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp index 88af230b..d07a2eaa 100644 --- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp @@ -45,6 +45,8 @@ #include <QtCore/qmath.h> +#define TIMER_TIMEOUT 850 + QT_BEGIN_NAMESPACE QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) @@ -56,7 +58,11 @@ QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) lastY(0), lastZ(0), detecting(0), - whipOk(0){ + whipOk(0) + , lastTimestamp(0) + , timerActive(0) + , lapsedTime(0) +{ } QWhipSensorGestureRecognizer::~QWhipSensorGestureRecognizer() @@ -65,10 +71,6 @@ QWhipSensorGestureRecognizer::~QWhipSensorGestureRecognizer() void QWhipSensorGestureRecognizer::create() { - timer = new QTimer(this); - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); - timer->setSingleShot(true); - timer->setInterval(850); } QString QWhipSensorGestureRecognizer::id() const @@ -94,6 +96,9 @@ bool QWhipSensorGestureRecognizer::start() } else { active = false; } + lastTimestamp = 0; + timerActive = false; + lapsedTime = 0; return active; } @@ -107,8 +112,6 @@ bool QWhipSensorGestureRecognizer::stop() disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), this,SLOT(accelChanged(QAccelerometerReading *))); active = false; - timer->stop(); - return active; } @@ -131,6 +134,8 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) const qreal y = reading->y(); qreal z = reading->z(); + quint64 timestamp = reading->timestamp(); + if (zList.count() > 4) zList.removeLast(); @@ -163,14 +168,13 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) if (negativeList.count() > 5) negativeList.removeLast(); - if (z < WHIP_FACTOR && qAbs(diffX) > -(accelRange * .1285)//-5.0115 && qAbs(lastX) < 7 && qAbs(x) < 7) { whipMap.insert(0,true); - if (!detecting && !timer->isActive()) { - timer->start(); + if (!detecting && !timerActive) { + timerActive = true; detecting = true; } } else { @@ -190,6 +194,13 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) lastX = x; lastY = y; lastZ = z; + + if (timerActive && lastTimestamp > 0) + lapsedTime += (timestamp - lastTimestamp )/1000; + + if (timerActive && lapsedTime >= TIMER_TIMEOUT) { + timeout(); + } } void QWhipSensorGestureRecognizer::timeout() @@ -211,6 +222,7 @@ void QWhipSensorGestureRecognizer::checkForWhip() whipOk = true; else return; + if (whipOk) { bool ok = true; for (int i = 0; i < negativeList.count() - 1; i++) { @@ -224,7 +236,7 @@ void QWhipSensorGestureRecognizer::checkForWhip() } detecting = false; whipMap.clear(); - timer->stop(); + timerActive = false; } } |