diff options
author | Robert Brock <robert.brock@kdab.com> | 2016-04-05 16:09:57 +0100 |
---|---|---|
committer | Robert Brock <robert.brock@kdab.com> | 2016-04-19 10:17:48 +0000 |
commit | 5d059e75f96a7661b936ed036c44dfa5ee18a108 (patch) | |
tree | 66f09ce7a2d345a6d911c3be01478ae3b288ba13 /src | |
parent | d5b665cb40c25ff8ddb5ad7ebe74e04dd91c045b (diff) |
Changes to handle ScenePropertyChange
TextureImage loading job now notifies frontend
Change-Id: I6d725e4343c4f36a918c4deb38e6c832970fa5e8
Task-number: QTBUG-51453
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/frontend/qabstractfunctor.h | 8 | ||||
-rw-r--r-- | src/render/jobs/loadtexturedatajob.cpp | 9 | ||||
-rw-r--r-- | src/render/texture/qtextureimage_p.h | 7 | ||||
-rw-r--r-- | src/render/texture/textureimage.cpp | 11 | ||||
-rw-r--r-- | src/render/texture/textureimage_p.h | 2 |
5 files changed, 36 insertions, 1 deletions
diff --git a/src/render/frontend/qabstractfunctor.h b/src/render/frontend/qabstractfunctor.h index 715b43de8..e99953797 100644 --- a/src/render/frontend/qabstractfunctor.h +++ b/src/render/frontend/qabstractfunctor.h @@ -88,6 +88,14 @@ public: } }; +template<class T> +const T *functor_cast(const QAbstractFunctor *other) +{ + if (other->id() == functorTypeId<T>()) + return static_cast<const T *>(other); + return Q_NULLPTR; +} + } // Qt3D QT_END_NAMESPACE diff --git a/src/render/jobs/loadtexturedatajob.cpp b/src/render/jobs/loadtexturedatajob.cpp index 698167d13..fb9c466cf 100644 --- a/src/render/jobs/loadtexturedatajob.cpp +++ b/src/render/jobs/loadtexturedatajob.cpp @@ -41,6 +41,7 @@ #include <Qt3DRender/private/nodemanagers_p.h> #include <Qt3DRender/private/managers_p.h> #include <Qt3DRender/private/texturedatamanager_p.h> +#include <Qt3DRender/private/qtextureimage_p.h> #include <Qt3DRender/qtexturedata.h> #include <QThread> #include <Qt3DRender/private/job_common_p.h> @@ -60,7 +61,8 @@ LoadTextureDataJob::~LoadTextureDataJob() { } -static QPair<HTextureData, QTexImageData *> textureDataFromGenerator(TextureDataManager *textureDataManager, QTextureImageDataGeneratorPtr generator) +static QPair<HTextureData, QTexImageData *> textureDataFromGenerator(TextureDataManager *textureDataManager, + QTextureImageDataGeneratorPtr generator) { HTextureData textureDataHandle; QTexImageData *data = Q_NULLPTR; @@ -128,6 +130,11 @@ void LoadTextureDataJob::run() QPair<HTextureData, QTexImageData *> handleData = textureDataFromGenerator(textureDataManager, generator); + // If using QTextureImage, notify the frontend of the change in status + const QImageTextureDataFunctor *imageGenerator = functor_cast<QImageTextureDataFunctor>(generator.data()); + if (imageGenerator) + texImg->setStatus(imageGenerator->status()); + HTextureData textureDataHandle = handleData.first; QTexImageData *data = handleData.second; diff --git a/src/render/texture/qtextureimage_p.h b/src/render/texture/qtextureimage_p.h index c505e761e..173cbcdb1 100644 --- a/src/render/texture/qtextureimage_p.h +++ b/src/render/texture/qtextureimage_p.h @@ -94,6 +94,7 @@ public: QImage img; if (img.load(source)) { dataPtr->setImage(img); + return dataPtr; } dataPtr.reset(); @@ -110,10 +111,16 @@ public: return (otherFunctor != Q_NULLPTR && otherFunctor->m_url == m_url); } + QTextureImage::Status status() const + { + return m_status; + } + QT3D_FUNCTOR(QImageTextureDataFunctor) private: QUrl m_url; + QTextureImage::Status m_status; }; } // namespace Qt3DRender diff --git a/src/render/texture/textureimage.cpp b/src/render/texture/textureimage.cpp index 045b8e234..1b451f868 100644 --- a/src/render/texture/textureimage.cpp +++ b/src/render/texture/textureimage.cpp @@ -38,6 +38,7 @@ ****************************************************************************/ #include "textureimage_p.h" +#include <Qt3DCore/qbackendscenepropertychange.h> #include <Qt3DCore/qscenepropertychange.h> #include <Qt3DRender/private/managers_p.h> #include <Qt3DRender/private/texturedatamanager_p.h> @@ -176,6 +177,16 @@ void TextureImage::setTextureDataHandle(HTextureData handle) updateDNA(); } +void TextureImage::setStatus(QTextureImage::Status status) +{ + // Notify the frontend + QBackendScenePropertyChangePtr e(new QBackendScenePropertyChange(NodeUpdated, peerId())); + e->setPropertyName("status"); + e->setValue(status); + e->setTargetNode(peerId()); + notifyObservers(e); +} + void TextureImage::updateDNA() { m_dna = ::qHash(m_layer diff --git a/src/render/texture/textureimage_p.h b/src/render/texture/textureimage_p.h index 99a7912de..986d73729 100644 --- a/src/render/texture/textureimage_p.h +++ b/src/render/texture/textureimage_p.h @@ -54,6 +54,7 @@ #include <Qt3DRender/private/backendnode_p.h> #include <Qt3DRender/private/handle_types_p.h> #include <Qt3DRender/qabstracttexture.h> +#include <Qt3DRender/qtextureimage.h> #include <Qt3DRender/qabstracttextureimage.h> #include <qglobal.h> @@ -90,6 +91,7 @@ public: void setTextureManager(TextureManager *manager); void setTextureImageManager(TextureImageManager *manager); void setTextureDataManager(TextureDataManager *manager); + void setStatus(QTextureImage::Status status); void unsetDirty(); inline bool isDirty() const { return m_dirty; } |