[Qt] Invert parent/child notification mechanism in QQuickMapboxGLStyleProperty

Parent item (QQuickMapboxGL) should check for signals from its child
items e.g. QQuickMapboxGLStyleProperty, and not the opposite.
This commit is contained in:
Bruno de Oliveira Abinader
2016-08-04 15:56:27 +03:00
parent 5057d7ef5d
commit ee62a807a3
4 changed files with 77 additions and 60 deletions

View File

@@ -3,6 +3,7 @@
#include <mbgl/util/constants.hpp>
#include <QQuickMapboxGL>
#include <QQuickMapboxGLStyleProperty>
#include <QDebug>
#include <QQuickItem>
@@ -257,3 +258,36 @@ int QQuickMapboxGL::swapSyncState()
return oldState;
}
void QQuickMapboxGL::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)
{
QQuickFramebufferObject::itemChange(change, value);
switch (change) {
case QQuickItem::ItemChildAddedChange:
if (QQuickMapboxGLStyleProperty *property = qobject_cast<QQuickMapboxGLStyleProperty *>(value.item)) {
connect(property, SIGNAL(updated(QVariantMap)), this, SLOT(onStylePropertyUpdated(QVariantMap)));
}
break;
case QQuickItem::ItemChildRemovedChange:
if (QQuickMapboxGLStyleProperty *property = qobject_cast<QQuickMapboxGLStyleProperty *>(value.item)) {
disconnect(property, SIGNAL(updated(QVariantMap)), this, SLOT(onStylePropertyUpdated(QVariantMap)));
}
default:
break;
}
}
void QQuickMapboxGL::onStylePropertyUpdated(const QVariantMap &params)
{
switch (params.value("type").toInt()) {
case QQuickMapboxGLStyleProperty::LayoutType:
m_layoutChanges << params;
break;
case QQuickMapboxGLStyleProperty::PaintType:
m_paintChanges << params;
break;
}
update();
}