summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensorgestures
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-05-22 10:10:28 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-24 05:08:15 +0200
commitc8c03ee6b2a4d7de1ca13cb5848589c8a6134d4d (patch)
tree33e668372c98457551e5b55aa2262efcd41b0cc5 /src/plugins/sensorgestures
parent17d908ba5205513e9ed0be33aebeb3736bda0326 (diff)
make hover gesture work better
make hover work when the ir prox is calibrated. Also make sure that a hand moving up after doing a cover does not trigger a hover signal. Change-Id: I8925c4d7dd53302b9d9950989e37ad991216f621 Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
Diffstat (limited to 'src/plugins/sensorgestures')
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp86
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h7
2 files changed, 67 insertions, 26 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
index 1534a669..b19973f6 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
QHoverSensorGestureRecognizer::QHoverSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),
- hoverOk(0), lastLightReading(0), detecting(0), active(0), initialReflectance(0)
+ hoverOk(0), detecting(0), active(0), initialReflectance(0), useHack(0)
{
}
@@ -57,15 +57,10 @@ QHoverSensorGestureRecognizer::~QHoverSensorGestureRecognizer()
void QHoverSensorGestureRecognizer::create()
{
- timer = new QTimer(this);
- connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
- timer->setSingleShot(true);
- timer->setInterval(1000);
-
timer2 = new QTimer(this);
connect(timer2,SIGNAL(timeout()),this,SLOT(timeout2()));
timer2->setSingleShot(true);
- timer2->setInterval(5000);
+ timer2->setInterval(3000);
}
QString QHoverSensorGestureRecognizer::id() const
@@ -83,6 +78,9 @@ bool QHoverSensorGestureRecognizer::start()
active = false;
}
detecting = false;
+ detectedHigh = 0;
+ initialReflectance = 0;
+ useHack = false;
return active;
}
@@ -92,9 +90,6 @@ bool QHoverSensorGestureRecognizer::stop()
disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
this,SLOT(irProximityReadingChanged(QIRProximityReading *)));
active = false;
- timer->stop();
- timer2->stop();
- initialReflectance = 0;
return active;
}
@@ -106,37 +101,86 @@ bool QHoverSensorGestureRecognizer::isActive()
void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReading *reading)
{
reflectance = reading->reflectance();
+ if (reflectance == 0)
+ return;
- if (initialReflectance == 0)
+ if (initialReflectance == 0) {
initialReflectance = reflectance;
+ }
+
+ if (initialReflectance > .2) {
+ useHack = true;
+ initialReflectance -= .1;
+ }
+ if (useHack)
+ reflectance -= .1;
+
+ if (detecting && !hoverOk) {
+ detectedHigh = qMax(detectedHigh, reflectance);
+ }
+
+ if (reflectance > 0.4) {
+ // if close stop detecting
+ hoverOk = false;
+ detecting = false;
+ detectedHigh = 0;
+ }
+
+
+ qreal detectedPercent = 100 - (detectedHigh / reflectance * 100);
- if (!detecting && reflectance - initialReflectance > 0.1) {
+ qint16 percentCheck;
+ if (useHack)
+ percentCheck = -60;
+ else
+ percentCheck = -101;
+
+ if (!detecting
+ && checkForHovering()) {
detecting = true;
- timer->start();
- timer2->start();
detectedHigh = reflectance;
-
- } else if (hoverOk && detecting
- && reflectance - initialReflectance < 0
- && initialReflectance / reflectance > 0.98) {
+ } else if (detecting
+ && detectedPercent < percentCheck
+ && !checkForHovering()) {
// went light again after 1 seconds
Q_EMIT hover();
Q_EMIT detected("hover");
hoverOk = false;
detecting = false;
+ detectedHigh = 0;
+ timer2->stop();
}
- if (reflectance > .60)
- detecting = false;
+ if (detecting && reflectance < 0.2) {
+ timeout();
+ }
+}
+
+bool QHoverSensorGestureRecognizer::checkForHovering()
+{
+ if ( (reflectance > 0.2 && reflectance < 0.4)
+ && (initialReflectance - reflectance) < -0.1)
+ return true;
+
+ return false;
}
+
void QHoverSensorGestureRecognizer::timeout()
{
- hoverOk = true;
+ if (checkForHovering()) {
+ hoverOk = true;
+ timer2->start();
+ } else {
+ detecting = false;
+ detectedHigh = 0;
+ }
}
void QHoverSensorGestureRecognizer::timeout2()
{
detecting = false;
+ hoverOk = false;
+ detectedHigh = 0;
}
QT_END_NAMESPACE
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
index 1e8cd051..27b30151 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
@@ -72,20 +72,17 @@ private slots:
void timeout();
void timeout2();
private:
-// bool proximity;
qreal reflectance;
- QTimer *timer;
QTimer *timer2;
bool hoverOk;
- qreal lastLightReading;
bool detecting;
qreal detectedHigh;
- qreal lastProx;
bool active;
qreal initialReflectance;
-
+ bool checkForHovering();
+ bool useHack;
};
QT_END_NAMESPACE