summaryrefslogtreecommitdiffstats
path: root/src/runtime/q3dsslideplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/q3dsslideplayer.cpp')
-rw-r--r--src/runtime/q3dsslideplayer.cpp41
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