touch: declare function array for multi-touch processing
authorGiWoong Kim <giwoong.kim@samsung.com>
Sat, 2 May 2015 03:42:51 +0000 (12:42 +0900)
committerGiWoong Kim <giwoong.kim@samsung.com>
Mon, 4 May 2015 03:23:37 +0000 (12:23 +0900)
Change-Id: Ib3992cf13bbe3dc7cecd125a5b4168681902c5b8
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/ui/input/keyboardhelper.cpp
tizen/src/ui/input/multitouchtracker.cpp
tizen/src/ui/input/multitouchtracker.h
tizen/src/ui/input/touchscreenhelper.cpp

index 5000f18..731a064 100644 (file)
@@ -225,10 +225,10 @@ void KeyboardHelper::autoKeyRelease(void)
     }
 
     /* disable multi-touch mode */
-    if (get_multi_touch_enable() != 0) {
+    if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
         qDebug() << "disable multi-touch";
 
-        set_multi_touch_enable(0);
+        set_multi_touch_enable(MultiTouchTracker::MT_OFF);
         finishMtTracking();
     }
 }
@@ -291,36 +291,36 @@ void KeyboardHelper::pressFilterMtChecking(QKeyEvent *event)
     switch(event->key()) {
     case Qt::Key_Alt:
         if (event->modifiers() == (Qt::ControlModifier | Qt::AltModifier)) {
-            qDebug() << "enable multi-touch mode : 3";
-            set_multi_touch_enable(3);
+            qDebug() << "enable multi-touch mode : SYMM";
+            set_multi_touch_enable(MultiTouchTracker::MT_SYMM);
         }
 
         break;
     case Qt::Key_Shift:
         if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) {
-            qDebug() << "enable multi-touch mode : 2";
-            set_multi_touch_enable(2);
+            qDebug() << "enable multi-touch mode : PARA";
+            set_multi_touch_enable(MultiTouchTracker::MT_PARA);
         } else if (event->modifiers() == Qt::ShiftModifier) {
-            qDebug() << "enable multi-touch mode : 1";
-            set_multi_touch_enable(1);
+            qDebug() << "enable multi-touch mode : SEPA";
+            set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
         }
 
         break;
     case Qt::Key_Control:
         if (event->modifiers() == Qt::ControlModifier) {
-            qDebug() << "enable multi-touch mode : 1";
-            set_multi_touch_enable(1);
+            qDebug() << "enable multi-touch mode : SEPA";
+            set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
         } else if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) {
-            qDebug() << "enable multi-touch mode : 2";
-            set_multi_touch_enable(2);
+            qDebug() << "enable multi-touch mode : PARA";
+            set_multi_touch_enable(MultiTouchTracker::MT_PARA);
         }
 
         break;
     default:
-        if (get_multi_touch_enable() != 0) {
+        if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
             qDebug() << "disable multi-touch";
 
-            set_multi_touch_enable(0);
+            set_multi_touch_enable(MultiTouchTracker::MT_OFF);
             finishMtTracking();
         }
 
