diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2016-05-04 12:23:32 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-05-04 15:32:52 +0000 |
commit | 7fa8b1523a0791a159c594687c89af7ae621752a (patch) | |
tree | 37d514632251ca22ba9713226a877de88ea2e663 /src/render/framegraph/qlayerfilter.cpp | |
parent | 2339fb571f1ca2e5d9057cccbb5989841c524dea (diff) |
Get rid of QLayer::names
Don't reinvent a variable naming system (string based global variables
even) and instead use pointer to QLayer instance everywhere, even with
QLayerFilter.
The wave and deferred-renderer-cpp examples have been ported to the new
API.
Change-Id: I82a858770954a8743a5c3d2ce0c463e62844871f
Task-number: QTBUG-51440
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/framegraph/qlayerfilter.cpp')
-rw-r--r-- | src/render/framegraph/qlayerfilter.cpp | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/src/render/framegraph/qlayerfilter.cpp b/src/render/framegraph/qlayerfilter.cpp index 5a9f9d692..3d472805b 100644 --- a/src/render/framegraph/qlayerfilter.cpp +++ b/src/render/framegraph/qlayerfilter.cpp @@ -39,7 +39,10 @@ #include "qlayerfilter.h" #include "qlayerfilter_p.h" +#include "qlayer.h" #include <Qt3DCore/qnodepropertychange.h> +#include <Qt3DCore/qnodeaddedpropertychange.h> +#include <Qt3DCore/qnoderemovedpropertychange.h> QT_BEGIN_NAMESPACE @@ -90,16 +93,41 @@ QLayerFilter::QLayerFilter(QLayerFilterPrivate &dd, QNode *parent) */ -void QLayerFilter::setLayers(const QStringList &layers) +void QLayerFilter::addLayer(QLayer *layer) { + Q_ASSERT(layer); Q_D(QLayerFilter); - if (d->m_layers != layers) { - d->m_layers = layers; - emit layersChanged(layers); + if (!d->m_layers.contains(layer)) { + d->m_layers.append(layer); + + // We need to add it as a child of the current node if it has been declared inline + // Or not previously added as a child of the current node so that + // 1) The backend gets notified about it's creation + // 2) When the current node is destroyed, it gets destroyed as well + if (!layer->parent()) + layer->setParent(this); + + if (d->m_changeArbiter != nullptr) { + const auto change = Qt3DCore::QNodeAddedPropertyChangePtr::create(id(), layer); + change->setPropertyName("layer"); + d->notifyObservers(change); + } } } -QStringList QLayerFilter::layers() const +void QLayerFilter::removeLayer(QLayer *layer) +{ + Q_ASSERT(layer); + Q_D(QLayerFilter); + if (d->m_changeArbiter != nullptr) { + const auto change = Qt3DCore::QNodeRemovedPropertyChangePtr::create(id(), layer); + change->setPropertyName("layer"); + d->notifyObservers(change); + } + d->m_layers.removeOne(layer); +} + +QVector<QLayer *> QLayerFilter::layers() const { Q_D(const QLayerFilter); return d->m_layers; @@ -110,7 +138,7 @@ Qt3DCore::QNodeCreatedChangeBasePtr QLayerFilter::createNodeCreationChange() con auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QLayerFilterData>::create(this); auto &data = creationChange->data; Q_D(const QLayerFilter); - data.layers = d->m_layers; + data.layerIds = qIdsForNodes(d->m_layers); return creationChange; } |