}
/* 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();
}
}
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();
}
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();
}
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()
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();
}
if (touchCnt == 0) { /* first touch input */
- qDebug("mt sepa mode processing");
+ qDebug("MT_SEPA mode processing");
if (addTouchPoint(hostPos, guestPos) == -1) {
return;
}
/* 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();
}
if (touchCnt == 0) { /* first touch input */
- qDebug("mt para mode processing");
+ qDebug("MT_PARA mode processing");
if (addTouchPoint(hostPos, guestPos) == -1) {
return;
}
/* 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();
}
if (touchCnt == 0) { /* first touch input */
- qDebug("mt symm mode processing");
+ qDebug("MT_SYMM mode processing");
if (addTouchPoint(hostPos, guestPos) == -1) {
return;
class MultiTouchTracker
{
+ Q_ENUMS(MultiTouchMode)
+
public:
MultiTouchTracker(TouchScreenHelper* parent, int maxTouchPoint);
~MultiTouchTracker();
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;
};
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;
}
void TouchScreenHelper::mouseReleased(QMouseEvent *event, QPoint guestPos)
{
- if (get_multi_touch_enable() != 0) {
+ if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
mtTracker->touchReleasing();
return;
}
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;
}