bool QPAHiddTpHandler::updateTouchEvents(QList<QPAHiddTpHandler::HiddTouch>& hiddTouches) { bool triggerTouchEvent = false; for (QList<HiddTouch>::iterator it = m_touches.begin(); it != m_touches.end(); ++it) { it->seenInScan = false; } for (int i = 0; i < hiddTouches.size(); ++i) { //int oldMetaActiveTouches = m_metaActiveTouchesCount; HiddTouch& touch = hiddTouches[i]; if (touch.state == FingerDown) { addNewTouch(touch); triggerTouchEvent = true; } else { if (updateOldTouch(touch)) triggerTouchEvent = true; } /* if (m_metaActiveTouchesCount && m_metaActiveTouchesCount != oldMetaActiveTouches && !oldMetaActiveTouches) { //QWSServer::processKeyEvent(-1, Qt::Key_CoreNavi_Meta, Qt::MetaModifier, true, false); HostBase::instance()->setMetaModifier(true); } else if (oldMetaActiveTouches && !m_metaActiveTouchesCount) { //QWSServer::processKeyEvent(-1, Qt::Key_CoreNavi_Meta, Qt::NoModifier, false, false); HostBase::instance()->setMetaModifier(false); } */ if (touch.gestureKey != Qt::Key_unknown) { if (touch.gestureKey != Qt::Key_Flick) { //printf ("Sending Gesture Event %d\n", touch.gestureKey); //QWSServer::processKeyEvent(-1, touch.gestureKey, Qt::NoModifier, true, false); //QWSServer::processKeyEvent(-1, touch.gestureKey, Qt::NoModifier, false, false); } if (touch.gestureKey == Qt::Key_Flick #if !defined(TARGET_DESKTOP) || touch.gestureKey == Qt::Key_CoreNavi_SwipeDown #endif ) { m_screenEdgeFlickGesture->m_edge = ScreenEdgeFlickGesture::EdgeUnknown; if (advancedGestures)/*Preferences::instance()->sysUiEnableNextPrevGestures())*/ { const int INVALID_COORD = 0xFFFFFFFF; int xDown = INVALID_COORD; int yDown = INVALID_COORD; // finding the old touch to update for (QList<HiddTouch>::iterator it = m_touches.begin(); it != m_touches.end(); ++it) { if (it->hiddId == touch.hiddId) { xDown = it->xDown; yDown = it->yDown; break; } } if (xDown != INVALID_COORD && yDown != INVALID_COORD) { const int borderWidth = 25; const int minimumYLength = 25; if ((xDown < borderWidth) && (abs(touch.x) > minimumYLength) && (touch.xVelocity > 0) && (abs(touch.xVelocity) > abs(touch.yVelocity))) { printf("flick on left border. distance: %d, yDist = %d\n", abs(touch.x), touch.x - xDown); if((touch.x - xDown) >= minimumYLength) { m_screenEdgeFlickGesture->m_edge = ScreenEdgeFlickGesture::EdgeLeft; m_screenEdgeFlickGesture->m_yDistance = (touch.x - xDown); } else { printf("Rejected Flick\n"); } } else if ((xDown > (m_deviceWidth - borderWidth)) && (abs(touch.x - m_deviceWidth) > minimumYLength) && (touch.xVelocity < 0) && (abs(touch.xVelocity) > abs(touch.yVelocity))) { printf("flick on right border. distance: %d, yDist = %d\n", abs(touch.x - m_deviceWidth), xDown - touch.x); if((xDown - touch.x) >= minimumYLength){ m_screenEdgeFlickGesture->m_edge = ScreenEdgeFlickGesture::EdgeRight; m_screenEdgeFlickGesture->m_yDistance = (xDown - touch.x) ; } else { printf("Rejected Flick\n"); } } else if ((yDown < borderWidth) && (abs(touch.y) > minimumYLength) && (touch.yVelocity > 0) && (abs(touch.yVelocity) > abs(touch.xVelocity))) { printf("flick on top border. distance: %d, yDist = %d\n", abs(touch.y), touch.y - yDown); if((touch.y - yDown) >= minimumYLength) { m_screenEdgeFlickGesture->m_edge = ScreenEdgeFlickGesture::EdgeTop; m_screenEdgeFlickGesture->m_yDistance = (touch.y - yDown); } else { printf("Rejected Flick\n"); } } else if ((yDown > (m_deviceHeight - borderWidth)) && (abs(touch.y - m_deviceHeight) > minimumYLength) && (touch.yVelocity < 0) && (abs(touch.yVelocity) > abs(touch.xVelocity))) { printf("flick on bottom border. distance: %d, yDist = %d\n", abs(touch.y - m_deviceHeight), yDown - touch.y); if((yDown - touch.y) >= minimumYLength) { m_screenEdgeFlickGesture->m_edge = ScreenEdgeFlickGesture::EdgeBottom; m_screenEdgeFlickGesture->m_yDistance = (yDown - touch.y); } else { printf("Rejected Flick\n"); } } } if (m_screenEdgeFlickGesture->m_edge != ScreenEdgeFlickGesture::EdgeUnknown) { QList<QGesture *> gestureStartedList; QList<QGesture *> gestureFinishedList; m_screenEdgeFlickGesture->setHotSpot(m_lastTouchDown); m_screenEdgeFlickGesture->setState(Qt::GestureStarted); gestureStartedList.append(m_screenEdgeFlickGesture); // determine which widget this event will go to QWidget* window = QApplication::topLevelAt(m_lastTouchDown); if (window) { QWidget* widget = window->childAt(window->mapFromGlobal(m_lastTouchDown)); if (widget) { QGestureEvent gestureStartedEvent(gestureStartedList); QApplication::sendEvent((QObject*) widget, &gestureStartedEvent); m_screenEdgeFlickGesture->setState(Qt::GestureFinished); gestureFinishedList.append(m_screenEdgeFlickGesture); QGestureEvent gestureFinishedEvent(gestureFinishedList); QApplication::sendEvent((QObject*) widget, &gestureFinishedEvent); } } } } if (m_screenEdgeFlickGesture->m_edge == ScreenEdgeFlickGesture::EdgeUnknown) { QList<QGesture *> gestureStartedList; QList<QGesture *> gestureFinishedList; flickGesture->m_endPos = QPoint(touch.x, touch.y); flickGesture->m_velocity = transMap(QPoint(touch.xVelocity, touch.yVelocity)); //flickGesture->m_velocity = HostBase::instance()->map(QPoint(touch.xVelocity, touch.yVelocity)); flickGesture->setHotSpot(m_lastTouchDown); flickGesture->setState(Qt::GestureStarted); gestureStartedList.append(flickGesture); // determine which widget this event will go to QWidget* window = QApplication::topLevelAt(m_lastTouchDown); if (window) { QWidget* widget = window->childAt(window->mapFromGlobal(m_lastTouchDown)); if (widget) { QGestureEvent gestureStartedEvent(gestureStartedList); QApplication::sendEvent((QObject*) widget, &gestureStartedEvent); flickGesture->setState(Qt::GestureFinished); gestureFinishedList.append(flickGesture); QGestureEvent gestureFinishedEvent(gestureFinishedList); QApplication::sendEvent((QObject*) widget, &gestureFinishedEvent); } } } } } } for (QList<HiddTouch>::iterator it = m_touches.begin(); it != m_touches.end(); ++it) { if (!it->seenInScan) { g_critical("%s: Finger %lld went missing. lifting it up", __PRETTY_FUNCTION__, it->hiddId); // FIXME: this should be FingerCancel it->state = FingerUp; /* if (it->isMetaTouch) { --m_metaActiveTouchesCount; if (m_metaActiveTouchesCount == 0) { //QWSServer::processKeyEvent(-1, Qt::Key_CoreNavi_Meta, Qt::NoModifier, false, false); HostBase::instance()->setMetaModifier(false); } } */ triggerTouchEvent = true; } } if (triggerTouchEvent) { generateTouchEvent(); removeReleasedTouches(); return true; } return false; }
MainWindow::MainWindow() { //this->setStyleSheet("background-color: black;"); centralWidget = new QWidget(this); //centralWidget->setBackgroundRole(QPalette::Text); setCentralWidget(centralWidget); centralLayout = new SquareItemWithSidePaneLayout; QTimer *timer = new QTimer(this); //connect(timer, SIGNAL(timeout()), this, SLOT(timeStep())); //connect(timer, SIGNAL(timeout()), TimeSingleton::instance(), SLOT(timeStep())); connect(timer, SIGNAL(timeout()), this, SLOT(timeStep())); #ifdef USE_NETWORK_CLIENT connect(timer, SIGNAL(timeout()), &raw_touch_adapter, SLOT(generateTouchEvent())); connect(&raw_touch_adapter, SIGNAL(touchEvent(QTouchEvent *)), this, SLOT(touchEvent(QTouchEvent *))); #endif timer->start(10); createActions(); createMenus(); //setBackgroundRole(QPalette::Text); //QSpacerItem * spacerItem = new QSpacerItem(100, 20, QSizePolicy::Expanding, QSizePolicy::Expanding); //centralLayout->addItem(spacerItem, 0, 0); _side_pane = new SidePane(centralWidget); centralLayout->addWidget(_side_pane); //QGridLayout * sidepane_layout = new QGridLayout; //QPushButton * btn = new QPushButton("blah", sidepane); //QLabel * lbl = new QLabel("asdf", sidepane); //QListWidget * lwg = new QListWidget(sidepane); //lwg->insertItem(0, "blah"); //lwg->insertItem(0, "ablah"); //lwg->setEnabled(false); //btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); //lbl->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); //lwg->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); //QFont fnt("Myriad Pro", 24, QFont::Bold); //lbl->setFont(fnt ); //sidepane_layout->addWidget(btn); //sidepane_layout->addWidget(lbl); //sidepane_layout->addWidget(lwg); //sidepane->setLayout(sidepane_layout); //QSpacerItem * spacerItem2 = new QSpacerItem(100, 20, QSizePolicy::Expanding, QSizePolicy::Expanding); //centralLayout->addItem(spacerItem2, 0, 2); //QPushButton *pushButton = new QPushButton("blah"); //pushButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); //centralLayout->addWidget(pushButton, 0, 1); setWindowTitle(tr("Fat Finger Playground")); //resize(1280, 720); resize(1200,900); connect(_side_pane, SIGNAL(highlightCurrentBall()), this, SLOT(highlightCurrentBall())); connect(_side_pane, SIGNAL(changeStudy(QString)), this, SLOT(changeStudy(QString))); move(-1500,100); //glWidget->start(); _study = NULL; _gl_widget = NULL; changeStudy("config"); }