diff options
-rw-r--r-- | src/runtime/q3dsslideplayer.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/runtime/q3dsslideplayer.cpp b/src/runtime/q3dsslideplayer.cpp index f1baf01..48b3ef1 100644 --- a/src/runtime/q3dsslideplayer.cpp +++ b/src/runtime/q3dsslideplayer.cpp @@ -357,6 +357,30 @@ float Q3DSSlidePlayer::position() const void Q3DSSlidePlayer::setMode(Q3DSSlidePlayer::PlayerMode mode) { m_mode = mode; + if (!m_data.slideDeck) + return; + + Q3DSSlide *currentSlide = m_data.slideDeck->currentSlide(); + Q_ASSERT(currentSlide); + + const auto notifyComponentPlayers = [mode](Q3DSSlide *slide) { + if (!slide) + return; + + const auto &objects = slide->objects(); + 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(); + Q3DSSlidePlayer *player = compSlide->attached<Q3DSSlideAttached>()->slidePlayer; + player->setMode(mode); + } + return false; + }); + }; + notifyComponentPlayers(static_cast<Q3DSSlide *>(currentSlide->parent())); + notifyComponentPlayers(currentSlide); + reload(); } @@ -476,6 +500,7 @@ 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) { |