summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-07-09 13:34:24 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-07-10 08:03:15 +0000
commitdd2243a416402fc6f087982397f40fccb09912d2 (patch)
tree1af078d3e97708a4909d48c13a050a8b80efbad8
parentf2e0780604f9db9608de4a813e50088cb52dc11a (diff)
Start listening to slide list and slide object changes
Dynamically spawning objects will need acting on some of these. Also fix a suboptimal iteration on the slide list. Change-Id: I3e10375177b0aa81dda8d1476f5bb21d4841e0fe Reviewed-by: Andy Nichols <andy.nichols@qt.io>
-rw-r--r--src/runtime/q3dsscenemanager.cpp42
-rw-r--r--src/runtime/q3dsscenemanager_p.h2
2 files changed, 37 insertions, 7 deletions
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp
index ee88346..457cf18 100644
--- a/src/runtime/q3dsscenemanager.cpp
+++ b/src/runtime/q3dsscenemanager.cpp
@@ -671,13 +671,16 @@ Q3DSSceneManager::Scene Q3DSSceneManager::buildScene(Q3DSUipPresentation *presen
if (!m_flags.testFlag(SubPresentation))
Q3DSShaderManager::instance().setProfiler(m_profiler);
- // Enter the first slide. (apply property changes from master+first)
+ if (!m_scene) {
+ qWarning("Q3DSSceneManager: No scene?");
+ return Scene();
+ }
if (!m_masterSlide) {
- qWarning("Q3DSSceneBuilder: No master slide?");
+ qWarning("Q3DSSceneManager: No master slide?");
return Scene();
}
if (!m_masterSlide->firstChild()) {
- qWarning("Q3DSSceneBuilder: No slides?");
+ qWarning("Q3DSSceneManager: No slides?");
return Scene();
}
@@ -694,11 +697,17 @@ Q3DSSceneManager::Scene Q3DSSceneManager::buildScene(Q3DSUipPresentation *presen
}
};
- // Create the attached data object(s)
+ // Create the attached data object(s) and register for change notifications
createSlideAttached(m_masterSlide, m_rootEntity);
- const int count = m_masterSlide->childCount();
- for (int i = 0; i < count; ++i)
- createSlideAttached(static_cast<Q3DSSlide *>(m_masterSlide->childAtIndex(i)), m_rootEntity);
+ m_masterSlide->addSlideObjectChangeObserver(std::bind(&Q3DSSceneManager::handleSlideObjectChange,
+ this, std::placeholders::_1, std::placeholders::_2));
+ Q3DSSlide *subslide = static_cast<Q3DSSlide *>(m_masterSlide->firstChild());
+ while (subslide) {
+ createSlideAttached(subslide, m_rootEntity);
+ subslide->addSlideObjectChangeObserver(std::bind(&Q3DSSceneManager::handleSlideObjectChange,
+ this, std::placeholders::_1, std::placeholders::_2));
+ subslide = static_cast<Q3DSSlide *>(subslide->nextSibling());
+ }
Q3DSSlideDeck *slideDeck = new Q3DSSlideDeck(m_masterSlide);
m_currentSlide = slideDeck->currentSlide();
@@ -834,6 +843,10 @@ Q3DSSceneManager::Scene Q3DSSceneManager::buildScene(Q3DSUipPresentation *presen
m_scene->addSceneChangeObserver(std::bind(&Q3DSSceneManager::handleSceneChange,
this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
+ // And the "slide graph" (more like slide list).
+ m_masterSlide->addSlideGraphChangeObserver(std::bind(&Q3DSSceneManager::handleSlideGraphChange,
+ this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
+
// And for events too.
m_scene->addEventHandler(QString(), std::bind(&Q3DSSceneManager::handleEvent, this, std::placeholders::_1));
@@ -8101,4 +8114,19 @@ void Q3DSSceneManager::removeLayerContent(Q3DSGraphObject *obj, Q3DSLayerNode *l
markLayerAsContentChanged(layer3DS, Q3DSLayerNode::LayerContentSubTreeLightsChange);
}
+void Q3DSSceneManager::handleSlideGraphChange(Q3DSSlide *master, Q3DSGraphObject::DirtyFlag change, Q3DSSlide *slide)
+{
+ // called when a slide (a child of the master slide) is added or removed
+
+ Q_UNUSED(master);
+ Q_UNUSED(change);
+ Q_UNUSED(slide);
+}
+
+void Q3DSSceneManager::handleSlideObjectChange(Q3DSSlide *slide, const Q3DSSlide::SlideObjectChange &change)
+{
+ Q_UNUSED(slide);
+ Q_UNUSED(change);
+}
+
QT_END_NAMESPACE
diff --git a/src/runtime/q3dsscenemanager_p.h b/src/runtime/q3dsscenemanager_p.h
index 2f1ccc9..95f2179 100644
--- a/src/runtime/q3dsscenemanager_p.h
+++ b/src/runtime/q3dsscenemanager_p.h
@@ -871,6 +871,8 @@ private:
void handleSceneChange(Q3DSScene *scene, Q3DSGraphObject::DirtyFlag change, Q3DSGraphObject *obj);
void addLayerContent(Q3DSGraphObject *obj, Q3DSGraphObject *parent, Q3DSLayerNode *layer3DS);
void removeLayerContent(Q3DSGraphObject *obj, Q3DSLayerNode *layer3DS);
+ void handleSlideGraphChange(Q3DSSlide *master, Q3DSGraphObject::DirtyFlag change, Q3DSSlide *slide);
+ void handleSlideObjectChange(Q3DSSlide *slide, const Q3DSSlide::SlideObjectChange &change);
void handleEvent(const Q3DSGraphObject::Event &e);
void flushEventQueue();