summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-01-16 13:19:27 +1000
committerQt by Nokia <qt-info@nokia.com>2012-01-16 04:53:16 +0100
commit011530ad3bdcb237323ade152bfa4a3a7c6996c8 (patch)
treed8188339bd1e8c3940f20b1a7352fea2858fe192
parent81a9909031b5f63f2dd6442513ec1c41fb3161bf (diff)
improve twist sensor gesture
Change-Id: I0ce64843ad6f012862e8da8e08d2e7bb9cae0526 Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp20
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h1
2 files changed, 15 insertions, 6 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
index e7a656f8..38b2d498 100644
--- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
@@ -65,7 +65,7 @@ inline qreal calcRoll(double Ax, double Ay, double Az)
}
QTwistSensorGestureRecognizer::QTwistSensorGestureRecognizer(QObject *parent) :
- QSensorGestureRecognizer(parent), detecting(0)
+ QSensorGestureRecognizer(parent), detecting(0), lastDegree(0)
{
}
@@ -82,13 +82,13 @@ void QTwistSensorGestureRecognizer::create()
qoutputrangelist outputranges = accel->outputRanges();
if (outputranges.count() > 0)
- accelRange = (int)(outputranges.at(0).maximum *2);
+ accelRange = (int)(outputranges.at(0).maximum);
else
accelRange = 44; //this should never happen
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
- timer->setInterval(250);
+ timer->setInterval(500);
}
@@ -119,6 +119,7 @@ bool QTwistSensorGestureRecognizer::isActive()
}
#define RESTING_VARIANCE 10
+#define THRESHOLD_DEGREES 40
void QTwistSensorGestureRecognizer::accelChanged()
{
@@ -126,14 +127,17 @@ void QTwistSensorGestureRecognizer::accelChanged()
qreal y = accel->reading()->y();
qreal z = accel->reading()->z();
+ if (abs(x) < 1)
+ return;
+
pitch = calcPitch(x, y, z);
roll = calcRoll(x, y, z);
qreal degrees = calc(pitch);
if (xList.count() > 4) {
-
- if (detecting && abs(degrees) < RESTING_VARIANCE) {
+ if (detecting &&
+ abs(lastDegree - degrees) > (accelRange/2)) {
if (lastX < 0) {
Q_EMIT twistLeft();
Q_EMIT detected("twistLeft");
@@ -142,9 +146,11 @@ void QTwistSensorGestureRecognizer::accelChanged()
Q_EMIT detected("twistRight");
}
detecting = false;
+ timer->stop();
+ lastX = degrees;
}
- if (abs(degrees) > 60 && abs(xList.last()) < RESTING_VARIANCE) {
+ if (!detecting && abs(degrees) > THRESHOLD_DEGREES) {
detecting = true;
timer->start();
lastX = degrees;
@@ -154,11 +160,13 @@ void QTwistSensorGestureRecognizer::accelChanged()
if (xList.count() > 5)
xList.removeLast();
xList.insert(0,degrees);
+ lastDegree = degrees;
}
void QTwistSensorGestureRecognizer::timeout()
{
detecting = false;
+ lastX = 0;
}
qreal QTwistSensorGestureRecognizer::calc(qreal yrot)
diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h
index df297a99..ec669cda 100644
--- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h
@@ -82,6 +82,7 @@ private:
qreal calc(qreal yrot);
bool detecting;
+ qreal lastDegree;
};
QT_END_NAMESPACE
#endif // QWFLICKSENSORGESTURERECOGNIZER_H