From 36e42a1988e5c88c76c06415a1aaa19209a6e720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kera=CC=88nen=20Pasi?= Date: Tue, 8 Oct 2013 14:53:59 +0300 Subject: Fixing the camera preset change not re-rendering bug. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ie993f08b8e24910c1a956936a4c4bfa63b99c87f Reviewed-by: Mika Salmela Reviewed-by: Tomi Korpipää Reviewed-by: Miikka Heikkinen --- .../engine/abstract3dcontroller.cpp | 2 ++ src/datavisualization/engine/q3dscene.cpp | 21 +++++++++++++++++++++ src/datavisualization/engine/q3dscene.h | 3 +++ 3 files changed, 26 insertions(+) diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index e4286465..bfdc375e 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -64,6 +64,8 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) : setActiveInputHandler(inputHandler); connect(inputHandler, &QAbstract3DInputHandler::inputStateChanged, this, &Abstract3DController::emitNeedRender); + connect(m_scene, &Q3DScene::needRender, this, + &Abstract3DController::emitNeedRender); } Abstract3DController::~Abstract3DController() diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp index b607dc4a..9d60cf05 100644 --- a/src/datavisualization/engine/q3dscene.cpp +++ b/src/datavisualization/engine/q3dscene.cpp @@ -217,12 +217,33 @@ void Q3DScene::setActiveCamera(Q3DCamera *camera) camera->setParent(this); if (camera != d_ptr->m_camera) { + if (d_ptr->m_camera) { + disconnect(d_ptr->m_camera, &Q3DCamera::xRotationChanged, this, + &Q3DScene::emitNeedRender); + disconnect(d_ptr->m_camera, &Q3DCamera::yRotationChanged, this, + &Q3DScene::emitNeedRender); + } + d_ptr->m_camera = camera; d_ptr->m_changeTracker.cameraChanged = true; + + if (camera) { + connect(camera, &Q3DCamera::xRotationChanged, this, + &Q3DScene::emitNeedRender); + connect(camera, &Q3DCamera::yRotationChanged, this, + &Q3DScene::emitNeedRender); + } + emit activeCameraChanged(camera); + emitNeedRender(); } } +void Q3DScene::emitNeedRender() +{ + emit needRender(); +} + /*! * \property Q3DScene::activeLight * diff --git a/src/datavisualization/engine/q3dscene.h b/src/datavisualization/engine/q3dscene.h index 66a5aa64..745cef72 100644 --- a/src/datavisualization/engine/q3dscene.h +++ b/src/datavisualization/engine/q3dscene.h @@ -72,6 +72,8 @@ public: void setLightPositionRelativeToCamera(const QVector3D &relativePosition, qreal fixedRotation = 0.0, qreal distanceModifier = 0.0); +private: + void emitNeedRender(); signals: void viewportChanged(QRect viewport); @@ -81,6 +83,7 @@ signals: void activeCameraChanged(const Q3DCamera *camera); void activeLightChanged(const Q3DLight *light); void devicePixelRatioChanged(qreal pixelRatio); + void needRender(); private: QScopedPointer d_ptr; -- cgit v1.2.3