aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKwanghyo Park <kwanghyo.park@qt.io>2026-09-08 15:46:48 +0300
committerKwanghyo Park <kwanghyo.park@qt.io>2026-09-11 18:46:12 +0000
commitda0193a3ee643894601b059cee1118769fd9c1a1 (patch)
treee0194822ea0b746fd495b4d2bb73fd3789c7b18c
parent877eb2f3146b1f41678abbf9ac948e6268ee0ed6 (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.cpp17
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)