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