diff options
author | Pasi Keränen <pasi.keranen@qt.io> | 2019-01-25 15:16:54 +0200 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@qt.io> | 2019-02-06 12:38:42 +0000 |
commit | 50565141cceb780bba1805fc7aab307a34ba27d1 (patch) | |
tree | 1954017cc1d8302253af14768f456ce2a626a6e0 /src/imports/studio3d/q3dsstudio3ditem.cpp | |
parent | 8ca98cea890c52a6576a1a277f2acffde9ef965e (diff) |
Add variant filtering
Add variant filtering to loading of presentations.
[ChangeLog][QtStudio3D][Support for variants] Qt 3D Studio runtime now supports loading presentations containing variant tags.
Task-number: QT3DS-2662
Change-Id: Id5637d23f5e9d178b8c40a3bb7c8b8950297548f
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/imports/studio3d/q3dsstudio3ditem.cpp')
-rw-r--r-- | src/imports/studio3d/q3dsstudio3ditem.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/imports/studio3d/q3dsstudio3ditem.cpp b/src/imports/studio3d/q3dsstudio3ditem.cpp index e5d94bb..b733b81 100644 --- a/src/imports/studio3d/q3dsstudio3ditem.cpp +++ b/src/imports/studio3d/q3dsstudio3ditem.cpp @@ -365,17 +365,17 @@ void Q3DSStudio3DItem::componentComplete() QQuickItem::componentComplete(); } -void Q3DSStudio3DItem::handlePresentationSource(const QUrl &source, +void Q3DSStudio3DItem::handlePresentationSource(const Q3DSSourceInfo &newSourceInfo, SourceFlags flags, const QVector<Q3DSInlineQmlSubPresentation *> &inlineSubPres) { - if (source == m_source) + if (m_sourceInfo == newSourceInfo) return; - if (!m_source.isEmpty()) + if (!m_sourceInfo.isEmpty()) releaseEngineAndRenderer(); - m_source = source; + m_sourceInfo = newSourceInfo; m_sourceFlags = flags; m_inlineQmlSubPresentations = inlineSubPres; @@ -385,7 +385,7 @@ void Q3DSStudio3DItem::handlePresentationSource(const QUrl &source, void Q3DSStudio3DItem::handlePresentationReload() { - if (m_source.isEmpty()) + if (m_sourceInfo.isEmpty()) return; releaseEngineAndRenderer(); @@ -487,15 +487,17 @@ void Q3DSStudio3DItem::createEngine() m_needsPresReadySignal = true; - const QString fn = QQmlFile::urlToLocalFileOrQrc(m_source); - qCDebug(lcStudio3D) << "source is now" << fn; + qCDebug(lcStudio3D) << "source is now" << m_sourceInfo.fileName(); + if (!m_sourceInfo.variantList().isEmpty()) + qCDebug(lcStudio3D) << "loading variants " << m_sourceInfo.variantList(); + const QSize sz(width(), height()); const qreal dpr = window()->effectiveDevicePixelRatio(); if (!sz.isEmpty()) m_engine->resize(sz, dpr); QString err; - m_sourceLoaded = m_engine->setSource(fn, &err, m_inlineQmlSubPresentations); + m_sourceLoaded = m_engine->setSource(m_sourceInfo, &err, m_inlineQmlSubPresentations); if (m_sourceLoaded) { if (!m_error.isEmpty()) { m_error.clear(); @@ -510,7 +512,17 @@ void Q3DSStudio3DItem::createEngine() // cannot start() here, that must be deferred } else { - qWarning("Studio3D: Failed to load %s\n%s", qPrintable(fn), qPrintable(err)); + if (m_sourceInfo.variantList().isEmpty()) { + qWarning("Studio3D: Failed to load %s\n%s", + qPrintable(m_sourceInfo.fileName()), + qPrintable(err)); + } else { + qWarning("Studio3D: Failed to load %s using variants %s\n%s ", + qPrintable(m_sourceInfo.fileName()), + qPrintable(m_sourceInfo.variantList().join(QLatin1Char(' '))), + qPrintable(err)); + } + m_error = err; emit errorChanged(); } @@ -611,7 +623,7 @@ void Q3DSStudio3DItem::itemChange(QQuickItem::ItemChange change, QMetaObject::invokeMethod(this, "destroyEngine"); }, Qt::DirectConnection); - if (!m_source.isEmpty() && !m_engine) + if (!m_sourceInfo.isEmpty() && !m_engine) createEngine(); if (m_engine && m_separateViewSetupPending) |