_emul_state.emulator_condition = state;
}
-/* emulator multi-touch */
-void set_multi_touch_enable(int mode)
-{
- _emul_state.multitouch_enable = mode;
-}
-
-int get_multi_touch_enable(void)
-{
- return _emul_state.multitouch_enable;
-}
-
void set_emuld_connection(bool connected)
{
_emul_state.emuld_connection = connected;
bool get_sdb_connection(void);
int get_max_touch_point(void);
-/* multi-touch */
-void set_multi_touch_enable(int mode);
-int get_multi_touch_enable(void);
-
// cleaned-up
extern const char *launch_conf_file;
extern const char *bin_path;
isDragging = true;
if (tsHelper != NULL) {
- tsHelper->mousePressed(event, getGuestPos(event->pos()));
+ tsHelper->touchPressed(event->pos(), getGuestPos(event->pos()));
}
if (mouseHelper != NULL) {
mouseHelper->mousePressed();
}
if (tsHelper != NULL) {
- tsHelper->mouseReleased(event, getGuestPos(event->pos()));
+ tsHelper->touchReleased(event->pos(), getGuestPos(event->pos()));
}
if (mouseHelper != NULL) {
mouseHelper->mouseReleased();
QPoint clientPos(hostPosX, hostPosY);
qDebug() << "drag out of touch screen:" << clientPos;
- // TODO: modify event
- tsHelper->mouseReleased(event, getGuestPos(clientPos));
+ tsHelper->touchReleased(event->pos(), getGuestPos(clientPos));
} else {
- tsHelper->mouseMoved(event, getGuestPos(event->pos()));
+ tsHelper->touchMoved(event->pos(), getGuestPos(event->pos()));
}
}
}
keyCodeList.removeLast();
}
- /* disable multi-touch mode */
- if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
- qDebug() << "disable multi-touch";
+ if (mtTracker != NULL) {
+ /* disable multi-touch mode */
+ if (mtTracker->getMtMode() != MultiTouchTracker::MT_OFF) {
+ qDebug() << "disable multi-touch";
- set_multi_touch_enable(MultiTouchTracker::MT_OFF);
- mtTracker->finishTracking();
+ mtTracker->finishTracking();
+ }
}
}
int KeyboardHelper::keyCodeOperation(QKeyEvent *event, int keyCode)
{
/* keypad and specialKey translation */
- if (!hostNumLockState && (event->modifiers() == (Qt::KeypadModifier | Qt::ShiftModifier))) {
+ if (!hostNumLockState &&
+ (event->modifiers() == (Qt::KeypadModifier | Qt::ShiftModifier))) {
QMap<int, int>::iterator keypadIter = keypadMap.find(keyCode);
+
while (keypadIter != keypadMap.end()) {
if (keypadIter.key() == keyCode) {
keyCode = keypadIter.value();
case Qt::Key_Alt:
if (event->modifiers() == (Qt::ControlModifier | Qt::AltModifier)) {
qDebug() << "enable multi-touch mode: SYMM";
- set_multi_touch_enable(MultiTouchTracker::MT_SYMM);
+ mtTracker->setMtMode(MultiTouchTracker::MT_SYMM);
- mtTracker->leaveTouchPoint(MT_SYMM_MAX_POINT);
+ mtTracker->limitTouchCnt(MT_SYMM_MAX_POINT);
}
break;
case Qt::Key_Shift:
if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) {
qDebug() << "enable multi-touch mode: PARA";
- set_multi_touch_enable(MultiTouchTracker::MT_PARA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_PARA);
} else if (event->modifiers() == Qt::ShiftModifier) {
qDebug() << "enable multi-touch mode: SEPA";
- set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_SEPA);
}
break;
case Qt::Key_Control:
if (event->modifiers() == Qt::ControlModifier) {
qDebug() << "enable multi-touch mode: SEPA";
- set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_SEPA);
} else if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) {
qDebug() << "enable multi-touch mode: PARA";
- set_multi_touch_enable(MultiTouchTracker::MT_PARA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_PARA);
}
break;
default:
- if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
+ if (mtTracker->getMtMode() != MultiTouchTracker::MT_OFF) {
qDebug() << "disable multi-touch";
- set_multi_touch_enable(MultiTouchTracker::MT_OFF);
mtTracker->finishTracking();
}
case Qt::Key_Alt:
if (event->modifiers() == Qt::ControlModifier) {
qDebug() << "enabled multi-touch mode: SYMM -> SEPA";
- set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_SEPA);
} else {
qDebug() << "disable multi-touch";
- set_multi_touch_enable(MultiTouchTracker::MT_OFF);
mtTracker->finishTracking();
}
case Qt::Key_Shift:
if (event->modifiers() == Qt::ControlModifier) {
qDebug() << "enabled multi-touch mode: PARA -> SEPA";
- set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_SEPA);
} else {
qDebug() << "disable multi-touch";
- set_multi_touch_enable(MultiTouchTracker::MT_OFF);
mtTracker->finishTracking();
}
case Qt::Key_Control:
if (event->modifiers() == Qt::ShiftModifier) {
qDebug() << "enabled multi-touch mode: PARA -> SEPA";
- set_multi_touch_enable(MultiTouchTracker::MT_SEPA);
+ mtTracker->setMtMode(MultiTouchTracker::MT_SEPA);
} else {
qDebug() << "disable multi-touch";
- set_multi_touch_enable(MultiTouchTracker::MT_OFF);
mtTracker->finishTracking();
}
*
* Contact:
* GiWoong Kim <giwoong.kim@samsung.com>
- * Sangho Park <sangho1206.park@samsung.com>
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * Sangho Park <sangho.p@samsung.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
this->parent = parent;
this->maxTouchPoint = maxTouchPoint;
this->pointRadius = 16; // TODO:
- this->grabTouchPoint = NULL;
+
+ this->mtMode = MT_OFF;
+ this->selectedTouchPoint = NULL;
mtProcessingFunc[MT_OFF] = &MultiTouchTracker::processingOff;
mtProcessingFunc[MT_SEPA] = &MultiTouchTracker::processingSepa;
mtProcessingFunc[MT_PARA] = &MultiTouchTracker::processingPara;
mtProcessingFunc[MT_SYMM] = &MultiTouchTracker::processingSymm;
+ /* touch point image */
touchPointImage.fill(Qt::transparent);
QPainter painter(&touchPointImage);
return virtio_touchscreen_ready();
}
+void MultiTouchTracker::setMtMode(MultiTouchMode mode)
+{
+ mtMode = mode;
+}
+
+int MultiTouchTracker::getMtMode()
+{
+ return mtMode;
+}
+
int MultiTouchTracker::addTouchPoint(QPoint hostPos, QPoint guestPos)
{
const int touchCnt = touchPointList.count();
return NULL;
}
-int MultiTouchTracker::leaveTouchPoint(int remainCnt)
+int MultiTouchTracker::limitTouchCnt(int max)
{
- releaseGrabTouchPoint();
+ releaseSelectedTouchPoint();
const int beforeCnt = touchPointList.count();
TouchPoint *point = NULL;
- int diff;
+ int diff = 0;
- while (touchPointList.count() > remainCnt) {
+ while (touchPointList.count() > max) {
point = touchPointList.last();
if (point != NULL) {
qDebug() << "ID" << point->getID() << "point releasing";
delete point;
}
-
touchPointList.removeLast();
qt5_mt_count--;
return diff;
}
-void MultiTouchTracker::mtProcessing(int mode, QPoint hostPos, QPoint guestPos)
+void MultiTouchTracker::mtProcessing(QPoint hostPos, QPoint guestPos)
{
- if (mode >= MT_OFF && mode < MT_MAX) {
- (this->*(mtProcessingFunc[mode]))(hostPos, guestPos);
+ if (mtMode >= MT_OFF && mtMode < MT_MAX) {
+ (this->*(mtProcessingFunc[mtMode]))(hostPos, guestPos);
} else {
- qWarning() << "invalid MT mode:" << mode;
+ qWarning() << "invalid MT mode:" << mtMode;
}
}
TouchPoint *point = NULL;
const int touchCnt = touchPointList.count();
- if (grabTouchPoint != NULL) {
- grabTouchPoint->updatePos(hostPos, guestPos);
+ if (selectedTouchPoint != NULL) {
+ selectedTouchPoint->updatePos(hostPos, guestPos);
virtio_touchscreen_event(guestPos.x(), guestPos.y(),
- grabTouchPoint->getID() - 1, 1);
+ selectedTouchPoint->getID() - 1, 1);
return;
}
virtio_touchscreen_event(guestPos.x(), guestPos.y(), 0, 1);
} else if ((point = searchTouchPoint(hostPos)) != NULL) { /* grab a touch */
qDebug() << "ID" << point->getID() << "point is taken";
- grabTouchPoint = point;
+ selectedTouchPoint = point;
} else if (touchCnt == getMaxTouchPoint()) { /* last touch */
point = touchPointList.last();
if (point != NULL) {
TouchPoint *point = NULL;
const int touchCnt = touchPointList.count();
- if (grabTouchPoint != NULL) {
- const int hostPosDiffX = hostPos.x() - grabTouchPoint->getHostPos().x();
- const int hostPosDiffY = hostPos.y() - grabTouchPoint->getHostPos().y();
+ if (selectedTouchPoint != NULL) {
+ const int hostPosDiffX = hostPos.x() - selectedTouchPoint->getHostPos().x();
+ const int hostPosDiffY = hostPos.y() - selectedTouchPoint->getHostPos().y();
/* out of bounds checking */
const QRect screenRect(QPoint(0, 0),
virtio_touchscreen_event(guestPos.x(), guestPos.y(), 0, 1);
} else if ((point = searchTouchPoint(hostPos)) != NULL) { /* grab a touch */
qDebug() << "ID" << point->getID() << "point is taken";
- grabTouchPoint = point;
+ selectedTouchPoint = point;
} else if (touchCnt == getMaxTouchPoint()) { /* last touch */
/* do nothing */
return;
TouchPoint *point = NULL;
const int touchCnt = touchPointList.count();
- if (grabTouchPoint != NULL) {
- const int hostPosDiffX = hostPos.x() - grabTouchPoint->getHostPos().x();
- const int hostPosDiffY = hostPos.y() - grabTouchPoint->getHostPos().y();
+ if (selectedTouchPoint != NULL) {
+ const int hostPosDiffX = hostPos.x() - selectedTouchPoint->getHostPos().x();
+ const int hostPosDiffY = hostPos.y() - selectedTouchPoint->getHostPos().y();
/* move selected point */
- grabTouchPoint->updatePos(hostPos, guestPos);
+ selectedTouchPoint->updatePos(hostPos, guestPos);
virtio_touchscreen_event(guestPos.x(), guestPos.y(),
- grabTouchPoint->getID() - 1, 1);
+ selectedTouchPoint->getID() - 1, 1);
/* out of bounds checking */
const QRect screenRect(QPoint(0, 0),
for (int i = 0; i < touchPointList.count(); i++) {
point = touchPointList.at(i);
- if (point != NULL && point != grabTouchPoint) {
+ if (point != NULL && point != selectedTouchPoint) {
if (screenRegion.isNull() == false &&
screenRegion.contains(QPoint(
point->getHostPos().x() - hostPosDiffX,
/* move other points */
for (int i = 0; i < touchPointList.count(); i++) {
point = touchPointList.at(i);
- if (point != NULL && point != grabTouchPoint) {
+ if (point != NULL && point != selectedTouchPoint) {
const QPoint hostMovedPos(
point->getHostPos().x() - hostPosDiffX,
point->getHostPos().y() - hostPosDiffY);
virtio_touchscreen_event(guestPos.x(), guestPos.y(), 0, 1);
} else if ((point = searchTouchPoint(hostPos)) != NULL) { /* grab a touch */
qDebug() << "ID" << point->getID() << "point is taken";
- grabTouchPoint = point;
+ selectedTouchPoint = point;
} else if (touchCnt >= MT_SYMM_MAX_POINT) { /* last touch */
/* supports up to 2 touch points */
point = touchPointList.last();
}
}
-void MultiTouchTracker::releaseGrabTouchPoint()
+void MultiTouchTracker::releaseSelectedTouchPoint()
{
- if (grabTouchPoint != NULL) {
- qDebug() << "ID" << grabTouchPoint->getID() << "point let go";
- grabTouchPoint = NULL;
+ if (selectedTouchPoint != NULL) {
+ qDebug() << "ID" << selectedTouchPoint->getID() << "point let go";
+ selectedTouchPoint = NULL;
}
}
void MultiTouchTracker::finishTracking()
{
- releaseGrabTouchPoint();
+ setMtMode(MT_OFF);
+
+ releaseSelectedTouchPoint();
TouchPoint *point = NULL;
for (int i = 0; i < touchPointList.count(); i++) {
QList<TouchPoint *> getTouchPointList();
bool isTrackingReady();
- int addTouchPoint(QPoint hostPos, QPoint guestPos);
- TouchPoint *searchTouchPoint(QPoint targetPos);
- TouchPoint *searchTouchPoint(int targetID);
- int leaveTouchPoint(int remainCnt);
- void releaseGrabTouchPoint();
- void finishTracking();
-
- void mtProcessing(int mode, QPoint, QPoint);
enum MultiTouchMode {
MT_OFF = 0,
MT_SEPA,
MT_SYMM,
MT_MAX
};
+ void setMtMode(MultiTouchMode mode);
+ int getMtMode();
+
+ int addTouchPoint(QPoint hostPos, QPoint guestPos);
+ TouchPoint *searchTouchPoint(QPoint targetPos);
+ TouchPoint *searchTouchPoint(int targetID);
+ int limitTouchCnt(int remainCnt);
+
+ void mtProcessing(QPoint hostPos, QPoint guestPos);
+ void releaseSelectedTouchPoint();
+ void finishTracking();
private:
void processingOff(QPoint hostPos, QPoint guestPos);
TouchScreenHelper *parent;
int maxTouchPoint;
int pointRadius;
+ QImage touchPointImage;
- TouchPoint *grabTouchPoint;
+ int mtMode;
+ TouchPoint *selectedTouchPoint;
QList<TouchPoint *> touchPointList;
- QImage touchPointImage;
};
#endif // MULTITOUCHTRACKER_H
*
* Contact:
* GiWoong Kim <giwoong.kim@samsung.com>
- * Sangho Park <sangho1206.park@samsung.com>
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * Sangho Park <sangho.p@samsung.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
return mtTracker;
}
-void TouchScreenHelper::mousePressed(QMouseEvent *event, QPoint guestPos)
+void TouchScreenHelper::touchPressed(QPoint hostPos, QPoint guestPos)
{
/* multi-touch processing */
- const int mtMode = get_multi_touch_enable();
- if (mtMode != MultiTouchTracker::MT_OFF) {
- mtTracker->mtProcessing(mtMode, QPoint(event->x(), event->y()), guestPos);
+ if (mtTracker->getMtMode() != MultiTouchTracker::MT_OFF) {
+ mtTracker->mtProcessing(hostPos, guestPos);
return;
}
+ /* single-touch processing */
virtio_touchscreen_event(guestPos.x(), guestPos.y(), 0, 1);
}
-void TouchScreenHelper::mouseReleased(QMouseEvent *event, QPoint guestPos)
+void TouchScreenHelper::touchReleased(QPoint hostPos, QPoint guestPos)
{
- if (get_multi_touch_enable() != MultiTouchTracker::MT_OFF) {
- mtTracker->releaseGrabTouchPoint();
+ /* multi-touch processing */
+ if (mtTracker->getMtMode() != MultiTouchTracker::MT_OFF) {
+ mtTracker->releaseSelectedTouchPoint();
return;
}
+ /* single-touch processing */
virtio_touchscreen_event(guestPos.x(), guestPos.y(), 0, 0);
}
-void TouchScreenHelper::mouseMoved(QMouseEvent *event, QPoint guestPos)
+void TouchScreenHelper::touchMoved(QPoint hostPos, QPoint guestPos)
{
/* multi-touch processing */
- const int mtMode = get_multi_touch_enable();
- if (mtMode != MultiTouchTracker::MT_OFF) {
- mtTracker->mtProcessing(mtMode, QPoint(event->x(), event->y()), guestPos);
+ if (mtTracker->getMtMode() != MultiTouchTracker::MT_OFF) {
+ mtTracker->mtProcessing(hostPos, guestPos);
return;
}
+ /* single-touch processing */
virtio_touchscreen_event(guestPos.x(), guestPos.y(), 0, 1);
}
if (mtTracker != NULL) {
delete mtTracker;
- mtTracker = NULL;
}
}
void *getParent();
MultiTouchTracker *getMtTracker();
- void mousePressed(QMouseEvent *event, QPoint guestPos);
- void mouseReleased(QMouseEvent *event, QPoint guestPos);
- void mouseMoved(QMouseEvent *event, QPoint guestPos);
+ void touchPressed(QPoint hostPos, QPoint guestPos);
+ void touchReleased(QPoint hostPos, QPoint guestPos);
+ void touchMoved(QPoint hostPos, QPoint guestPos);
private:
void *parent;