@@ -436,36 +436,36 @@ void KeyboardHelper::releaseFilterMtChecking(QKeyEvent *event)
     switch(event->key()) {
     case Qt::Key_Alt:
         if (event->modifiers() == Qt::ControlModifier) {
-            qDebug() << "enabled multi-touch mode : 3 -> 1";
-            set_multi_touch_enable(1);
+            qDebug() << "enabled multi-touch mode : SYMM -> SEPA";
+            set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
         } else {
             qDebug() << "disable multi-touch";
 
-            set_multi_touch_enable(0);
+            set_multi_touch_enable(MultiTouchTracker::MT_OFF);
             finishMtTracking();
         }
 
         break;
     case Qt::Key_Shift:
         if (event->modifiers() == Qt::ControlModifier) {
-            qDebug() << "enabled multi-touch mode : 2 -> 1";
-            set_multi_touch_enable(1);
+            qDebug() << "enabled multi-touch mode : PARA -> SEPA";
+            set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
         } else {
             qDebug() << "disable multi-touch";
 
-            set_multi_touch_enable(0);
+            set_multi_touch_enable(MultiTouchTracker::MT_OFF);
             finishMtTracking();
         }
 
         break;
     case Qt::Key_Control:
         if (event->modifiers() == Qt::ShiftModifier) {
-            qDebug() << "enabled multi-touch mode : 2 -> 1";
-            set_multi_touch_enable(1);
+            qDebug() << "enabled multi-touch mode : PARA -> SEPA";
+            set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
         } else {
             qDebug() << "disable multi-touch";
 
-            set_multi_touch_enable(0);
+            set_multi_touch_enable(MultiTouchTracker::MT_OFF);
             finishMtTracking();
         }
 
index 099325b..f9db5a3 100644 (file)
@@ -79,6 +79,11 @@ MultiTouchTracker::MultiTouchTracker(
     this->maxTouchPoint = maxTouchPoint;
     this->pointRadius = 16; // TODO:
     this->grabTouchPoint = NULL;
+
+    mtProcessingFunc[MT_OFF] = &MultiTouchTracker::processingOff;
+    mtProcessingFunc[MT_SEPA] = &MultiTouchTracker::processingSepa;
+    mtProcessingFunc[MT_PARA] = &MultiTouchTracker::processingPara;
+    mtProcessingFunc[MT_SYMM] = &MultiTouchTracker::processingSymm;
 }
 
 int MultiTouchTracker::getMaxTouchPoint()
@@ -137,8 +142,24 @@ TouchPoint *MultiTouchTracker::searchTouchPoint(int targetID)
     return NULL;
 }
 
+void MultiTouchTracker::mtProcessing(int mode, QPoint hostPos, QPoint guestPos)
+{
+    if (mode >= MT_OFF && mode < MT_MAX) {
+        (this->*(mtProcessingFunc[mode]))(hostPos, guestPos);
+    } else {
+        qWarning() << "invalid MT mode :" << mode;
+    }
+}
+
+void MultiTouchTracker::processingOff(QPoint hostPos, QPoint guestPos)
+{
+    qWarning("MT mode in not activated");
+
+    /* do nothing */
+}
+
 /* separated moving mode */
