35 #include <qstmleftrightgesturerecogniser.h> |
35 #include <qstmleftrightgesturerecogniser.h> |
36 #include <qstmupdowngesturerecogniser.h> |
36 #include <qstmupdowngesturerecogniser.h> |
37 #include <qstmflickgesturerecogniser.h> |
37 #include <qstmflickgesturerecogniser.h> |
38 #include <qstmunknowngesturerecogniser.h> |
38 #include <qstmunknowngesturerecogniser.h> |
39 #include <qstmzoomgesturerecogniser.h> |
39 #include <qstmzoomgesturerecogniser.h> |
|
40 #include <qstmmaybetapgesturerecogniser.h> |
40 |
41 |
41 #include <qstmgestureapi.h> |
42 #include <qstmgestureapi.h> |
42 #include <qstmgestureevent.h> |
43 #include <qstmgestureevent.h> |
43 #include <QtGui> |
44 #include <QtGui> |
44 |
45 |
55 memcpy(&m_areaSettings[0], ¶ms.m_areaSettings[0], sizeof(m_areaSettings)); |
56 memcpy(&m_areaSettings[0], ¶ms.m_areaSettings[0], sizeof(m_areaSettings)); |
56 memcpy(&m_enabled[0], ¶ms.m_enabled[0], sizeof(m_enabled)); |
57 memcpy(&m_enabled[0], ¶ms.m_enabled[0], sizeof(m_enabled)); |
57 } |
58 } |
58 |
59 |
59 |
60 |
60 QStm_GestureEngineApi::QStm_GestureEngineApi() |
61 QStm_GestureEngineApi::QStm_GestureEngineApi() : m_gestureEngine(0), m_statemachine(0), m_config(0) |
61 { |
62 { |
62 init(); |
63 init(); |
63 } |
64 } |
64 |
65 |
65 void QStm_GestureEngineApi::init() |
66 void QStm_GestureEngineApi::init() |
66 { |
67 { |
67 //m_gf = new QStm_GestureFramework(); |
68 //m_gf = new QStm_GestureFramework(); |
68 m_gestureEngine = new QStm_GestureEngine(); |
69 m_gestureEngine = new QStm_GestureEngine(); |
69 m_statemachine = new QStm_StateMachine(); |
70 m_statemachine = new QStm_StateMachine(); |
70 m_statemachine->addUiEventObserver(m_gestureEngine); |
71 m_statemachine->addUiEventObserver(m_gestureEngine); |
71 m_config = new QStm_GestureParameters(); |
72 //m_config = new QStm_GestureParameters(); |
72 } |
73 } |
73 |
74 |
74 QStm_GestureEngineApi::~QStm_GestureEngineApi() |
75 QStm_GestureEngineApi::~QStm_GestureEngineApi() |
75 { |
76 { |
76 // Prevent reactivation of contexts as they remove themselves |
77 // Prevent reactivation of contexts as they remove themselves |
77 m_dtorPhase = true; |
78 m_dtorPhase = true; |
78 |
79 |
79 qDeleteAll(m_contexts.begin(), m_contexts.end()); |
80 qDeleteAll(m_contexts.begin(), m_contexts.end()); |
80 m_contexts.clear(); |
81 m_contexts.clear(); |
81 m_ctxtStack.clear(); |
82 m_ctxtStack.clear(); |
82 delete m_config; |
83 //delete m_config; |
83 delete m_gestureEngine; |
84 delete m_gestureEngine; |
84 delete m_statemachine; |
85 delete m_statemachine; |
85 } |
86 } |
86 |
87 |
87 QStm_GestureContext* QStm_GestureEngineApi::createContext(int /*aId*/ ) |
88 QStm_GestureContext* QStm_GestureEngineApi::createContext(int /*aId*/ ) |
197 m_statemachine->setTouchArea ( !filter ? 0 : touchAreaSizeInMm ); |
198 m_statemachine->setTouchArea ( !filter ? 0 : touchAreaSizeInMm ); |
198 m_statemachine->setTouchTimeout ( !filter ? 0 : touchArea.m_timeout); |
199 m_statemachine->setTouchTimeout ( !filter ? 0 : touchArea.m_timeout); |
199 int moveToleranceInMm = conf.param(qstmGesture::EMoveTolerance); |
200 int moveToleranceInMm = conf.param(qstmGesture::EMoveTolerance); |
200 m_statemachine->setMoveTolerance(moveToleranceInMm); |
201 m_statemachine->setMoveTolerance(moveToleranceInMm); |
201 |
202 |
|
203 qreal axisLock = conf.param(qstmGesture::EAxisLockThreshold) /100.f; |
|
204 |
202 QWidget* gestureContext = static_cast<QWidget*>(context.getOwner()); |
205 QWidget* gestureContext = static_cast<QWidget*>(context.getOwner()); |
203 QRect ctxtRect = gestureContext ? gestureContext->rect() : QRect(); |
206 QRect ctxtRect = gestureContext ? gestureContext->rect() : QRect(); |
204 if(gestureContext) { |
207 if(gestureContext) { |
205 QPoint p = gestureContext->mapToGlobal(QPoint(0,0)) ; |
208 QPoint p = gestureContext->mapToGlobal(QPoint(0,0)) ; |
206 ctxtRect.moveTo(p) ; |
209 ctxtRect.moveTo(p) ; |
275 using qstmGesture::QStm_LeftrightGestureRecogniser; |
278 using qstmGesture::QStm_LeftrightGestureRecogniser; |
276 |
279 |
277 if (conf.enabled(QStm_LeftrightGestureRecogniser::KUid)) { |
280 if (conf.enabled(QStm_LeftrightGestureRecogniser::KUid)) { |
278 QStm_LeftrightGestureRecogniser* gesture = NULL; |
281 QStm_LeftrightGestureRecogniser* gesture = NULL; |
279 initRecognizer(gesture, context, isNewCtx); |
282 initRecognizer(gesture, context, isNewCtx); |
|
283 gesture->setAxisLockThreshold(axisLock); |
|
284 |
280 } |
285 } |
281 |
286 |
282 // ===================================================== UP-DOWN |
287 // ===================================================== UP-DOWN |
283 using qstmGesture::QStm_UpdownGestureRecogniser; |
288 using qstmGesture::QStm_UpdownGestureRecogniser; |
284 |
289 |
285 if (conf.enabled(QStm_UpdownGestureRecogniser::KUid)) { |
290 if (conf.enabled(QStm_UpdownGestureRecogniser::KUid)) { |
286 QStm_UpdownGestureRecogniser* gesture = NULL; |
291 QStm_UpdownGestureRecogniser* gesture = NULL; |
287 initRecognizer(gesture, context, isNewCtx); |
292 initRecognizer(gesture, context, isNewCtx); |
|
293 gesture->setAxisLockThreshold(axisLock); |
288 } |
294 } |
289 |
295 |
290 // ===================================================== HOVER |
296 // ===================================================== HOVER |
291 using qstmGesture::QStm_HoveringGestureRecogniser; |
297 using qstmGesture::QStm_HoveringGestureRecogniser; |
292 |
298 |
309 gesture->setPanningSpeedLow ( conf.param(qstmGesture::EPanSpeedLow) / 100.f ); |
315 gesture->setPanningSpeedLow ( conf.param(qstmGesture::EPanSpeedLow) / 100.f ); |
310 gesture->setPanningSpeedHigh( conf.param(qstmGesture::EPanSpeedHigh) / 100.f ); |
316 gesture->setPanningSpeedHigh( conf.param(qstmGesture::EPanSpeedHigh) / 100.f ); |
311 } |
317 } |
312 } |
318 } |
313 |
319 |
314 // ===================================================== RELEASE |
320 // ===================================================== MAYBE TAP |
315 using qstmGesture::QStm_ReleaseGestureRecogniser; |
321 using qstmGesture::QStm_MaybeTapGestureRecogniser; |
316 |
322 |
317 if (conf.enabled(QStm_ReleaseGestureRecogniser::KUid)) { |
323 if (conf.enabled(QStm_MaybeTapGestureRecogniser::KUid)) { |
318 QStm_ReleaseGestureRecogniser* gesture = NULL; |
324 int pos = m_gestureEngine->findGesture(QStm_MaybeTapGestureRecogniser::KUid); |
319 initRecognizer(gesture, context, isNewCtx); |
325 QStm_MaybeTapGestureRecogniser* gesture = NULL; |
320 |
326 |
321 if(gesture) { |
327 if (pos > -1) { |
322 gesture->setArea(QRect()); |
328 gesture = static_cast<QStm_MaybeTapGestureRecogniser*>(m_gestureEngine->gestureAt(pos)); |
323 } |
329 gesture->addTapListener(&context, context.getOwner()); |
324 } |
330 } |
325 |
331 else { |
326 |
332 initRecognizer(gesture, context, isNewCtx); |
|
333 } |
|
334 |
|
335 if(gesture) { |
|
336 gesture->setTapRange( touchAreaSizeInMm ); |
|
337 } |
|
338 |
|
339 } |
|
340 |
|
341 |
327 // ===================================================== TAP / DOUBLE TAP |
342 // ===================================================== TAP / DOUBLE TAP |
328 // Add recognizer before any existing Flick, Release, Unknown |
343 // Add recognizer before any existing Flick, Release, Unknown |
329 // Add the gesture to the gesture engine |
344 // Add the gesture to the gesture engine |
330 using qstmGesture::QStm_TapGestureRecogniser; |
345 using qstmGesture::QStm_TapGestureRecogniser; |
331 |
346 |
359 if(gesture) { |
374 if(gesture) { |
360 qreal flickSpeed = conf.param(qstmGesture::EFlickSpeed) / 100.f; |
375 qreal flickSpeed = conf.param(qstmGesture::EFlickSpeed) / 100.f; |
361 gesture->setFlickingSpeed(flickSpeed); |
376 gesture->setFlickingSpeed(flickSpeed); |
362 } |
377 } |
363 } |
378 } |
|
379 |
|
380 // ===================================================== RELEASE |
|
381 using qstmGesture::QStm_ReleaseGestureRecogniser; |
|
382 |
|
383 if (conf.enabled(QStm_ReleaseGestureRecogniser::KUid)) { |
|
384 QStm_ReleaseGestureRecogniser* gesture = NULL; |
|
385 initRecognizer(gesture, context, isNewCtx); |
|
386 |
|
387 if(gesture) { |
|
388 gesture->setArea(QRect()); |
|
389 } |
|
390 } |
364 |
391 |
365 // ===================================================== UNKNOWN |
392 // ===================================================== UNKNOWN |
366 using qstmGesture::QStm_UnknownGestureRecogniser; |
393 using qstmGesture::QStm_UnknownGestureRecogniser; |
367 |
394 |
368 if (conf.enabled(QStm_UnknownGestureRecogniser::KUid)) { |
395 if (conf.enabled(QStm_UnknownGestureRecogniser::KUid)) { |
393 int tTimeAreaSizeInMm = tTimeArea.m_size.width(); |
420 int tTimeAreaSizeInMm = tTimeArea.m_size.width(); |
394 // NB: shape <-- TouchAreaShape |
421 // NB: shape <-- TouchAreaShape |
395 m_statemachine->setTouchTimeArea ( !filter ? 0 : tTimeAreaSizeInMm ); |
422 m_statemachine->setTouchTimeArea ( !filter ? 0 : tTimeAreaSizeInMm ); |
396 |
423 |
397 // Timeouts, Adjustments, etc. |
424 // Timeouts, Adjustments, etc. |
398 m_statemachine->setTouchSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::ESuppressTimeout)*1000) ; |
425 m_statemachine->setTouchSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::ESuppressTimeout)) ; |
399 m_statemachine->setMoveSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::EMoveSuppressTimeout)*1000) ; |
426 m_statemachine->setMoveSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::EMoveSuppressTimeout)) ; |
400 m_statemachine->enableCapacitiveUp (!filter ? 0 : conf.param(qstmGesture::ECapacitiveUpUsed)); |
427 m_statemachine->enableCapacitiveUp (!filter ? 0 : conf.param(qstmGesture::ECapacitiveUpUsed)); |
401 m_statemachine->enableYadjustment (!filter ? 0 : conf.param(qstmGesture::EAdjustYPos)); |
428 m_statemachine->enableYadjustment (!filter ? 0 : conf.param(qstmGesture::EAdjustYPos)); |
402 m_statemachine->enableLogging(context.m_logging); |
429 m_statemachine->enableLogging(context.m_logging); |
403 } |
430 } |
404 |
431 |
416 |
443 |
417 void QStm_GestureContext::init() |
444 void QStm_GestureContext::init() |
418 { |
445 { |
419 m_engine.m_contexts.append(this); |
446 m_engine.m_contexts.append(this); |
420 m_config = new QStm_GestureParameters(); |
447 m_config = new QStm_GestureParameters(); |
421 m_engine.getStateMachine()->addUiEventObserver(this); |
448 //m_engine.getStateMachine()->addUiEventObserver(this); |
422 |
449 |
423 for(int i = 0; i < qstmGesture::EStmGestureUid_Count; ++i) { |
450 for(int i = 0; i < qstmGesture::EStmGestureUid_Count; ++i) { |
424 m_recognizers[i] = NULL; |
451 m_recognizers[i] = NULL; |
425 } |
452 } |
426 |
453 |
623 QPoint vec = gesture->getLengthAndDirection(); |
650 QPoint vec = gesture->getLengthAndDirection(); |
624 gest->setLengthAndDirection(vec); |
651 gest->setLengthAndDirection(vec); |
625 gest->setSpeed(gesture->getSpeed()); |
652 gest->setSpeed(gesture->getSpeed()); |
626 QPoint pos = gesture->getLocation(); |
653 QPoint pos = gesture->getLocation(); |
627 gest->setPosition(pos); |
654 gest->setPosition(pos); |
|
655 QPoint pos2 = gesture->getLocation2(); |
|
656 gest->setPosition2(pos2); |
628 gest->setDetails(gesture->getDetails()); |
657 gest->setDetails(gesture->getDetails()); |
629 gest->setSpeedVec(gesture->getSpeedVec()); |
658 gest->setSpeedVec(gesture->getSpeedVec()); |
630 QWidget* w = static_cast<QWidget*>(gesture->target()); |
659 QWidget* w = static_cast<QWidget*>(gesture->target()); |
631 gest->setTarget(w); |
660 gest->setTarget(w); |
632 } |
661 } |
696 } |
725 } |
697 |
726 |
698 |
727 |
699 bool QStm_GestureContext::handleSymbianPlatformEvent(const QSymbianEvent* platEvent) |
728 bool QStm_GestureContext::handleSymbianPlatformEvent(const QSymbianEvent* platEvent) |
700 { |
729 { |
701 return m_engine.getStateMachine()->handleSymbianPlatformEvent(platEvent); |
730 return m_engine.getStateMachine()->handleSymbianPlatformEvent(platEvent); |
702 } |
731 } |
703 |
732 |
704 |
733 |
705 bool QStm_GestureContext::handleX11PlatformEvent(const XEvent* platEvent) |
734 bool QStm_GestureContext::handleX11PlatformEvent(const XEvent* platEvent) |
706 { |
735 { |
707 return m_engine.getStateMachine()->handleX11PlatformEvent(platEvent); |
736 return m_engine.getStateMachine()->handleX11PlatformEvent(platEvent); |
708 } |
737 } |
709 |
738 |
710 |
739 bool QStm_GestureContext::handleWinPlatformEvent(const void* platEvent) |
711 |
740 { |
|
741 return m_engine.getStateMachine()->handleWinPlatformEvent(platEvent); |
|
742 } |
|
743 |
|
744 void QStm_GestureContext::enableDblClick(bool enable) |
|
745 { |
|
746 m_engine.getStateMachine()->enableDblClick(enable); |
|
747 } |
|
748 |
|
749 void QStm_GestureContext::setLogging(int enabled) |
|
750 { |
|
751 m_logging = enabled; |
|
752 m_engine.getGestureEngine()->enableLogging(enabled); |
|
753 } |