diff options
| author | Kwanghyo Park <kwanghyo.park@qt.io> | 2026-09-08 15:46:48 +0300 |
|---|---|---|
| committer | Kwanghyo Park <kwanghyo.park@qt.io> | 2026-09-11 18:46:12 +0000 |
| commit | da0193a3ee643894601b059cee1118769fd9c1a1 (patch) | |
| tree | e0194822ea0b746fd495b4d2bb73fd3789c7b18c | |
| parent | 877eb2f3146b1f41678abbf9ac948e6268ee0ed6 (diff) | |
quickvectorimage: fix linked transforms in the item generator
A block that is instantiated more than once registers the same ids
repeatedly, so every instance ended up following the source of the last
one. Once the animation progressed, this surfaced as the wrong parent
transform.
Resolve linked transforms per instantiation.
Task-number: QTBUG-147743
Change-Id: Iff0e914168421a1e5e0a03b60ed32e81fdd4a95e
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
| -rw-r--r-- | src/quickvectorimage/generator/qquickitemgenerator.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/quickvectorimage/generator/qquickitemgenerator.cpp b/src/quickvectorimage/generator/qquickitemgenerator.cpp index 0506f7e3e4..fb34948092 100644 --- a/src/quickvectorimage/generator/qquickitemgenerator.cpp +++ b/src/quickvectorimage/generator/qquickitemgenerator.cpp @@ -918,8 +918,25 @@ void QQuickItemGenerator::generateDefsInstantiationNode(const StructureNodeInfo << "generateDefsInstantiationNode: unknown defs id:" << info.defsId; return; } + + const qsizetype pendingStart = m_pendingLinkedTransforms.size(); + const QHash<QString, QQuickTransformSource *> outerSources = m_transformSourceItems; + for (const auto &step : *it) step(); + + QList<PendingLinkedTransform> unresolved; + for (qsizetype i = pendingStart; i < m_pendingLinkedTransforms.size(); ++i) { + const PendingLinkedTransform &pending = m_pendingLinkedTransforms.at(i); + auto source = m_transformSourceItems.constFind(pending.transformReferenceId); + if (source == m_transformSourceItems.cend()) + unresolved.append(pending); + else + new TransformLinker(source.value(), pending.linkedMatrix, pending.item); + } + m_pendingLinkedTransforms.resize(pendingStart); + m_pendingLinkedTransforms.append(unresolved); + m_transformSourceItems = outerSources; } bool QQuickItemGenerator::generateMaskNode(const MaskNodeInfo &info) |
