diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditCameraController.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditCameraController.qml index 55e310f053d..f5a21dacb96 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditCameraController.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt5/EditCameraController.qml @@ -57,7 +57,7 @@ Item { _zoomFactor = cameraState[1]; camera.position = cameraState[2]; camera.rotation = cameraState[3]; - _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } @@ -70,7 +70,7 @@ Item { _zoomFactor = 1; camera.position = _defaultCameraPosition; camera.eulerRotation = _defaultCameraRotation; - _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } @@ -114,21 +114,21 @@ Item { if (!camera) return; - _zoomFactor = _generalHelper.zoomCamera(camera, distance, _defaultCameraLookAtDistance, + _zoomFactor = _generalHelper.zoomCamera(view3d, camera, distance, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, true); } onCameraChanged: { if (camera && _prevCamera) { // Reset zoom on previous camera to ensure it's properties are good to copy to new cam - _generalHelper.zoomCamera(_prevCamera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, _prevCamera, 0, _defaultCameraLookAtDistance, _lookAtPoint, 1, false); camera.position = _prevCamera.position; camera.rotation = _prevCamera.rotation; // Apply correct zoom to new camera - _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } _prevCamera = camera; diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditCameraController.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditCameraController.qml index 13743094219..bba05742315 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditCameraController.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/qt6/EditCameraController.qml @@ -57,7 +57,7 @@ Item { _zoomFactor = cameraState[1]; camera.position = cameraState[2]; camera.rotation = cameraState[3]; - _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } @@ -70,7 +70,7 @@ Item { _zoomFactor = 1; camera.position = _defaultCameraPosition; camera.eulerRotation = _defaultCameraRotation; - _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } @@ -114,21 +114,21 @@ Item { if (!camera) return; - _zoomFactor = _generalHelper.zoomCamera(camera, distance, _defaultCameraLookAtDistance, + _zoomFactor = _generalHelper.zoomCamera(view3d, camera, distance, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, true); } onCameraChanged: { if (camera && _prevCamera) { // Reset zoom on previous camera to ensure it's properties are good to copy to new cam - _generalHelper.zoomCamera(_prevCamera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, _prevCamera, 0, _defaultCameraLookAtDistance, _lookAtPoint, 1, false); camera.position = _prevCamera.position; camera.rotation = _prevCamera.rotation; // Apply correct zoom to new camera - _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, + _generalHelper.zoomCamera(view3d, camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } _prevCamera = camera; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp index 365b03a8f7b..4260921a378 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp @@ -176,14 +176,7 @@ void CameraGeometry::fillVertexData(QByteArray &vertexData, QByteArray &indexDat QRectF rect = m_viewPortRect; if (rect.isNull()) rect = QRectF(0, 0, 1000, 1000); // Let's have some visualization for null viewports - if (qobject_cast(m_camera)) { - // For some reason ortho cameras show double what projection suggests, - // so give them doubled viewport to match visualization to actual camera view - camera->calculateGlobalVariables(QRectF(0, 0, rect.width() * 2.0, - rect.height() * 2.0)); - } else { - camera->calculateGlobalVariables(rect); - } + camera->calculateGlobalVariables(rect); m = camera->projection.inverted(); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp index d3a8b4e8f54..67d134f6b32 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp @@ -130,8 +130,9 @@ QVector3D GeneralHelper::panCamera(QQuick3DCamera *camera, const QMatrix4x4 star return startLookAt + delta; } -float GeneralHelper::zoomCamera(QQuick3DCamera *camera, float distance, float defaultLookAtDistance, - const QVector3D &lookAt, float zoomFactor, bool relative) +float GeneralHelper::zoomCamera(QQuick3DViewport *viewPort, QQuick3DCamera *camera, float distance, + float defaultLookAtDistance, const QVector3D &lookAt, + float zoomFactor, bool relative) { // Emprically determined divisor for nice zoom float multiplier = 1.f + (distance / 40.f); @@ -140,7 +141,16 @@ float GeneralHelper::zoomCamera(QQuick3DCamera *camera, float distance, float de if (qobject_cast(camera)) { // Ortho camera we can simply scale - camera->setScale(QVector3D(newZoomFactor, newZoomFactor, newZoomFactor)); + float orthoFactor = newZoomFactor; +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + if (viewPort) { + if (const QQuickWindow *w = viewPort->window()) + orthoFactor *= w->devicePixelRatio(); + } +#else + Q_UNUSED(viewPort) +#endif + camera->setScale(QVector3D(orthoFactor, orthoFactor, orthoFactor)); } else if (qobject_cast(camera)) { // Perspective camera is zoomed by moving camera forward or backward while keeping the // look-at point the same @@ -249,7 +259,8 @@ QVector4D GeneralHelper::focusNodesToCamera(QQuick3DCamera *camera, float defaul float divisor = closeUp ? 900.f : 725.f; float newZoomFactor = updateZoom ? qBound(.01f, maxExtent / divisor, 100.f) : oldZoom; - float cameraZoomFactor = zoomCamera(camera, 0, defaultLookAtDistance, lookAt, newZoomFactor, false); + float cameraZoomFactor = zoomCamera(viewPort, camera, 0, defaultLookAtDistance, lookAt, + newZoomFactor, false); return QVector4D(lookAt, cameraZoomFactor); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h index c22f310eddd..381082415bc 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.h @@ -65,7 +65,7 @@ public: const QVector3D &startPosition, const QVector3D &startLookAt, const QVector3D &pressPos, const QVector3D ¤tPos, float zoomFactor); - Q_INVOKABLE float zoomCamera(QQuick3DCamera *camera, float distance, + Q_INVOKABLE float zoomCamera(QQuick3DViewport *viewPort, QQuick3DCamera *camera, float distance, float defaultLookAtDistance, const QVector3D &lookAt, float zoomFactor, bool relative); Q_INVOKABLE QVector4D focusNodesToCamera(QQuick3DCamera *camera, float defaultLookAtDistance,