forked from qt-creator/qt-creator
QmlDesigner: Fix orthographic camera zoom
Scale no longer affects cameras, so use magnification instead to do orthographic camera zooming. Fixes: QDS-10241 Change-Id: Ic31abfdf741369a494b8178109fa1c5b95fbdd1c Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -747,7 +747,8 @@ Item {
|
||||
clipNear: viewRoot.editView ? viewRoot.editView.orthoCamera.clipNear : 1
|
||||
position: viewRoot.editView ? viewRoot.editView.orthoCamera.position : Qt.vector3d(0, 0, 0)
|
||||
rotation: viewRoot.editView ? viewRoot.editView.orthoCamera.rotation : Qt.quaternion(1, 0, 0, 0)
|
||||
scale: viewRoot.editView ? viewRoot.editView.orthoCamera.scale : Qt.vector3d(0, 0, 0)
|
||||
horizontalMagnification: viewRoot.editView ? viewRoot.editView.orthoCamera.horizontalMagnification : 1
|
||||
verticalMagnification: viewRoot.editView ? viewRoot.editView.orthoCamera.verticalMagnification : 1
|
||||
}
|
||||
|
||||
MouseArea3D {
|
||||
|
@@ -154,16 +154,16 @@ float GeneralHelper::zoomCamera([[maybe_unused]] QQuick3DViewport *viewPort,
|
||||
float newZoomFactor = relative ? qBound(.01f, zoomFactor * multiplier, 100.f)
|
||||
: zoomFactor;
|
||||
|
||||
if (qobject_cast<QQuick3DOrthographicCamera *>(camera)) {
|
||||
// Ortho camera we can simply scale
|
||||
float orthoFactor = newZoomFactor;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
if (viewPort) {
|
||||
if (const QQuickWindow *w = viewPort->window())
|
||||
orthoFactor *= w->devicePixelRatio();
|
||||
if (auto orthoCamera = qobject_cast<QQuick3DOrthographicCamera *>(camera)) {
|
||||
// Ortho camera we can simply magnify
|
||||
if (newZoomFactor != 0.f) {
|
||||
orthoCamera->setHorizontalMagnification(1.f / newZoomFactor);
|
||||
orthoCamera->setVerticalMagnification(1.f / newZoomFactor);
|
||||
// Force update on transform, so gizmos get correctly scaled and positioned
|
||||
float x = orthoCamera->x();
|
||||
orthoCamera->setX(x + 1.f);
|
||||
orthoCamera->setX(x);
|
||||
}
|
||||
#endif
|
||||
camera->setScale(QVector3D(orthoFactor, orthoFactor, orthoFactor));
|
||||
} else if (qobject_cast<QQuick3DPerspectiveCamera *>(camera)) {
|
||||
// Perspective camera is zoomed by moving camera forward or backward while keeping the
|
||||
// look-at point the same
|
||||
|
Reference in New Issue
Block a user