summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@qt.io>2018-06-06 14:41:18 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-06-06 13:49:40 +0000
commitc11c48b1c3091d9c740e1b62ff39830e071de9f1 (patch)
treef07148e24625e8c2f016461c03beab7c2f376ffe
parent0562086b4d28acd046b31012e070107680467795 (diff)
Fix mode setting on component players
Make sure we go through all component and their players, also just set the parent mode directly in the constructor for component players as we shouldn't need to go through the whole list each time. Change-Id: Iea0817fe540499d684fe0e15a415476c424558dc Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--src/runtime/q3dsslideplayer.cpp31
-rw-r--r--src/runtime/q3dsslideplayer_p.h2
2 files changed, 21 insertions, 12 deletions
diff --git a/src/runtime/q3dsslideplayer.cpp b/src/runtime/q3dsslideplayer.cpp
index 6369f7b..f2f31d9 100644
--- a/src/runtime/q3dsslideplayer.cpp
+++ b/src/runtime/q3dsslideplayer.cpp
@@ -332,15 +332,21 @@ void Q3DSSlidePlayer::sceneReady()
std::find_if(objects.constBegin(), objects.constEnd(), [](Q3DSGraphObject *obj) {
if (obj->type() == Q3DSGraphObject::Component && obj->state() == Q3DSGraphObject::Enabled) {
Q3DSComponentNode *comp = static_cast<Q3DSComponentNode *>(obj);
- Q3DSSlide *compSlide = comp->currentSlide();
+ Q3DSSlide *compSlide = comp->masterSlide();
Q3DSSlidePlayer *player = compSlide->attached<Q3DSSlideAttached>()->slidePlayer;
player->sceneReady();
}
return false;
});
};
- notifyComponentPlayers(static_cast<Q3DSSlide *>(currentSlide->parent()));
- notifyComponentPlayers(currentSlide);
+
+ Q3DSSlide *slide = m_data.slideDeck->masterSlide();
+ notifyComponentPlayers(slide);
+ slide = static_cast<Q3DSSlide *>(slide->firstChild());
+ while (slide) {
+ notifyComponentPlayers(slide);
+ slide = static_cast<Q3DSSlide *>(slide->nextSibling());
+ }
}
}
@@ -363,9 +369,6 @@ void Q3DSSlidePlayer::setMode(Q3DSSlidePlayer::PlayerMode mode)
if (!m_data.slideDeck)
return;
- Q3DSSlide *currentSlide = m_data.slideDeck->currentSlide();
- Q_ASSERT(currentSlide);
-
const auto notifyComponentPlayers = [mode](Q3DSSlide *slide) {
if (!slide)
return;
@@ -374,15 +377,21 @@ void Q3DSSlidePlayer::setMode(Q3DSSlidePlayer::PlayerMode mode)
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();
+ Q3DSSlide *compSlide = comp->masterSlide();
Q3DSSlidePlayer *player = compSlide->attached<Q3DSSlideAttached>()->slidePlayer;
player->setMode(mode);
}
return false;
});
};
- notifyComponentPlayers(static_cast<Q3DSSlide *>(currentSlide->parent()));
- notifyComponentPlayers(currentSlide);
+
+ Q3DSSlide *slide = m_data.slideDeck->masterSlide();
+ notifyComponentPlayers(slide);
+ slide = static_cast<Q3DSSlide *>(slide->firstChild());
+ while (slide) {
+ notifyComponentPlayers(slide);
+ slide = static_cast<Q3DSSlide *>(slide->nextSibling());
+ }
reload();
}
@@ -503,7 +512,6 @@ 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) {
@@ -605,11 +613,12 @@ void Q3DSSlidePlayer::reload()
Q3DSSlidePlayer::Q3DSSlidePlayer(QSharedPointer<Q3DSAnimationManager> animationManager,
Q3DSSceneManager *sceneManager,
Q3DSComponentNode *component,
- QObject *parent)
+ Q3DSSlidePlayer *parent)
: QObject(parent),
m_sceneManager(sceneManager),
m_component(component),
m_animationManager(animationManager),
+ m_mode(parent->mode()),
m_type(PlayerType::ComponentSlide)
{
}
diff --git a/src/runtime/q3dsslideplayer_p.h b/src/runtime/q3dsslideplayer_p.h
index 41a8c3f..db574ff 100644
--- a/src/runtime/q3dsslideplayer_p.h
+++ b/src/runtime/q3dsslideplayer_p.h
@@ -129,7 +129,7 @@ private:
Q3DSSlidePlayer(QSharedPointer<Q3DSAnimationManager> animationManager,
Q3DSSceneManager *sceneManager,
Q3DSComponentNode *component,
- QObject *parent = nullptr);
+ Q3DSSlidePlayer *parent = nullptr);
void init();
void reset();