Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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");

}