summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@qt.io>2018-09-18 14:46:34 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-09-19 12:15:43 +0000
commit95942f6b187c5272074c191424a18e33f8516967 (patch)
tree2423477b733b40339c182fffe7987718a7747b1c
parent6a3e45211f0153457f93a7e524a2891f23654aaa (diff)
Fix implicit start/end time for objects on the master slidev2.1.0-rcv2.1.0
We already do this for components, so do it for all slides in the scene "component" as well. Task-number: QT3DS-2299 Change-Id: I7484fb54c45e71e90455e96961671c70af5d6631 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r--src/runtime/q3dsuippresentation.cpp108
1 files changed, 55 insertions, 53 deletions
diff --git a/src/runtime/q3dsuippresentation.cpp b/src/runtime/q3dsuippresentation.cpp
index 1de9ad5..9f59edf 100644
--- a/src/runtime/q3dsuippresentation.cpp
+++ b/src/runtime/q3dsuippresentation.cpp
@@ -3859,67 +3859,69 @@ void Q3DSUipPresentation::addImplicitPropertyChanges()
{
// TODO: There might be other cases where we need to generate the property changes,
// this only deals with the start and end times for now.
- forAllObjectsInSubTree(scene(), [](Q3DSGraphObject *obj) {
- if ((obj->type() == Q3DSGraphObject::Slide && !obj->parent()) || obj->type() == Q3DSGraphObject::Component) {
- const bool isComponent = (obj->type() == Q3DSGraphObject::Component);
- Q3DSSlide *master = isComponent ? static_cast<Q3DSComponentNode *>(obj)->masterSlide() : static_cast<Q3DSSlide *>(obj);
- Q3DSSlide *slide = static_cast<Q3DSSlide *>(master->firstChild());
- while (slide) {
- for (auto o : master->objects()) {
- if (!o->isNode())
- continue;
-
- auto propChanges = slide->propertyChanges();
- const auto foundIt = propChanges.constFind(o);
-
- struct StartAndEndTime {
- qint32 hasStart = false;
- qint32 hasEnd = false;
- const qint32 defaultStart = 0;
- const qint32 defaultEnd = 10000;
- } startAndEndTime;
-
- if (foundIt != propChanges.cend()) {
- std::find_if(foundIt.value()->cbegin(), foundIt.value()->cend(), [&startAndEndTime](const Q3DSPropertyChange &change) {
- if (startAndEndTime.hasStart && startAndEndTime.hasEnd)
- return true;
-
- if (change.name() == QLatin1String("starttime"))
- startAndEndTime.hasStart = true;
- else if (change.name() == QLatin1String("endtime"))
- startAndEndTime.hasEnd = true;
-
- return false;
- });
- }
+ static const auto addProps = [](Q3DSSlide *master) {
+ Q3DSSlide *slide = static_cast<Q3DSSlide *>(master->firstChild());
+ while (slide) {
+ for (auto o : master->objects()) {
+ if (!o->isNode())
+ continue;
+
+ auto propChanges = slide->propertyChanges();
+ const auto foundIt = propChanges.constFind(o);
+
+ struct StartAndEndTime {
+ qint32 hasStart = false;
+ qint32 hasEnd = false;
+ const qint32 defaultStart = 0;
+ const qint32 defaultEnd = 10000;
+ } startAndEndTime;
+
+ if (foundIt != propChanges.cend()) {
+ std::find_if(foundIt.value()->cbegin(), foundIt.value()->cend(), [&startAndEndTime](const Q3DSPropertyChange &change) {
+ if (change.nameStr() == QLatin1String("starttime"))
+ startAndEndTime.hasStart = true;
+ else if (change.nameStr() == QLatin1String("endtime"))
+ startAndEndTime.hasEnd = true;
+
+ return (startAndEndTime.hasStart && startAndEndTime.hasEnd);
+ });
+ }
- // No prop change for object, then add default values 0s and 10s
- if (!startAndEndTime.hasStart) {
- const auto propChange = Q3DSPropertyChange::fromVariant(QLatin1String("starttime"), QVariant::fromValue(startAndEndTime.defaultStart));
- if (foundIt != propChanges.constEnd()) {
- auto propChangeList = slide->takePropertyChanges(o);
- propChangeList->append(propChange);
- slide->addPropertyChanges(o, propChangeList);
- } else {
- slide->addPropertyChanges(o, new Q3DSPropertyChangeList({propChange}));
- }
+ // No prop change for object, then add default values 0s and 10s
+ if (!startAndEndTime.hasStart) {
+ const auto propChange = Q3DSPropertyChange::fromVariant(QLatin1String("starttime"), QVariant::fromValue(startAndEndTime.defaultStart));
+ if (foundIt != propChanges.constEnd()) {
+ auto propChangeList = slide->takePropertyChanges(o);
+ propChangeList->append(propChange);
+ slide->addPropertyChanges(o, propChangeList);
+ } else {
+ slide->addPropertyChanges(o, new Q3DSPropertyChangeList({propChange}));
}
+ }
- if (!startAndEndTime.hasEnd) {
- const auto propChange = Q3DSPropertyChange::fromVariant(QLatin1String("endtime"), QVariant::fromValue(startAndEndTime.defaultEnd));
- if (foundIt != propChanges.constEnd()) {
- auto propChangeList = slide->takePropertyChanges(o);
- propChangeList->append(propChange);
- slide->addPropertyChanges(o, propChangeList);
- } else {
- slide->addPropertyChanges(o, new Q3DSPropertyChangeList({propChange}));
- }
+ if (!startAndEndTime.hasEnd) {
+ const auto propChange = Q3DSPropertyChange::fromVariant(QLatin1String("endtime"), QVariant::fromValue(startAndEndTime.defaultEnd));
+ if (foundIt != propChanges.constEnd()) {
+ auto propChangeList = slide->takePropertyChanges(o);
+ propChangeList->append(propChange);
+ slide->addPropertyChanges(o, propChangeList);
+ } else {
+ slide->addPropertyChanges(o, new Q3DSPropertyChangeList({propChange}));
}
}
- slide = static_cast<Q3DSSlide *>(slide->nextSibling());
}
+ slide = static_cast<Q3DSSlide *>(slide->nextSibling());
}
+ };
+
+ // Add implicit end/start time property changes to the components
+ forAllObjectsInSubTree(scene(), [](Q3DSGraphObject *obj) {
+ if (obj->type() == Q3DSGraphObject::Component)
+ addProps(static_cast<Q3DSComponentNode *>(obj)->masterSlide());
});
+
+ // And do the same for all slides
+ addProps(masterSlide());
}
QHash<QString, bool> &Q3DSUipPresentation::imageTransparencyHash()