diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-11-23 09:06:01 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2021-01-08 11:32:08 +0000 |
commit | d2fe37b3480cc55cf301426d7fa40475080cc6f9 (patch) | |
tree | 8c0ef31cdc3d2f75f4eed7d851a6d22e793d4c00 /src/quick3d/quick3drender/items/quick3deffect.cpp | |
parent | eee0fca4abc800883dde40559290403e7e550d14 (diff) |
Update QQMLPropertyList API
Use lambdas with local typedefs for index type
Change-Id: I2876c71d619815e7e777f936e8bb0835b8269336
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/quick3d/quick3drender/items/quick3deffect.cpp')
-rw-r--r-- | src/quick3d/quick3drender/items/quick3deffect.cpp | 136 |
1 files changed, 64 insertions, 72 deletions
diff --git a/src/quick3d/quick3drender/items/quick3deffect.cpp b/src/quick3d/quick3drender/items/quick3deffect.cpp index 617b52e85..09045011b 100644 --- a/src/quick3d/quick3drender/items/quick3deffect.cpp +++ b/src/quick3d/quick3drender/items/quick3deffect.cpp @@ -54,82 +54,74 @@ Quick3DEffect::Quick3DEffect(QObject *parent) QQmlListProperty<QTechnique> Quick3DEffect::techniqueList() { - return QQmlListProperty<QTechnique>(this, 0, - &Quick3DEffect::appendTechnique, - &Quick3DEffect::techniqueCount, - &Quick3DEffect::techniqueAt, - &Quick3DEffect::clearTechniqueList); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + using qt_size_type = qsizetype; +#else + using qt_size_type = int; +#endif + + using ListContentType = QTechnique; + auto appendFunction = [](QQmlListProperty<ListContentType> *list, ListContentType *bar) { + Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); + if (eff) + eff->parentEffect()->addTechnique(bar); + }; + auto countFunction = [](QQmlListProperty<ListContentType> *list) -> qt_size_type { + Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); + if (eff) + return eff->parentEffect()->techniques().count(); + return 0; + }; + auto atFunction = [](QQmlListProperty<ListContentType> *list, qt_size_type index) -> ListContentType * { + // TO DO : Return a QAbstractTechnique once properly defined + Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); + if (eff) + return qobject_cast<QTechnique*>(eff->parentEffect()->techniques().at(index)); + return nullptr; + }; + auto clearFunction = [](QQmlListProperty<ListContentType> *list) { + Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); + if (eff) { + // Ownership of techniques is handled by the QmlEngine so we shouldn't class clearTechniques + // which deletes techniques + const auto techniques = eff->parentEffect()->techniques(); + for (QTechnique *tech : techniques) + eff->parentEffect()->removeTechnique(tech); + } + }; + + return QQmlListProperty<ListContentType>(this, nullptr, appendFunction, countFunction, atFunction, clearFunction); } QQmlListProperty<QParameter> Quick3DEffect::parameterList() { - return QQmlListProperty<QParameter>(this, 0, - &Quick3DEffect::appendParameter, - &Quick3DEffect::parametersCount, - &Quick3DEffect::parameterAt, - &Quick3DEffect::clearParameterList); -} - -void Quick3DEffect::appendTechnique(QQmlListProperty<QTechnique> *list, QTechnique *bar) -{ - Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); - if (eff) - eff->parentEffect()->addTechnique(bar); -} - -// TO DO : Return a QAbstractTechnique once properly defined -QTechnique *Quick3DEffect::techniqueAt(QQmlListProperty<QTechnique> *list, qsizetype index) -{ - Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); - if (eff) - return qobject_cast<QTechnique*>(eff->parentEffect()->techniques().at(index)); - return nullptr; -} - -qsizetype Quick3DEffect::techniqueCount(QQmlListProperty<QTechnique> *list) -{ - Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); - if (eff) - return eff->parentEffect()->techniques().count(); - return 0; -} - -void Quick3DEffect::clearTechniqueList(QQmlListProperty<QTechnique> *list) -{ - Quick3DEffect *eff = qobject_cast<Quick3DEffect*>(list->object); - if (eff) { - // Ownership of techniques is handled by the QmlEngine so we shouldn't class clearTechniques - // which deletes techniques - const auto techniques = eff->parentEffect()->techniques(); - for (QTechnique *tech : techniques) - eff->parentEffect()->removeTechnique(tech); - } -} - -void Quick3DEffect::appendParameter(QQmlListProperty<QParameter> *list, QParameter *param) -{ - Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); - qobject_cast<QEffect *>(effect->parentEffect())->addParameter(param); -} - -QParameter *Quick3DEffect::parameterAt(QQmlListProperty<QParameter> *list, qsizetype index) -{ - Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); - return qobject_cast<QEffect *>(effect->parentEffect())->parameters().at(index); -} - -qsizetype Quick3DEffect::parametersCount(QQmlListProperty<QParameter> *list) -{ - Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); - return qobject_cast<QEffect *>(effect->parentEffect())->parameters().count(); -} - -void Quick3DEffect::clearParameterList(QQmlListProperty<QParameter> *list) -{ - Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); - const auto parameters = qobject_cast<QEffect *>(effect->parentEffect())->parameters(); - for (QParameter *p : parameters) - qobject_cast<QEffect *>(effect->parentEffect())->removeParameter(p); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + using qt_size_type = qsizetype; +#else + using qt_size_type = int; +#endif + + using ListContentType = QParameter; + auto appendFunction = [](QQmlListProperty<ListContentType> *list, ListContentType *param) { + Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); + qobject_cast<QEffect *>(effect->parentEffect())->addParameter(param); + }; + auto countFunction = [](QQmlListProperty<ListContentType> *list) -> qt_size_type { + Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); + return qobject_cast<QEffect *>(effect->parentEffect())->parameters().count(); + }; + auto atFunction = [](QQmlListProperty<ListContentType> *list, qt_size_type index) -> ListContentType * { + Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); + return qobject_cast<QEffect *>(effect->parentEffect())->parameters().at(index); + }; + auto clearFunction = [](QQmlListProperty<ListContentType> *list) { + Quick3DEffect *effect = qobject_cast<Quick3DEffect *>(list->object); + const auto parameters = qobject_cast<QEffect *>(effect->parentEffect())->parameters(); + for (QParameter *p : parameters) + qobject_cast<QEffect *>(effect->parentEffect())->removeParameter(p); + }; + + return QQmlListProperty<ListContentType>(this, nullptr, appendFunction, countFunction, atFunction, clearFunction); } } // namespace Quick |