return NULL;
}
+int MultiTouchTracker::leaveTouchPoint(int remainCnt)
+{
+ releaseGrabTouchPoint();
+
+ const int beforeCnt = touchPointList.count();
+ TouchPoint *point = NULL;
+
+ while (touchPointList.count() > remainCnt) {
+ point = touchPointList.last();
+ if (point != NULL) {
+ qDebug() << "ID" << point->getID() << "point releasing";
+
+ virtio_touchscreen_event(
+ point->getGuestPos().x(), point->getGuestPos().y(),
+ point->getID() - 1, 0);
+
+ delete point;
+ }
+
+ touchPointList.removeLast();
+ }
+
+ return beforeCnt - touchPointList.count();
+}
+
void MultiTouchTracker::mtProcessing(int mode, QPoint hostPos, QPoint guestPos)
{
if (mode >= MT_OFF && mode < MT_MAX) {
} else if ((point = searchTouchPoint(hostPos)) != NULL) { /* grab a touch */
qDebug() << "ID" << point->getID() << "point is taken";
grabTouchPoint = point;
- } else if (touchCnt >= 2) { /* last touch */
+ } else if (touchCnt >= MT_SYMM_MAX_POINT) { /* last touch */
/* supports up to 2 touch points */
point = touchPointList.last();
if (point != NULL) {
}
}
-void MultiTouchTracker::touchReleasing()
+void MultiTouchTracker::releaseGrabTouchPoint()
{
if (grabTouchPoint != NULL) {
qDebug() << "ID" << grabTouchPoint->getID() << "point let go";
void MultiTouchTracker::finishTracking()
{
- touchReleasing();
+ releaseGrabTouchPoint();
TouchPoint *point = NULL;
for (int i = 0; i < touchPointList.count(); i++) {
class TouchScreenHelper;
+#define MT_SYMM_MAX_POINT (2)
+
class TouchPoint
{
public:
int addTouchPoint(QPoint hostPos, QPoint guestPos);
TouchPoint *searchTouchPoint(QPoint targetPos);
TouchPoint *searchTouchPoint(int targetID);
- void touchReleasing();
+ int leaveTouchPoint(int remainCnt);
+ void releaseGrabTouchPoint();
void finishTracking();
void mtProcessing(int mode, QPoint, QPoint);