summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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()