diff options
author | Christian Strømme <christian.stromme@qt.io> | 2018-06-06 14:41:18 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-06-06 13:49:40 +0000 |
commit | c11c48b1c3091d9c740e1b62ff39830e071de9f1 (patch) | |
tree | f07148e24625e8c2f016461c03beab7c2f376ffe | |
parent | 0562086b4d28acd046b31012e070107680467795 (diff) |
Fix mode setting on component players
Make sure we go through all component and their players, also just
set the parent mode directly in the constructor for component players
as we shouldn't need to go through the whole list each time.
Change-Id: Iea0817fe540499d684fe0e15a415476c424558dc
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r-- | src/runtime/q3dsslideplayer.cpp | 31 | ||||
-rw-r--r-- | src/runtime/q3dsslideplayer_p.h | 2 |
2 files changed, 21 insertions, 12 deletions
diff --git a/src/runtime/q3dsslideplayer.cpp b/src/runtime/q3dsslideplayer.cpp index 6369f7b..f2f31d9 100644 --- a/src/runtime/q3dsslideplayer.cpp +++ b/src/runtime/q3dsslideplayer.cpp @@ -332,15 +332,21 @@ void Q3DSSlidePlayer::sceneReady() std::find_if(objects.constBegin(), objects.constEnd(), [](Q3DSGraphObject *obj) { if (obj->type() == Q3DSGraphObject::Component && obj->state() == Q3DSGraphObject::Enabled) { Q3DSComponentNode *comp = static_cast<Q3DSComponentNode *>(obj); - Q3DSSlide *compSlide = comp->currentSlide(); + Q3DSSlide *compSlide = comp->masterSlide(); Q3DSSlidePlayer *player = compSlide->attached<Q3DSSlideAttached>()->slidePlayer; player->sceneReady(); } return false; }); }; - notifyComponentPlayers(static_cast<Q3DSSlide *>(currentSlide->parent())); - notifyComponentPlayers(currentSlide); + + Q3DSSlide *slide = m_data.slideDeck->masterSlide(); + notifyComponentPlayers(slide); + slide = static_cast<Q3DSSlide *>(slide->firstChild()); + while (slide) { + notifyComponentPlayers(slide); + slide = static_cast<Q3DSSlide *>(slide->nextSibling()); + } } } @@ -363,9 +369,6 @@ void Q3DSSlidePlayer::setMode(Q3DSSlidePlayer::PlayerMode mode) if (!m_data.slideDeck) return; - Q3DSSlide *currentSlide = m_data.slideDeck->currentSlide(); - Q_ASSERT(currentSlide); - const auto notifyComponentPlayers = [mode](Q3DSSlide *slide) { if (!slide) return; @@ -374,15 +377,21 @@ void Q3DSSlidePlayer::setMode(Q3DSSlidePlayer::PlayerMode mode) std::find_if(objects.constBegin(), objects.constEnd(), [mode](Q3DSGraphObject *obj) { if (obj->type() == Q3DSGraphObject::Component && obj->state() == Q3DSGraphObject::Enabled) { Q3DSComponentNode *comp = static_cast<Q3DSComponentNode *>(obj); - Q3DSSlide *compSlide = comp->currentSlide(); + Q3DSSlide *compSlide = comp->masterSlide(); Q3DSSlidePlayer *player = compSlide->attached<Q3DSSlideAttached>()->slidePlayer; player->setMode(mode); } return false; }); }; - notifyComponentPlayers(static_cast<Q3DSSlide *>(currentSlide->parent())); - notifyComponentPlayers(currentSlide); + + Q3DSSlide *slide = m_data.slideDeck->masterSlide(); + notifyComponentPlayers(slide); + slide = static_cast<Q3DSSlide *>(slide->firstChild()); + while (slide) { + notifyComponentPlayers(slide); + slide = static_cast<Q3DSSlide *>(slide->nextSibling()); + } reload(); } @@ -503,7 +512,6 @@ void Q3DSSlidePlayer::setSlideDeck(Q3DSSlideDeck *slideDeck) if (!compMasterData->slidePlayer) { qCDebug(lcSlidePlayer, "No player found for Component \"%s\", adding one", qPrintable(comp->name())); compMasterData->slidePlayer = new Q3DSSlidePlayer(m_animationManager, m_sceneManager, comp, this); - compMasterData->slidePlayer->setMode(mode()); compMasterSlide->attached<Q3DSSlideAttached>()->entity = comp->attached()->entity; Q3DSSlide *s = static_cast<Q3DSSlide *>(compMasterSlide->firstChild()); while (s) { @@ -605,11 +613,12 @@ void Q3DSSlidePlayer::reload() Q3DSSlidePlayer::Q3DSSlidePlayer(QSharedPointer<Q3DSAnimationManager> animationManager, Q3DSSceneManager *sceneManager, Q3DSComponentNode *component, - QObject *parent) + Q3DSSlidePlayer *parent) : QObject(parent), m_sceneManager(sceneManager), m_component(component), m_animationManager(animationManager), + m_mode(parent->mode()), m_type(PlayerType::ComponentSlide) { } diff --git a/src/runtime/q3dsslideplayer_p.h b/src/runtime/q3dsslideplayer_p.h index 41a8c3f..db574ff 100644 --- a/src/runtime/q3dsslideplayer_p.h +++ b/src/runtime/q3dsslideplayer_p.h @@ -129,7 +129,7 @@ private: Q3DSSlidePlayer(QSharedPointer<Q3DSAnimationManager> animationManager, Q3DSSceneManager *sceneManager, Q3DSComponentNode *component, - QObject *parent = nullptr); + Q3DSSlidePlayer *parent = nullptr); void init(); void reset(); |