diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-01-28 15:06:57 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-08 15:02:04 +0000 |
commit | c8970e7c98cb82031b46b77149d852a538e91874 (patch) | |
tree | cdc6d4c383a9860c0f43232fd0f7582dd9660dec /src/quick3d/quick3drenderer | |
parent | af3eb98b22a83275335d6ac702ed7ba0e8b394bb (diff) |
Quick3DTextureExtension provided list of QAbstractTextureImage to QML
Texture2D, TextureCubeMap still using their old extensions to not break
examples for now.
Change-Id: I1ad8b37acb3cb15582136be7368c94d8c7c77a4b
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/quick3d/quick3drenderer')
-rw-r--r-- | src/quick3d/quick3drenderer/items/quick3dtexture.cpp | 45 | ||||
-rw-r--r-- | src/quick3d/quick3drenderer/items/quick3dtexture.h | 20 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/quick3d/quick3drenderer/items/quick3dtexture.cpp b/src/quick3d/quick3drenderer/items/quick3dtexture.cpp index afe84ddfb..01689b432 100644 --- a/src/quick3d/quick3drenderer/items/quick3dtexture.cpp +++ b/src/quick3d/quick3drenderer/items/quick3dtexture.cpp @@ -237,6 +237,51 @@ void Quick3DTextureCubeMapExtension::loadFace(const QUrl &faceUrl, QAbstractText } } +Quick3DTextureExtension::Quick3DTextureExtension(QObject *parent) + : QObject(parent) +{ +} + +QQmlListProperty<QAbstractTextureImage> Quick3DTextureExtension::textureImages() +{ + return QQmlListProperty<QAbstractTextureImage>(this, 0, + &Quick3DTextureExtension::appendTextureImage, + &Quick3DTextureExtension::textureImageCount, + &Quick3DTextureExtension::textureImageAt, + &Quick3DTextureExtension::clearTextureImageList); +} + +void Quick3DTextureExtension::appendTextureImage(QQmlListProperty<QAbstractTextureImage> *list, QAbstractTextureImage *textureImage) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + self->parentTexture()->addTextureImage(textureImage); +} + +QAbstractTextureImage *Quick3DTextureExtension::textureImageAt(QQmlListProperty<QAbstractTextureImage> *list, int index) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + return self->parentTexture()->textureImages().at(index); + return Q_NULLPTR; +} + +int Quick3DTextureExtension::textureImageCount(QQmlListProperty<QAbstractTextureImage> *list) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + return self->parentTexture()->textureImages().count(); + return 0; +} + +void Quick3DTextureExtension::clearTextureImageList(QQmlListProperty<QAbstractTextureImage> *list) +{ + Quick3DTextureExtension *self = qobject_cast<Quick3DTextureExtension *>(list->object); + if (self) + Q_FOREACH (QAbstractTextureImage *img, self->parentTexture()->textureImages()) + self->parentTexture()->removeTextureImage(img); +} + } // Quick } // Render diff --git a/src/quick3d/quick3drenderer/items/quick3dtexture.h b/src/quick3d/quick3drenderer/items/quick3dtexture.h index 8aa1c3cf1..7dfa08859 100644 --- a/src/quick3d/quick3drenderer/items/quick3dtexture.h +++ b/src/quick3d/quick3drenderer/items/quick3dtexture.h @@ -46,6 +46,7 @@ #include <Qt3DQuick/quick3dnode.h> #include <Qt3DRenderer/qtexture.h> +#include <QQmlListProperty> #include <QUrl> QT_BEGIN_NAMESPACE @@ -74,6 +75,25 @@ private: inline Qt3D::QAbstractTextureProvider *parentTexture() const { return qobject_cast<Qt3D::QAbstractTextureProvider *>(parent()); } }; +class QT3DQUICKRENDERERSHARED_EXPORT Quick3DTextureExtension : public QObject +{ + Q_OBJECT + Q_PROPERTY(QQmlListProperty<Qt3D::QAbstractTextureImage> textureImages READ textureImages) + Q_CLASSINFO("DefaultProperty", "textureImages") + +public: + explicit Quick3DTextureExtension(QObject *parent = 0); + + QQmlListProperty<QAbstractTextureImage> textureImages(); + inline QAbstractTextureProvider *parentTexture() const { return qobject_cast<QAbstractTextureProvider *>(parent()); } + +private: + static void appendTextureImage(QQmlListProperty<QAbstractTextureImage> *list, QAbstractTextureImage *textureImage); + static QAbstractTextureImage *textureImageAt(QQmlListProperty<QAbstractTextureImage> *list, int index); + static int textureImageCount(QQmlListProperty<QAbstractTextureImage> *list); + static void clearTextureImageList(QQmlListProperty<QAbstractTextureImage> *list); +}; + class QT3DQUICKRENDERERSHARED_EXPORT Quick3DTextureCubeMapExtension : public QObject { Q_OBJECT |