From 53db3ea60f116e6a732414c38bf0e0485af1b1d2 Mon Sep 17 00:00:00 2001 From: GiWoong Kim Date: Sat, 2 May 2015 12:42:51 +0900 Subject: [PATCH] touch: declare function array for multi-touch processing Change-Id: Ib3992cf13bbe3dc7cecd125a5b4168681902c5b8 Signed-off-by: GiWoong Kim --- tizen/src/ui/input/keyboardhelper.cpp | 46 ++++++++++++++++---------------- tizen/src/ui/input/multitouchtracker.cpp | 33 ++++++++++++++++++----- tizen/src/ui/input/multitouchtracker.h | 21 ++++++++++++--- tizen/src/ui/input/touchscreenhelper.cpp | 24 +++++------------ 4 files changed, 75 insertions(+), 49 deletions(-) diff --git a/tizen/src/ui/input/keyboardhelper.cpp b/tizen/src/ui/input/keyboardhelper.cpp index 5000f18..731a064 100644 --- a/tizen/src/ui/input/keyboardhelper.cpp +++ b/tizen/src/ui/input/keyboardhelper.cpp @@ -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(); } diff --git a/tizen/src/ui/input/multitouchtracker.cpp b/tizen/src/ui/input/multitouchtracker.cpp index 099325b..f9db5a3 100644 --- a/tizen/src/ui/input/multitouchtracker.cpp +++ b/tizen/src/ui/input/multitouchtracker.cpp @@ -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; diff --git a/tizen/src/ui/input/multitouchtracker.h b/tizen/src/ui/input/multitouchtracker.h index 2707cfd..1d102c4 100644 --- a/tizen/src/ui/input/multitouchtracker.h +++ b/tizen/src/ui/input/multitouchtracker.h @@ -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 touchPointList; }; diff --git a/tizen/src/ui/input/touchscreenhelper.cpp b/tizen/src/ui/input/touchscreenhelper.cpp index 9350459..f6f79cb 100644 --- a/tizen/src/ui/input/touchscreenhelper.cpp +++ b/tizen/src/ui/input/touchscreenhelper.cpp @@ -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; } -- 2.7.4