diff options
Diffstat (limited to 'src/runtime/q3dsslideplayer.cpp')
-rw-r--r-- | src/runtime/q3dsslideplayer.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/runtime/q3dsslideplayer.cpp b/src/runtime/q3dsslideplayer.cpp index 0bf850f..aad3ca1 100644 --- a/src/runtime/q3dsslideplayer.cpp +++ b/src/runtime/q3dsslideplayer.cpp @@ -34,6 +34,7 @@ #include <QtCore/qmetaobject.h> #include "q3dsscenemanager_p.h" #include "q3dsanimationmanager_p.h" +#include "q3dsengine_p.h" #include "q3dslogging_p.h" #include <Qt3DAnimation/qclipanimator.h> @@ -518,6 +519,19 @@ void Q3DSSlidePlayer::setSlideDeck(Q3DSSlideDeck *slideDeck) forAllSlides(slideDeck); + m_sceneManager->engine()->loadSlideResources(slideDeck->masterSlide(), + m_sceneManager->presentation()); + for (auto object : slideDeck->masterSlide()->objects()) { + if (object->type() == Q3DSGraphObject::Component + && object->state() == Q3DSGraphObject::Enabled) { + Q3DSComponentNode *comp = static_cast<Q3DSComponentNode *>(object); + m_sceneManager->engine()->loadSlideResources(comp->masterSlide(), + m_sceneManager->presentation()); + m_sceneManager->engine()->loadSlideResources(comp->currentSlide(), + m_sceneManager->presentation()); + + } + } setInternalState(PlayerState::Ready); Q_EMIT slideDeckChanged(m_data.slideDeck); } @@ -597,6 +611,17 @@ void Q3DSSlidePlayer::setInternalState(Q3DSSlidePlayer::PlayerState state) { m_data.pendingState = state; Q3DSSlide *currentSlide = m_data.slideDeck->currentSlide(); + m_sceneManager->engine()->loadSlideResources(currentSlide, m_sceneManager->presentation()); + for (auto object : currentSlide->objects()) { + if (object->type() == Q3DSGraphObject::Component + && object->state() == Q3DSGraphObject::Enabled) { + Q3DSComponentNode *comp = static_cast<Q3DSComponentNode *>(object); + m_sceneManager->engine()->loadSlideResources(comp->masterSlide(), + m_sceneManager->presentation()); + m_sceneManager->engine()->loadSlideResources(comp->masterSlide(), + m_sceneManager->presentation()); + } + } qCDebug(lcSlidePlayer, "Setting internal state for %s from %s to %s", getSlideId(currentSlide).constData(), getEnumName(m_data.state), getEnumName(m_data.pendingState)); @@ -617,6 +642,17 @@ void Q3DSSlidePlayer::setInternalState(Q3DSSlidePlayer::PlayerState state) const bool forceUpdate = (!slideChanged && (state == PlayerState::Ready)); if (slideChanged || forceUpdate) handleCurrentSlideChanged(currentSlide, previousSlide, forceUpdate); + if (slideChanged) { + currentSlide->setActive(true); + m_sceneManager->engine()->loadSlideResources(currentSlide, m_sceneManager->presentation()); + if (previousSlide) { + previousSlide->setActive(false); + if (previousSlide->unloadSlide()) { + m_sceneManager->engine()->unloadSlideResources(previousSlide, + m_sceneManager->presentation()); + } + } + } if (state == PlayerState::Playing) { const bool restart = (m_mode == PlayerMode::Viewer) @@ -1099,4 +1135,9 @@ void Q3DSSlidePlayer::objectRemovedFromSlide(Q3DSGraphObject *obj, Q3DSSlide *sl evaluateDynamicObjectVisibility(obj); } +float Q3DSSlidePlayer::playbackRate() const +{ + return m_data.playbackRate; +} + QT_END_NAMESPACE |