// Rotate about the object being viewed. void QGLGraphicsNavigationItemPrivate::rotate(qreal deltax, qreal deltay) { QGLCamera *camera = viewportItem->camera(); QRectF rect = viewportItem->rect(); int rotation = camera->screenRotation(); if (rotation == 90 || rotation == 270) { qSwap(deltax, deltay); } if (rotation == 90 || rotation == 180) { deltax = -deltax; } if (rotation == 180 || rotation == 270) { deltay = -deltay; } qreal anglex = deltax * 90.0f / rect.width(); qreal angley = deltay * 90.0f / rect.height(); QQuaternion q = camera->pan(-anglex); q *= camera->tilt(-angley); camera->rotateCenter(q); }
void CubeItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if (navigating) { QPoint delta = event->pos().toPoint() - pressedPos; int deltax = delta.x(); int deltay = delta.y(); QGLCamera *camera = this->camera(); int rotation = camera->screenRotation(); if (rotation == 90 || rotation == 270) { qSwap(deltax, deltay); } if (rotation == 90 || rotation == 180) { deltax = -deltax; } if (rotation == 180 || rotation == 270) { deltay = -deltay; } qreal anglex = deltax * 90.0f / rect().width(); qreal angley = deltay * 90.0f / rect().height(); QQuaternion q = startNavCamera->pan(-anglex); q *= startNavCamera->tilt(-angley); camera->setEye(startNavCamera->eye()); camera->setCenter(startNavCamera->center()); camera->setUpVector(startNavCamera->upVector()); camera->rotateCenter(q); } else if (pressedFace != -1) { int face; QPoint pos = cubeIntersection (event->widget(), event->pos().toPoint(), &face); if (face != pressedFace) pos = QPoint(-1, -1); deliverSceneEvent(pos, event); return; } QGraphicsItem::mouseMoveEvent(event); }