AbstractScrollArea::AbstractScrollArea(QGraphicsWidget *parent) : GvbWidget(parent) , m_viewport(0) , m_horizontalScrollBar(0) , m_verticalScrollBar(0) , m_prevHorizontalValue(0.0) , m_prevVerticalValue(0.0) { setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setContentsMargins(0, 0, 0, 0); m_horizontalScrollBar = new ScrollBar(Qt::Horizontal, this); m_horizontalScrollBar->hide(); m_horizontalScrollBar->setContentsMargins(0, 0, 0, 0); m_horizontalScrollBarPolicy = Qt::ScrollBarAsNeeded; m_horizontalScrollBar->setZValue(zValue()+1); // Raise scroll bar to top m_horizontalScrollBar->setVisible(false); connect(m_horizontalScrollBar, SIGNAL(sliderPositionChange(qreal)), this, SLOT(horizontalScroll(qreal))); connect(m_horizontalScrollBar, SIGNAL(sliderPressed()), this, SLOT(horizontalScrollStart())); m_verticalScrollBar = new ScrollBar(Qt::Vertical, this); m_verticalScrollBar->hide(); m_verticalScrollBar->setContentsMargins(0, 0, 0, 0); m_verticalScrollBarPolicy = Qt::ScrollBarAsNeeded; m_verticalScrollBar->setZValue(zValue()+1); // Raise scroll bar to top m_verticalScrollBar->setVisible(false); connect(m_verticalScrollBar, SIGNAL(sliderPositionChange(qreal)), this, SLOT(verticalScroll(qreal))); connect(m_verticalScrollBar, SIGNAL(sliderPressed()), this, SLOT(verticalScrollStart())); QGraphicsWidget *viewport = new QGraphicsWidget; setViewport(viewport); }
void moveMouse() { // gesture analysis barycBufferX[barycBufferIndex] = barycX; barycBufferY[barycBufferIndex] = barycY; barycBufferZ[barycBufferIndex] = barycZ; barycBufferIndex = (barycBufferIndex + 1) % HAND_POS_BUFFER_SIZE; if (isOpenHand) { int prevBarycBufferIndex = (barycBufferIndex > 0) ? barycBufferIndex-1 : HAND_POS_BUFFER_SIZE-1; int countX = -round((barycBufferX[barycBufferIndex] - barycBufferX[prevBarycBufferIndex]) * 600); int countY = round((barycBufferY[barycBufferIndex] - barycBufferY[prevBarycBufferIndex]) * 600); verticalScroll(countX, countY); printf("Scrolling > countX: %d\n", countX); return; } double meanBarycX = 0; double meanBarycY = 0; double meanBarycZ = 0; int i; for (i=0; i<HAND_POS_BUFFER_SIZE; i++) { meanBarycX += barycBufferX[i] / HAND_POS_BUFFER_SIZE; meanBarycY += barycBufferY[i] / HAND_POS_BUFFER_SIZE; meanBarycZ += barycBufferZ[i] / HAND_POS_BUFFER_SIZE; } mousePosX = round(-meanBarycX * 1280 + 640); mousePosY = round(meanBarycY * 1280 + 400); if (leftButtonState == MOUSE_CLICK_UP && normVecY < -0.45) { leftButtonPressed(mousePosX, mousePosY); leftButtonState = MOUSE_CLICK_DOWN; printf("Mouse click left down\n"); } else if (leftButtonState == MOUSE_CLICK_DOWN && normVecY >= -0.45 ) { leftButtonReleased(mousePosX, mousePosY); leftButtonState = MOUSE_CLICK_UP; printf("Mouse click left up\n"); } else if (rightButtonState == MOUSE_CLICK_UP && normVecX < -0.5) { rightButtonPressed(mousePosX, mousePosY); rightButtonState = MOUSE_CLICK_DOWN; printf("Mouse click right down\n"); } else if (rightButtonState == MOUSE_CLICK_DOWN && normVecX >= -0.5 ) { rightButtonReleased(mousePosX, mousePosY); rightButtonState = MOUSE_CLICK_UP; printf("Mouse click right up\n"); } else { moveCursor(mousePosX, mousePosY); } }