-void MultiTouchTracker::touchProcessingSepa(QPoint hostPos, QPoint guestPos)
+void MultiTouchTracker::processingSepa(QPoint hostPos, QPoint guestPos)
 {
     TouchPoint *point = NULL;
     const int touchCnt = touchPointList.count();
@@ -152,7 +173,7 @@ void MultiTouchTracker::touchProcessingSepa(QPoint hostPos, QPoint guestPos)
     }
 
     if (touchCnt == 0) { /* first touch input */
-        qDebug("mt sepa mode processing");
+        qDebug("MT_SEPA mode processing");
 
         if (addTouchPoint(hostPos, guestPos) == -1) {
             return;
@@ -189,7 +210,7 @@ void MultiTouchTracker::touchProcessingSepa(QPoint hostPos, QPoint guestPos)
 }
 
 /* parallel moving mode */
-void MultiTouchTracker::touchProcessingPara(QPoint hostPos, QPoint guestPos)
+void MultiTouchTracker::processingPara(QPoint hostPos, QPoint guestPos)
 {
     TouchPoint *point = NULL;
     const int touchCnt = touchPointList.count();
@@ -222,7 +243,7 @@ void MultiTouchTracker::touchProcessingPara(QPoint hostPos, QPoint guestPos)
     }
 
     if (touchCnt == 0) { /* first touch input */
-        qDebug("mt para mode processing");
+        qDebug("MT_PARA mode processing");
 
         if (addTouchPoint(hostPos, guestPos) == -1) {
             return;
@@ -247,7 +268,7 @@ void MultiTouchTracker::touchProcessingPara(QPoint hostPos, QPoint guestPos)
 }
 
 /* symmetrical moving mode */
-void MultiTouchTracker::touchProcessingSymm(QPoint hostPos, QPoint guestPos)
+void MultiTouchTracker::processingSymm(QPoint hostPos, QPoint guestPos)
 {
     TouchPoint *point = NULL;
     const int touchCnt = touchPointList.count();
@@ -285,7 +306,7 @@ void MultiTouchTracker::touchProcessingSymm(QPoint hostPos, QPoint guestPos)
     }
 
     if (touchCnt == 0) { /* first touch input */
-        qDebug("mt symm mode processing");
+        qDebug("MT_SYMM mode processing");
 
         if (addTouchPoint(hostPos, guestPos) == -1) {
             return;
index 2707cfd..1d102c4 100644 (file)
@@ -51,6 +51,8 @@ private:
 
 class MultiTouchTracker
 {
+    Q_ENUMS(MultiTouchMode)
+
 public:
     MultiTouchTracker(TouchScreenHelper* parent, int maxTouchPoint);
     ~MultiTouchTracker();
@@ -59,16 +61,29 @@ public:
     int addTouchPoint(QPoint hostPos, QPoint guestPos);
     TouchPoint *searchTouchPoint(QPoint targetPos);
     TouchPoint *searchTouchPoint(int targetID);
-    void touchProcessingSepa(QPoint hostPos, QPoint guestPos);
-    void touchProcessingPara(QPoint hostPos, QPoint guestPos);
-    void touchProcessingSymm(QPoint hostPos, QPoint guestPos);
     void touchReleasing();
     void finishTracking();
 
+    void mtProcessing(int mode, QPoint, QPoint);
+    enum MultiTouchMode {
+        MT_OFF = 0,
+        MT_SEPA,
+        MT_PARA,
+        MT_SYMM,
+        MT_MAX
+    };
+
 private:
+    void processingOff(QPoint hostPos, QPoint guestPos);
+    void processingSepa(QPoint hostPos, QPoint guestPos);
+    void processingPara(QPoint hostPos, QPoint guestPos);
+    void processingSymm(QPoint hostPos, QPoint guestPos);
+    void (MultiTouchTracker::*mtProcessingFunc[MT_MAX])(QPoint, QPoint);
+
     TouchScreenHelper *parent;
     int maxTouchPoint;
     int pointRadius;
+
     TouchPoint *grabTouchPoint;
     QList<TouchPoint *> touchPointList;
 };
index 9350459..f6f79cb 100644 (file)
@@ -53,14 +53,9 @@ void *TouchScreenHelper::getParent()
 void TouchScreenHelper::mousePressed(QMouseEvent *event, QPoint guestPos)
 {
     /* multi-touch processing */
-    if (get_multi_touch_enable() == 1) {
-        mtTracker->touchProcessingSepa(QPoint(event->x(), event->y()), guestPos);
-        return;
-    } else if (get_multi_touch_enable() == 2) {
-        mtTracker->touchProcessingPara(QPoint(event->x(), event->y()), guestPos);
-        return;
-    } else if (get_multi_touch_enable() == 3) {
-        mtTracker->touchProcessingSymm(QPoint(event->x(), event->y()), guestPos);
+    const int mtMode = get_multi_touch_enable();
+    if (mtMode != MultiTouchTracker::MT_OFF) {
+        mtTracker->mtProcessing(mtMode, QPoint(event->x(), event->y()), guestPos);
         return;
     }
 
@@ -69,7 +64,7 @@ void TouchScreenHelper::mousePressed(QMouseEvent *event, QPoint guestPos)
 
 void TouchScreenHelper::mouseReleased(QMouseEvent *event, QPoint guestPos)
 {
-    if (get_multi_touch_enable() != 0) {
+    if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
         mtTracker->touchReleasing();
         return;
     }
@@ -80,14 +75,9 @@ void TouchScreenHelper::mouseReleased(QMouseEvent *event, QPoint guestPos)
 void TouchScreenHelper::mouseMoved(QMouseEvent *event, QPoint guestPos)
 {
     /* multi-touch processing */
-    if (get_multi_touch_enable() == 1) {
-        mtTracker->touchProcessingSepa(QPoint(event->x(), event->y()), guestPos);
-        return;
-    } else if (get_multi_touch_enable() == 2) {
-        mtTracker->touchProcessingPara(QPoint(event->x(), event->y()), guestPos);
-        return;
-    } else if (get_multi_touch_enable() == 3) {
-        mtTracker->touchProcessingSymm(QPoint(event->x(), event->y()), guestPos);
+    const int mtMode = get_multi_touch_enable();
+    if (mtMode != MultiTouchTracker::MT_OFF) {
+        mtTracker->mtProcessing(mtMode, QPoint(event->x(), event->y()), guestPos);
         return;
     }