diff options
author | Christian Strømme <christian.stromme@qt.io> | 2018-09-21 10:33:54 +0200 |
---|---|---|
committer | Christian Strømme <christian.stromme@qt.io> | 2018-09-21 10:34:42 +0200 |
commit | 9091098014c4cdfbc122bbc015b7641b07f28205 (patch) | |
tree | 034af6f3991a538814c55c6636c570b2efbf7fbb /src/runtime/q3dsuippresentation.cpp | |
parent | 59923f7725c82ac31c1245a36bd3b1be9bec3cd7 (diff) | |
parent | 95942f6b187c5272074c191424a18e33f8516967 (diff) |
Merge remote-tracking branch 'origin/2.1'
Change-Id: I5339cbc7f52608a7bfce10360ed20ba344b9c736
Diffstat (limited to 'src/runtime/q3dsuippresentation.cpp')
-rw-r--r-- | src/runtime/q3dsuippresentation.cpp | 108 |
1 files changed, 55 insertions, 53 deletions
diff --git a/src/runtime/q3dsuippresentation.cpp b/src/runtime/q3dsuippresentation.cpp index 1fbc963..982d306 100644 --- a/src/runtime/q3dsuippresentation.cpp +++ b/src/runtime/q3dsuippresentation.cpp @@ -3898,67 +3898,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() |