diff options
Diffstat (limited to 'src/runtime/slideplayerng/q3dsslideplayerng.cpp')
-rw-r--r-- | src/runtime/slideplayerng/q3dsslideplayerng.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/runtime/slideplayerng/q3dsslideplayerng.cpp b/src/runtime/slideplayerng/q3dsslideplayerng.cpp index ac24c30..77a6194 100644 --- a/src/runtime/slideplayerng/q3dsslideplayerng.cpp +++ b/src/runtime/slideplayerng/q3dsslideplayerng.cpp @@ -34,6 +34,7 @@ #include <QtCore/qmetaobject.h> #include "q3dsscenemanager_p.h" #include "q3dsanimationmanagerng_p.h" +#include "q3dsengine_p.h" #include "q3dslogging_p.h" #include "animator/q3dsanimator_p.h" @@ -390,6 +391,18 @@ void Q3DSSlidePlayerNg::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); } @@ -533,8 +546,28 @@ void Q3DSSlidePlayerNg::setInternalState(Q3DSSlidePlayerNg::PlayerState newState m_sceneManager->queueEvent(ev); }; + Q3DSSlide *oldSlide = m_currentSlide; Q3DSSlide *currentSlide = m_data.slideDeck->currentSlide(); Q_ASSERT(currentSlide); + m_sceneManager->engine()->loadSlideResources(currentSlide, m_sceneManager->presentation()); + if (m_currentSlide && m_currentSlide != currentSlide) { + m_currentSlide->setActive(false); + if (m_currentSlide->unloadSlide()) + m_sceneManager->engine()->unloadSlideResources(m_currentSlide, + m_sceneManager->presentation()); + } + m_currentSlide = currentSlide; + m_currentSlide->setActive(true); + 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->currentSlide(), + m_sceneManager->presentation()); + } + } Q3DSSlide *activeSlide = (m_type == PlayerType::Scene) ? m_sceneManager->currentSlide() : m_component->currentSlide(); @@ -612,6 +645,8 @@ void Q3DSSlidePlayerNg::setInternalState(Q3DSSlidePlayerNg::PlayerState newState m_sceneManager->syncScene(); if (newState != PlayerState::Idle) { + if (oldSlide) + queueSlideEvent(oldSlide, Q3DSGraphObjectEvents::slideExitEvent()); queueSlideEvent(currentSlide, Q3DSGraphObjectEvents::slideEnterEvent()); Q_EMIT slideChanged(currentSlide); } @@ -906,4 +941,9 @@ void Q3DSSlidePlayerNg::objectRemovedFromSlide(Q3DSGraphObject *obj, Q3DSSlide * Q3DSAnimationManagerNg::removeObject(slide, obj); } +float Q3DSSlidePlayerNg::playbackRate() const +{ + return m_data.playbackRate; +} + QT_END_NAMESPACE |