diff options
author | Määttä Antti <antti.maatta@qt.io> | 2017-04-12 14:26:41 +0300 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2017-05-09 08:59:20 +0000 |
commit | 540f11b0b3f1639990383e2a4c72f858b0ac01b2 (patch) | |
tree | 9778876f85990f285078c84a5a913ff53b6bbdd7 /src | |
parent | bb0f4b48390b5ddc9758f04f6ecd692072fb279f (diff) |
Scene2D cleanup - remove qml engine and source
Remove QQmlEngine constructor and source property. Update unit tests and
manual tests accordingly.
Task-number: QTBUG-58876
Change-Id: Ide06bb1381f48efa5378f9a008476734a33089c1
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick3d/quick3dscene2d/items/qscene2d.cpp | 78 | ||||
-rw-r--r-- | src/quick3d/quick3dscene2d/items/qscene2d.h | 12 | ||||
-rw-r--r-- | src/quick3d/quick3dscene2d/items/scene2dmanager.cpp | 112 | ||||
-rw-r--r-- | src/quick3d/quick3dscene2d/items/scene2dmanager_p.h | 12 |
4 files changed, 9 insertions, 205 deletions
diff --git a/src/quick3d/quick3dscene2d/items/qscene2d.cpp b/src/quick3d/quick3dscene2d/items/qscene2d.cpp index 3470ac9d8..cc8c0b4fe 100644 --- a/src/quick3d/quick3dscene2d/items/qscene2d.cpp +++ b/src/quick3d/quick3dscene2d/items/qscene2d.cpp @@ -91,20 +91,10 @@ namespace Quick { */ /*! - \qmlproperty QUrl Qt3D.Render::Scene2D::source - Holds the qml source url. - */ - -/*! \qmlproperty enumeration Qt3D.Render::Scene2D::renderPolicy Holds the render policy of this Scene2D. */ -/*! - \qmlproperty bool Qt3D.Render::Scene2D::loaded - Holds whether the source has been loaded. - */ - QScene2DPrivate::QScene2DPrivate() : Qt3DCore::QNodePrivate() , m_renderManager(new Scene2DManager(this)) @@ -125,56 +115,6 @@ QScene2DPrivate::~QScene2DPrivate() QScene2D::QScene2D(Qt3DCore::QNode *parent) : Qt3DCore::QNode(*new QScene2DPrivate, parent) { - Q_D(QScene2D); - connect(d->m_renderManager, &Scene2DManager::onLoadedChanged, - this, &QScene2D::sourceLoaded); -} - -QScene2D::QScene2D(QQmlEngine *engine, Qt3DCore::QNode *parent) - : Qt3DCore::QNode(*new QScene2DPrivate, parent) -{ - Q_D(QScene2D); - connect(d->m_renderManager, &Scene2DManager::onLoadedChanged, - this, &QScene2D::sourceLoaded); - d->m_renderManager->setEngine(engine); -} - -QScene2D::~QScene2D() -{ -} - -bool QScene2D::loaded() const -{ - Q_D(const QScene2D); - return d->m_renderManager->m_initialized; -} - -/*! - \property QScene2D::source - \brief Specifies the url for the qml. - - This property specifies the url to the qml being rendered to the texture. - The source must specify QQuickItem as a root. The item must specify width - and height. The rendered qml is scaled to the texture size. - The property can not be changed after the rendering has been initialized. - */ -QUrl QScene2D::source() const -{ - Q_D(const QScene2D); - return d->m_renderManager->m_source; -} - -void QScene2D::setSource(const QUrl &url) -{ - Q_D(QScene2D); - if (d->m_renderManager->m_initialized) { - qWarning() << "Unable to set source after initialization."; - return; - } - if (d->m_renderManager->m_source != url) { - d->m_renderManager->setSource(url); - emit sourceChanged(url); - } } QQuickItem* QScene2D::item() const @@ -260,30 +200,12 @@ bool QScene2D::event(QEvent *event) return true; } -/*! - Returns the qml engine used by the QScene2D. - */ -QQmlEngine *QScene2D::engine() const -{ - Q_D(const QScene2D); - return d->m_renderManager->m_qmlEngine; -} - bool QScene2D::isGrabMouseEnabled() const { Q_D(const QScene2D); return d->m_renderManager->m_grabMouse; } -/*! - \internal - */ -void QScene2D::sourceLoaded() -{ - emit loadedChanged(true); -} - - QVector<Qt3DCore::QEntity*> QScene2D::entities() { Q_D(const QScene2D); diff --git a/src/quick3d/quick3dscene2d/items/qscene2d.h b/src/quick3d/quick3dscene2d/items/qscene2d.h index 2c982668a..b40cff536 100644 --- a/src/quick3d/quick3dscene2d/items/qscene2d.h +++ b/src/quick3d/quick3dscene2d/items/qscene2d.h @@ -60,9 +60,7 @@ class QT3DQUICKSCENE2DSHARED_EXPORT QScene2D : public Qt3DCore::QNode Q_OBJECT Q_PROPERTY(Qt3DRender::QRenderTargetOutput *output READ output WRITE setOutput NOTIFY outputChanged) - Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged) Q_PROPERTY(QScene2D::RenderPolicy renderPolicy READ renderPolicy WRITE setRenderPolicy NOTIFY renderPolicyChanged) - Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged) Q_PROPERTY(QQuickItem *item READ item WRITE setItem NOTIFY itemChanged) Q_PROPERTY(bool grabMouse READ isGrabMouseEnabled WRITE setGrabMouseEnabled NOTIFY grabMouseChanged) @@ -77,15 +75,10 @@ public: Q_ENUM(RenderPolicy) explicit QScene2D(Qt3DCore::QNode *parent = nullptr); - QScene2D(QQmlEngine *engine, Qt3DCore::QNode *parent = nullptr); - ~QScene2D(); Qt3DRender::QRenderTargetOutput *output() const; - QUrl source() const; - bool loaded() const; QScene2D::RenderPolicy renderPolicy() const; QQuickItem *item() const; - QQmlEngine *engine() const; bool isGrabMouseEnabled() const; bool event(QEvent *event) Q_DECL_OVERRIDE; @@ -96,15 +89,12 @@ public: public Q_SLOTS: void setOutput(Qt3DRender::QRenderTargetOutput *output); - void setSource(const QUrl &url); void setRenderPolicy(QScene2D::RenderPolicy policy); void setItem(QQuickItem *item); void setGrabMouseEnabled(bool grab); Q_SIGNALS: void outputChanged(Qt3DRender::QRenderTargetOutput *output); - void sourceChanged(const QUrl &url); - void loadedChanged(bool loaded); void renderPolicyChanged(QScene2D::RenderPolicy policy); void itemChanged(QQuickItem *item); void grabMouseChanged(bool grab); @@ -114,8 +104,6 @@ protected: private: Qt3DCore::QNodeCreatedChangeBasePtr createNodeCreationChange() const Q_DECL_OVERRIDE; - - void sourceLoaded(); }; } // namespace Quick diff --git a/src/quick3d/quick3dscene2d/items/scene2dmanager.cpp b/src/quick3d/quick3dscene2d/items/scene2dmanager.cpp index f0d6a6e34..3a83a36fd 100644 --- a/src/quick3d/quick3dscene2d/items/scene2dmanager.cpp +++ b/src/quick3d/quick3dscene2d/items/scene2dmanager.cpp @@ -72,9 +72,7 @@ QWindow *RenderControl::renderWindow(QPoint *offset) Constructs qml render manager. */ Scene2DManager::Scene2DManager(QScene2DPrivate *priv) - : m_qmlEngine(nullptr) - , m_qmlComponent(nullptr) - , m_rootItem(nullptr) + : m_rootItem(nullptr) , m_item(nullptr) , m_priv(priv) , m_sharedObject(new Scene2DSharedObject(this)) @@ -83,8 +81,6 @@ Scene2DManager::Scene2DManager(QScene2DPrivate *priv) , m_initialized(false) , m_renderSyncRequested(false) , m_backendInitialized(false) - , m_noSourceMode(false) - , m_ownEngine(false) , m_grabMouse(false) { m_sharedObject->m_surface = new QOffscreenSurface; @@ -135,38 +131,17 @@ void Scene2DManager::requestRenderSync() void Scene2DManager::startIfInitialized() { - if (!m_initialized && m_backendInitialized) { - if (m_source.isValid() && !m_noSourceMode) { - // Create a QML engine. - if (!m_qmlEngine) { - m_qmlEngine = new QQmlEngine; - if (!m_qmlEngine->incubationController()) { - m_qmlEngine->setIncubationController(m_sharedObject->m_quickWindow - ->incubationController()); - } - } - - // create component - m_ownEngine = true; - m_qmlComponent = new QQmlComponent(m_qmlEngine, m_source); - if (m_qmlComponent->isLoading()) { - connect(m_qmlComponent, &QQmlComponent::statusChanged, - this, &Scene2DManager::run); - } else { - run(); - } - } else if (m_item != nullptr) { - m_rootItem = m_item; + if (!m_initialized && m_backendInitialized && m_item != nullptr) { + m_rootItem = m_item; - // Associate root item with the window. - m_rootItem->setParentItem(m_sharedObject->m_quickWindow->contentItem()); + // Associate root item with the window. + m_rootItem->setParentItem(m_sharedObject->m_quickWindow->contentItem()); - // Update window size. - updateSizes(); + // Update window size. + updateSizes(); - m_initialized = true; - m_sharedObject->setInitialized(); - } + m_initialized = true; + m_sharedObject->setInitialized(); } } @@ -177,52 +152,7 @@ void Scene2DManager::stopAndClean() m_sharedObject->requestQuit(); m_sharedObject->wait(); m_sharedObject->cleanup(); - if (m_ownEngine) { - QObject::disconnect(m_connection); - delete m_qmlEngine; - } - delete m_qmlComponent; - m_qmlEngine = nullptr; - m_qmlComponent = nullptr; - } -} - -void Scene2DManager::run() -{ - disconnect(m_qmlComponent, &QQmlComponent::statusChanged, this, &Scene2DManager::run); - - if (m_qmlComponent->isError()) { - QList<QQmlError> errorList = m_qmlComponent->errors(); - for (const QQmlError &error: errorList) - qWarning() << error.url() << error.line() << error; - return; - } - - QObject *rootObject = m_qmlComponent->create(); - if (m_qmlComponent->isError()) { - QList<QQmlError> errorList = m_qmlComponent->errors(); - for (const QQmlError &error: errorList) - qWarning() << error.url() << error.line() << error; - return; - } - - m_rootItem = qobject_cast<QQuickItem *>(rootObject); - if (!m_rootItem) { - qWarning("QScene2D: Root item is not a QQuickItem."); - delete rootObject; - return; } - - // The root item is ready. Associate it with the window. - m_rootItem->setParentItem(m_sharedObject->m_quickWindow->contentItem()); - - // Update window size. - updateSizes(); - - m_initialized = true; - m_sharedObject->setInitialized(); - - emit onLoadedChanged(); } void Scene2DManager::updateSizes() @@ -236,15 +166,8 @@ void Scene2DManager::updateSizes() m_sharedObject->m_quickWindow->setGeometry(0, 0, width, height); } -void Scene2DManager::setSource(const QUrl &url) -{ - m_source = url; - startIfInitialized(); -} - void Scene2DManager::setItem(QQuickItem *item) { - m_noSourceMode = true; m_item = item; startIfInitialized(); } @@ -346,23 +269,6 @@ void Scene2DManager::cleanup() stopAndClean(); } -void Scene2DManager::setEngine(QQmlEngine *engine) -{ - m_qmlEngine = engine; - m_ownEngine = false; - if (engine) { - m_connection = QObject::connect(engine, &QObject::destroyed, - this, &Scene2DManager::engineDestroyed); - } -} - -void Scene2DManager::engineDestroyed() -{ - QObject::disconnect(m_connection); - m_qmlEngine = nullptr; - m_ownEngine = false; -} - } // namespace Quick } // namespace Qt3DRender diff --git a/src/quick3d/quick3dscene2d/items/scene2dmanager_p.h b/src/quick3d/quick3dscene2d/items/scene2dmanager_p.h index d3c3a60a2..5f199969e 100644 --- a/src/quick3d/quick3dscene2d/items/scene2dmanager_p.h +++ b/src/quick3d/quick3dscene2d/items/scene2dmanager_p.h @@ -75,25 +75,19 @@ public: Scene2DManager(QScene2DPrivate *priv); ~Scene2DManager(); - QQmlEngine *m_qmlEngine; - QQmlComponent *m_qmlComponent; QQuickItem *m_rootItem; QQuickItem *m_item; QScene2DPrivate *m_priv; QSharedPointer<Scene2DSharedObject> m_sharedObject; - QUrl m_source; Qt3DCore::QNodeId m_id; - QMetaObject::Connection m_connection; QScene2D::RenderPolicy m_renderPolicy; bool m_requested; bool m_initialized; bool m_renderSyncRequested; bool m_backendInitialized; - bool m_noSourceMode; - bool m_ownEngine; bool m_grabMouse; void requestRender(); @@ -101,20 +95,14 @@ public: void doRenderSync(); void startIfInitialized(); void stopAndClean(); - void run(); void updateSizes(); - void setSource(const QUrl &url); void setItem(QQuickItem *item); bool event(QEvent *e) Q_DECL_OVERRIDE; bool forwardEvent(QEvent *event); - Q_SIGNAL void onLoadedChanged(); - void cleanup(); - void setEngine(QQmlEngine *engine); - void engineDestroyed(); }; } // namespace Quick |