void QXipIvWidget::wheelEvent(QWheelEvent* event) { // TODO: Find a solution for Linux and Mac #if WIN32 SbTime time; time.setToTimeOfDay(); SoMouseWheelEvent e; e.setTime(time); if (event->modifiers() & Qt::ShiftModifier) e.setShiftDown(TRUE); if (event->modifiers() & Qt::ControlModifier) e.setCtrlDown(TRUE); //#if WIN32 e.setDelta(event->delta()); e.setDelta(event->delta() / 120); e.setPosition( SbVec2s(event->pos().x(), this->height() - event->pos().y() ) ); //#endif if (m_sceneManager->processEvent(&e)) { processDelayQueue(); updateCursor(true); } else { updateCursor(false); } #endif }
void QXipIvWidget::mouseReleaseEvent(QMouseEvent* event) { event->accept(); if (m_mouseMode == RESIZE_NONE) { SbTime time; time.setToTimeOfDay(); SoMouseButtonEvent e; e.setTime(time); switch (event->button()) { default: case Qt::LeftButton: e.setButton(SoMouseButtonEvent::BUTTON1); break; case Qt::MidButton: e.setButton(SoMouseButtonEvent::BUTTON2); break; case Qt::RightButton: e.setButton(SoMouseButtonEvent::BUTTON3); break; } if (event->modifiers() & Qt::ShiftModifier) e.setShiftDown(TRUE); if (event->modifiers() & Qt::ControlModifier) e.setCtrlDown(TRUE); e.setState(SoButtonEvent::UP); e.setPosition(SbVec2s(event->pos().x(), m_height - event->pos().y())); if (m_sceneManager->processEvent(&e)) { processDelayQueue(); updateCursor(true); } else { updateCursor(false); } } m_mouseMode = RESIZE_NONE; }
void QXipIvWidget::mouseMoveEvent(QMouseEvent* event) { QWidget* pWidget = parentWidget()->parentWidget(); // qDebug() << "QXipIvWidget::mouseMoveEvent"; bool onResizeBorder = false; //if (!event->buttons()) //{ // if ((event->pos().x() > (this->width() - 10)) || (event->pos().y() > (this->height() - 10))) // { // if ((event->pos().x() > (this->width() - 10)) || (event->pos().y() > (this->height() - 10))) // { // if ((event->pos().x() > (this->width() - 10)) && (event->pos().y() > (this->height() - 10))) // { // setCursor(Qt::SizeFDiagCursor); // onResizeBorder = true; // } // else if (event->pos().x() > (this->width() - 10)) // { // setCursor(Qt::SizeHorCursor); // onResizeBorder = true; // } // else if (event->pos().y() > (this->height() - 10)) // { // setCursor(Qt::SizeVerCursor); // onResizeBorder = true; // } // } // } //} switch (m_mouseMode) { case RESIZE_NONE: if (!onResizeBorder) { event->accept(); SbTime time; time.setToTimeOfDay(); SoLocation2Event e; e.setTime(time); if (event->modifiers() & Qt::ShiftModifier) e.setShiftDown(TRUE); if (event->modifiers() & Qt::ControlModifier) e.setCtrlDown(TRUE); e.setPosition(SbVec2s(event->pos().x(), m_height - event->pos().y())); if (m_sceneManager->processEvent(&e)) { processDelayQueue(); updateCursor(true); } else { updateCursor(false); } } break; case RESIZE_WIDTH: { pWidget->resize(mapTo(pWidget, event->pos()).x() + 3, pWidget->size().height()); event->accept(); } break; case RESIZE_HEIGHT: { pWidget->resize(pWidget->size().width(), mapTo(pWidget, event->pos()).y() + 3); event->accept(); } break; case RESIZE_CORNER: { pWidget->resize(mapTo(pWidget, event->pos()).x() + 3, mapTo(pWidget, event->pos()).y() + 3); event->accept(); } break; } }
void QXipIvWidget::mousePressEvent(QMouseEvent* event) { //m_mouseMode = RESIZE_NONE; //if ((event->pos().x() > (this->width() - 10)) || (event->pos().y() > (this->height() - 10))) //{ // //if ((event->pos().x() > (this->width() - 10)) || (event->pos().y() > (this->height() - 10))) // { // if ((event->pos().x() > (this->width() - 10)) && (event->pos().y() > (this->height() - 10))) // { // m_mouseMode = RESIZE_CORNER; // setCursor(Qt::SizeFDiagCursor); // } // else if (event->pos().x() > (this->width() - 10)) // { // m_mouseMode = RESIZE_WIDTH; // setCursor(Qt::SizeHorCursor); // } // else if (event->pos().y() > (this->height() - 10)) // { // m_mouseMode = RESIZE_HEIGHT; // setCursor(Qt::SizeVerCursor); // } // } // event->accept(); // return; //} event->accept(); // Pass the QT mouse button event to open inventor SbTime time; time.setToTimeOfDay(); SoMouseButtonEvent e; e.setTime(time); switch (event->button()) { default: case Qt::LeftButton: e.setButton(SoMouseButtonEvent::BUTTON1); break; case Qt::MidButton: e.setButton(SoMouseButtonEvent::BUTTON2); break; case Qt::RightButton: emit mouseRightButtonPressed(); break; } if (event->modifiers() & Qt::ShiftModifier) e.setShiftDown(TRUE); if (event->modifiers() & Qt::ControlModifier) e.setCtrlDown(TRUE); e.setState(SoButtonEvent::DOWN); e.setPosition(SbVec2s(event->pos().x(), m_height - event->pos().y())); if (m_sceneManager->processEvent(&e)) { processDelayQueue(); updateCursor(true); } else { updateCursor(false); } }
void QCtkXipSGWidget::paintGL() { static bool testHack = true; if(testHack) { QStringList test; test.append("xipivcored.dll"); test.append("xipivcoregld.dll"); test.append("xipivdicomd.dll"); test.append("xipivoverlayd.dll"); test.append("xipivrendererd.dll"); test.append("xipivextrad.dll"); loadIVExtensions(test); loadIvFile("../vtkIvPropProject/simpleXIP/TestSceneGraph_Opaque_Transparent_Annotations.iv"); // loadIvFile("scenegraphs/cone.iv"); testHack = false; SoMFUInt32 *swapBuffersInfo = (SoMFUInt32 *) SoDB::getGlobalField("SwapBuffersInfo"); if(swapBuffersInfo) swapBuffersInfo = (SoMFUInt32 *) SoDB::createGlobalField(SbName("SwapBuffersInfo"), SoMFUInt32::getClassTypeId()); } processDelayQueue(); #ifdef WIN32 // FIXME: Make it work on Unix quint64 countAfterSwap; #endif /* WIN32 */ SbXipPerformanceTimer timer; renderScene(mSceneManager); float timeOfRenderPass = timer.elapsed() / 1000.0f; SbXipPerformanceTimer swapTime; swapBuffers(); gTimings[1] = swapTime.elapsed(); // swap time #ifdef WIN32 // FIXME: Make it work on Unix // Measure perf counter right after swap QueryPerformanceCounter((LARGE_INTEGER*) &countAfterSwap); #endif /* WIN32 */ float timeSinceLastRenderPass = mTimeSinceLastRenderPass.elapsed() / 1000.0f; mTimeSinceLastRenderPass.reset(); char tmp[100]; if (timeSinceLastRenderPass < (timeOfRenderPass + 100)) { // continues updates, print both current render time and time since last update int freq = 1000 / timeSinceLastRenderPass; sprintf(tmp, timeOfRenderPass >= 100 ? "%dx%d, %0.f ms, %d Hz" : "%dx%d, %0.1f ms, %d Hz", width(), height(), timeOfRenderPass, freq); } else { // only print current render time sprintf(tmp, timeOfRenderPass >= 100 ? "%dx%d, %0.f ms" : "%dx%d, %0.1f ms", width(), height(), timeOfRenderPass); } // store timings gTimings[0] = timer.elapsed(); // total time #ifdef WIN32 // FIXME: Make it work on Unix *((quint64*)&gTimings[2]) = countAfterSwap; // counter after swap SoMFUInt32 *swapBuffersInfo = (SoMFUInt32 *) SoDB::getGlobalField("SwapBuffersInfo"); //SoDebugError::postInfo("Radbuilder::renderCallback", "%d *** gTimings[2]: %d, field[2]: %d\n", (unsigned int) c4, gTimings[2], (*swapBuffersInfo)[2]); if ( swapBuffersInfo ) { swapBuffersInfo->setNum(6); swapBuffersInfo->setValues(0, 6, gTimings); } #endif /* WIN32 */ update(); }